# 프로젝트 개발 체크리스트 (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 / 방향키를 통한 화면 이동
  - 마우스 휠을 통한 줌인/줌아웃
  - 화면 가장자리에 마우스 위치 시 카메라 스크롤 (선택 사항)
  - 최대 줌 아웃 시 화면을 맵에 가득 채우고(max_zoom = 15.0) 카메라 이동 차단 및 중앙 초점 정렬 연동

## [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, 골드 보상 등) 스케일링 공식 적용
  - 스폰 타이머 및 준비 쿨다운 타이머의 시간을 일시정지(`Timer.paused`)시키는 로직 탑재
- [x] HUD UI 스크립트(`hud.gd`) 개선을 통해 런타임 몬스터 생성 일시정지 버튼(`PauseSpawningButton`) 추가 및 토글 연동 완료

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

## [x] 4단계: RTS식 유닛 선택 및 이동 (Navigation)
- [x] 네비게이션 메시 (`NavigationRegion3D`) 맵에 추가 및 구워내기 (Bake)
- [x] 마우스 클릭 및 드래그 박스(`Area3D` 또는 스크린 투 월드 투영 기법)를 활용한 유닛 멀티 선택 기능 구현
- [x] 선택된 유닛이 맵 바닥 우클릭 시 네비게이션 에이전트(`NavigationAgent3D`)를 활용하여 목적지로 이동하도록 구현
- [x] 선택된 유닛이 키보드 H 키 클릭 시 제자리에 고정 대기(Hold Position)하며, 이동을 멈추고 자신의 공격 사거리 내에 들어온 몬스터만 수비 타겟팅하도록 전투 AI와 연계하여 홀드 기능 완료

## [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] 가디언 FBX 파일(`guardian.fbx`)에서 애니메이션들을 추출하여 단일 `AnimationLibrary` 리소스(`guardian_animations.tres`)로 병합 완료
- [x] `base_unit.gd`가 유닛 모델 노드명(예: `striker`, `guardian`)을 자동 감지해 해당 라이브러리를 바인딩하고 가변 배속으로 3D 애니메이션을 실시간 분기 연동하는 범용 3D 애니메이션 제어 시스템 구축 완료
- [x] `guardian_unit.tscn` 씬을 설계 및 신설하여 가디언 모델과 스킨 텍스처를 씬에 연계 완료
- [x] `hud.gd`에 중복되어 존재하던 유닛 ID 버그를 일괄 픽스하고, 가디언 유닛 소환 시 `guardian_unit.tscn`이 씬 분기로 올바르게 로드되도록 연동 완료
- [x] 사용자가 직접 `striker_unit.tscn`에서 모델 회전 보정을 적용한 상태를 인지하고, 스크립트(`base_unit.gd`)의 수동 Y축 회전 코드를 완벽히 제거
- [x] Striker 유닛 오른손 본(`RightHand`)에 `BoneAttachment3D` 노드를 런타임 동적 배치하고 `azure_blade.fbx` 검 무기를 장착 및 텍스처를 씌우는 기능 구현 완료 (스케일 150배 확대 및 Z축 -0.6m 손잡이 쥠 오프셋 적용)
- [x] `DataManager` 싱글톤 신설 및 오토로드 등록을 완료하여 유닛 데이터(5종 스펙)와 몬스터 데이터(HP 스케일링, 보상 테이블)를 통합 분리
- [x] `hud.gd` 및 `stage_manager.gd`에서 하드코딩되었던 데이터 조작 로직들을 걷어내고 `DataManager`를 참조하도록 리팩토링 완수
