Add duty free systems and travel stage updates
This commit is contained in:
+44
-16
@@ -5,7 +5,7 @@
|
||||
## Scene Flow
|
||||
|
||||
`GameFlowManager`가 전체 흐름을 관리합니다.
|
||||
다음 리팩터링 이후에는 `GameFlowManager`가 화면을 직접 그리지 않고, 화면별 View를 호출하는 구조로 정리합니다.
|
||||
결과 화면, 면세점, 디버그 메뉴의 UI 생성 코드는 `Flow/Screens` partial 파일로 분리했습니다.
|
||||
|
||||
```text
|
||||
Intro
|
||||
@@ -30,6 +30,9 @@ Intro
|
||||
- 해금된 맵 인덱스
|
||||
- 총 마일리지
|
||||
- 면세점 구매 아이템 수량
|
||||
- 가방 슬롯 수와 장착 슬롯 상태
|
||||
- 영양제 구매 수
|
||||
- 스테이지별 마일리지 카드/영양제 1회 구매 제한 상태
|
||||
|
||||
## Map Data
|
||||
|
||||
@@ -53,9 +56,9 @@ Intro
|
||||
- 다음 맵
|
||||
- 코스 패턴
|
||||
|
||||
현재는 `MapDefinition`이 독립 타입인 `CourseStep[]` 형태의 `openingSteps`, `loopSteps`를 들고 있습니다.
|
||||
맵 생성 코드는 `Maps/Definitions/*Map.cs`로 분리했습니다.
|
||||
다음 리팩터링에서는 `CourseProfile`을 만들고 맵별 파일에서 코스 프로필을 연결합니다.
|
||||
`MapDefinition`은 `CourseProfile`을 우선 참조합니다.
|
||||
맵 생성 코드는 `Maps/Definitions/*Map.cs`로 분리했고, 각 맵은 `Course/Profiles/*CourseProfile.cs`를 연결합니다.
|
||||
`openingSteps`, `loopSteps`는 이전 구조와의 호환용 fallback으로 남겨 둡니다.
|
||||
|
||||
목표 구조:
|
||||
|
||||
@@ -67,11 +70,10 @@ MapDatabase
|
||||
-> AmericaMap.Create()
|
||||
|
||||
MapDefinition
|
||||
-> CourseProfile openingCourse
|
||||
-> CourseProfile loopCourse
|
||||
-> CourseProfile
|
||||
|
||||
PlatformSpawner
|
||||
-> CourseProfile 실행
|
||||
-> CourseProfile opening/loop 실행
|
||||
```
|
||||
|
||||
## Gameplay Runtime
|
||||
@@ -105,7 +107,7 @@ PlatformSpawner
|
||||
| 플레이 세션 총괄 | `GameManager` |
|
||||
| 거리/시간/클리어 판정 | `StageProgressTracker` |
|
||||
| 도착 게이트 생성/정리 | `FinishGateController` |
|
||||
| 목숨/피격/무적/방어막 | `DamageController` |
|
||||
| 목숨/피격/무적 | `DamageController` |
|
||||
| 아이템 효과 | `ItemEffectController` |
|
||||
| 왼쪽/오른쪽 HUD | `GameplayHudView` |
|
||||
| 튜토리얼 안내창 | `TutorialGuideView` |
|
||||
@@ -115,8 +117,11 @@ PlatformSpawner
|
||||
|
||||
현재 상태:
|
||||
|
||||
- `GameFlowManager` 안에 결과 화면, 면세점, 인트로, 맵 프리뷰, 디버그 메뉴 UI 생성 코드가 들어 있음
|
||||
- `GameFlowManager` 안에 인트로, 오프닝 스토리, 맵 프리뷰 UI 생성 코드가 남아 있음
|
||||
- 공통 UI 오브젝트 생성과 에셋 로딩도 같은 파일에 있음
|
||||
- 결과 화면, 면세점, 디버그 메뉴 UI 생성 코드는 `Assets/Scripts/Flow/Screens`로 먼저 이동함
|
||||
- 구매/저장/장착 로직은 안정성을 위해 아직 본체에 남아 있음
|
||||
- 맵 프리뷰는 인트로 세계지도 리소스와 비행기 경로 모션을 재사용해 다음 여행지 이동을 보여주며, 왼쪽 설명 패널은 표시하지 않음
|
||||
|
||||
목표 구조:
|
||||
|
||||
@@ -133,7 +138,8 @@ PlatformSpawner
|
||||
| 공통 UI 생성 | `FlowUiFactory` |
|
||||
| UI 에셋 로딩 | `FlowAssetLoader` |
|
||||
|
||||
디버그 메뉴는 현재 `Esc`로 열며, 인트로/게임 시작/출국 실패/출국 성공/면세점/지도 화면으로 바로 이동합니다.
|
||||
디버그 메뉴는 현재 `Esc`로 열며, 인트로/현재 맵 시작/출국 실패/출국 성공/면세점/지도 화면으로 바로 이동합니다.
|
||||
일본, 중국, 미국은 각각 게임시작과 출국성공 프리뷰 버튼을 따로 제공합니다.
|
||||
리팩터링 후에도 개발 빌드 전용 기능으로 유지합니다.
|
||||
|
||||
## DutyFreeShop
|
||||
@@ -142,15 +148,37 @@ PlatformSpawner
|
||||
|
||||
- 화면 흐름은 있음
|
||||
- 코드 오버레이 화면은 면세점 내부 배경과 상품 카드형 UI로 표시함
|
||||
- 도시락, 방어막, 운동화, 마일리지 카드의 보유 수량과 가격을 표시함
|
||||
- 구매 데이터 저장은 있음
|
||||
- 실제 장착 슬롯과 플레이 시작 전 준비 구조는 아직 미완성
|
||||
- 판매 아이템은 도시락, 영양제, 마일리지 카드, 가방 업그레이드
|
||||
- 도시락과 마일리지 카드는 가방 슬롯에 장착해서 다음 스테이지에서 사용
|
||||
- 영양제는 장착 아이템이 아니라 누적 구매형 최대 HP 증가 아이템
|
||||
- 가방 업그레이드는 활성 슬롯을 최대 3칸까지 늘림
|
||||
- 구매 데이터와 장착 슬롯은 저장/로드됨
|
||||
|
||||
구매 제한:
|
||||
|
||||
1. 가방 칸보다 많은 장착형 아이템은 살 수 없음
|
||||
2. 도시락은 현재 최대 목숨 수보다 많이 살 수 없음
|
||||
3. 보유 마일리지가 부족하면 살 수 없음
|
||||
4. 영양제와 마일리지 카드는 한 스테이지당 1개만 살 수 있음
|
||||
|
||||
다음 방향:
|
||||
|
||||
1. 스테이지 시작 전 장착 슬롯에 넣기
|
||||
2. 가방 업그레이드로 슬롯 수 증가
|
||||
3. 스테이지 중 장착 아이템 사용/소모
|
||||
1. Unity Play 모드에서 구매/장착/소모 흐름 확인
|
||||
2. 면세점 UI에서 부족/슬롯 가득/1회 완료 상태가 잘 읽히는지 확인
|
||||
3. 필요하면 구매 피드백 효과 추가
|
||||
|
||||
## Stage Backgrounds
|
||||
|
||||
현재 맵별 런타임 배경:
|
||||
|
||||
- 튜토리얼/인천: `StageBackgrounds/Incheon/Stage_Incheon_DarkLower_Segment_*`
|
||||
- 일본: `Map_Japan_Fukuoka`
|
||||
- 중국: `Map_China_Beijing`
|
||||
- 미국: `Map_America_NewYork`
|
||||
|
||||
`BackgroundLoop`는 단일 `backgroundResourcePath`와 여러 장의 `backgroundResourcePaths`를 모두 처리합니다.
|
||||
여러 배경 조각이 들어오면 왼쪽/오른쪽 배경 오브젝트에 순서대로 스프라이트를 배정하고, 루프될 때 다음 조각으로 넘깁니다.
|
||||
인천 배경은 현재 임시 캔버스 보정본이 적용되어 있으므로 최종 16:9 원화로 다시 교체할 예정입니다.
|
||||
|
||||
## Finish Gate
|
||||
|
||||
|
||||
Reference in New Issue
Block a user