# 프로젝트 개발 체크리스트 (todo.md)

이 문서는 본 3D 무작위 유닛 디펜스 게임의 전체 개발 로드맵과 각 단계별 진척 상황을 관리합니다.

## [x] 1단계: 기본 맵과 3D 카메라 셋업
- [x] 프로젝트 기본 폴더 구조 생성 (`src/core`, `src/autoload`, `src/entities`, `src/ui`, `src/utils` 등)
- [x] 메인 게임 씬 (`src/core/main.tscn`) 생성
- [x] 3D 기본 지형 구축 (지상 바닥 및 조명, 환경 설정)
- [x] 몬스터 이동 경로 (`Path3D`) 배치 (맵 가장자리를 도는 루프 형태)
- [x] RTS 스타일 3D 카메라 구현 (`src/core/rts_camera.gd`)
  - WASD / 방향키를 통한 화면 이동
  - 마우스 휠을 통한 줌인/줌아웃
  - 화면 가장자리에 마우스 위치 시 카메라 스크롤 (선택 사항)

## [x] 2단계: 글로벌 게임 매니저와 스테이지 시스템
- [x] 글로벌 게임 매니저 싱글톤 (`src/autoload/game_manager.gd`) 구현
  - `player_gold`, `unit_spawn_cost`, `current_stage`, `active_monster_count` 등 상태 변수 관리
  - 게임오버(200마리 초과) 및 승리 조건(20스테이지 클리어) 체크 루프
- [x] 스테이지 제어 로직 구현 (`src/core/stage_manager.gd`)
  - 1초 간격 몬스터 스폰 타이머 설정
  - 스테이지별 몬스터 제원 (HP, 골드 보상 등) 스케일링 공식 적용

## [x] 3단계: 몬스터 시스템 구현
- [x] 기본 몬스터 씬 (`src/entities/monsters/base_monster.tscn`) 및 스크립트 작성
- [x] 몬스터가 `PathFollow3D`를 따라 이동하게 하고, 끝에 도달하면 시작 지점으로 다시 루프하도록 설정
- [x] 몬스터 피격, 체력 소진 시 소멸 및 골드 보상 획득 로직 구현

## [x] 4단계: RTS식 유닛 선택 및 이동 (Navigation)
- [x] 네비게이션 메시 (`NavigationRegion3D`) 맵에 추가 및 구워내기 (Bake)
- [x] 마우스 클릭 및 드래그 박스(`Area3D` 또는 스크린 투 월드 투영 기법)를 활용한 유닛 멀티 선택 기능 구현
- [x] 선택된 유닛이 맵 바닥 우클릭 시 네비게이션 에이전트(`NavigationAgent3D`)를 활용하여 목적지로 이동하도록 구현

## [x] 5단계: 유닛 클래스 정의 및 전투 구현
- [x] 유닛 기본 스키마 (`src/entities/units/base_unit.gd`) 작성 (정적 타이핑 적용)
- [x] 5종의 유닛(Striker, Guardian, Ranger, Slayer, Archmage) 스펙 정의 (커스텀 리소스 사용 또는 스크립트 분기)
- [x] 적 감지 범위 (`Area3D`) 내의 몬스터를 자동 검색 및 추격, 사거리 진입 시 쿨타임에 따른 자동 공격 구현
- [x] 투사체(Ranger, Archmage용) 또는 근접 공격 이펙트 처리

## [x] 6단계: UI 및 소환 시스템
- [x] 메인 HUD UI 씬 (`src/ui/hud.tscn`) 구성
  - 상단: 스테이지 정보, 몬스터 마릿수(0/200), 현재 골드 상태
  - 하단: 유닛 소환 버튼 (100골드 소모) 및 선택된 유닛 정보 창
- [x] 소환 버튼 클릭 시 맵 중앙의 소환 구역(Spawn Zone)에 20% 확률로 5종 유닛 중 무작위 소환
- [x] 게임 오버 및 게임 승리 결과 팝업 UI 구현

## [x] 7단계 & 8단계: Striker 전용 씬 분리 및 애니메이션 병합
- [x] Striker 전용 폴더 및 `striker_unit.tscn` 씬 파일 생성하여 FBX 인스턴스 링킹
- [x] `base_unit.gd` 및 `hud.gd` 리팩토링을 통해 소환 시 전용 씬 분기 소환 및 텍스처 오버라이드 맵핑 적용
- [x] 개별 FBX 파일들(`striker_idle.fbx`, `striker_walk.fbx`, `striker_run.fbx`, `striker_attack.fbx`)을 툴 스크립트로 단일 `AnimationLibrary` 리소스(`striker_animations.tres`)로 병합 완료
- [x] `base_unit.gd`에서 병합된 애니메이션 라이브러리를 동적 로드 및 주입하여 상태(Idle, Move, Attack)별 실제 애니메이션 연동 완료
