# Core - 기반 추상화 계층
게임 엔진의 **확장 가능한 인터페이스**와 **기본 데이터 타입**을 정의하는 계층입니다.
## 📦 모듈 구성
### `system.rs`
- **`System` trait**: 모든 게임 로직 시스템이 구현해야 하는 인터페이스
- **`SystemId`**: 시스템 고유 식별자
- **`SystemContext`**: 시스템 실행 컨텍스트 (delta_time, entities, input 등)
- **`SystemError`**: 시스템 실행 중 발생하는 에러
### `component.rs`
- **`Component` trait**: 모든 컴포넌트가 구현해야 하는 인터페이스
- Entity에 부착되는 데이터 조각의 기본 인터페이스
### `entity.rs`
- **`Entity`**: Component들을 담는 컨테이너
- **`EntityId`**: 엔티티 고유 식별자
- TypeId 기반 Component 저장/조회 시스템
### `input.rs`
- **`InputState`**: 입력 상태를 저장하고 조회하는 순수 데이터 구조체
- 키보드/마우스 입력 Polling API 제공
- System들이 읽기 전용으로 접근
## 🎯 설계 철학
### 확장성 (Extensibility)
사용자가 `System`과 `Component` trait만 구현하면 엔진을 자유롭게 확장할 수 있습니다.
```rust
use moltrun::core::{System, SystemContext, SystemError};
struct MyCustomSystem;
impl System for MyCustomSystem {
fn update(&mut self, context: &mut SystemContext) -> Result<(), SystemError> {
// 커스텀 로직 구현
Ok(())
}
// ...
}
```
### 추상화 (Abstraction)
구체적인 구현이 아닌 **인터페이스만** 정의합니다. 실제 구현체는 다른 계층(`components/`, `systems/`)에 위치합니다.
### 의존성 방향
모든 다른 계층이 `core/`를 참조하지만, `core/`는 최소한의 외부 의존성만 가집니다.
```
components/ ────┐
systems/ ────┤
runtime/ ────┼──→ core/
render/ ────┤
scene/ ────┘
```
## 📋 사용 예시
### Entity + Component
```rust
use moltrun::core::{Entity, EntityId};
use moltrun::components::Transform;
let mut entity = Entity::new(EntityId::new(1));
entity.add_component(Transform::default());
if let Some(transform) = entity.get_component::<Transform>() {
// Transform 사용
}
```
### System 등록 및 입력 사용
```rust
use moltrun::runtime::World;
use moltrun::core::{System, SystemContext, SystemError};
use winit::keyboard::KeyCode;
struct MyCustomSystem;
impl System for MyCustomSystem {
fn update(&mut self, context: &mut SystemContext) -> Result<(), SystemError> {
// 입력 접근
if context.input.is_key_down(KeyCode::KeyW) {
// W 키가 눌려있을 때
}
Ok(())
}
fn as_any(&self) -> &dyn std::any::Any { self }
fn as_any_mut(&mut self) -> &mut dyn std::any::Any { self }
}
let mut world = World::new();
world.register_system(MyCustomSystem)?;
```
## 🔗 관련 계층
- **`runtime/`**: `core/`의 인터페이스를 사용하여 실행 환경 구축
- **`components/`**: `Component` trait 구현체들
- **`systems/`**: `System` trait 구현체들 (미래 확장)