Files
2nd/10_Wiki/Topics/Architecture/InGame_Progression_System.md
T

2.8 KiB

🔄 In-Game Progression & Evolution (인게임 성장 및 진화 시스템)

카테고리: Skybound, Game Design, Software Architecture 상태: 🔵 구현 완료 (Implemented) 최종 업데이트: 2026-04-22


📌 개요 (Overview)

Skybound의 인게임 성장은 EXP 수집을 통한 레벨업, 3지선다 스킬 선택, 그리고 특정 조건 만족 시 발생하는 '진화(Evolution)'로 구성된다. 이 시스템은 게임 엔진의 상태 기계(State Machine)와 React UI 간의 단방향 데이터 흐름을 기반으로 동작한다.

🛠️ 핵심 메커니즘 (Core Mechanisms)

1. 레벨업 프로세스 (Level-Up Pipeline)

  • EXP 수집: 적 처치 시 드롭되는 젬을 수집하여 exp 게이지가 차오르면 트리거됨.
  • Pause Gate Pattern: 레벨업 발생 시 엔진은 즉시 setPaused(true)를 호출하여 인게임을 멈추고, LEVEL_UP 이벤트를 UI로 발송한다.
  • 결정론적 카드 생성: 카드 풀은 UI가 아닌 ProgressionSystem 엔진 로직 내에서 생성되어 전달되므로, 엔진의 상태와 UI가 항상 동기화된다.
  • Resume: 플레이어가 카드를 선택하면 applySkillSelection을 통해 엔진 state가 업데이트되고 다시 setPaused(false)로 재개된다.

2. 진화 시스템 (Evolution / EVO)

  • 발동 조건: 주 무기(Primary Skill)가 최대 레벨에 도달하고, 특정 보조 무기(Support Skill)를 보유하고 있을 때 다음 레벨업 시 발생.
  • NOVA_GUARDIAN: aoe_nova (Lv.3 MAX) + energy_shield (Lv.1+) 조합의 진화형.
  • EVO 효과: 단순히 데미지가 증가하는 것이 아니라, 쿨다운 대폭 감소, 반경 확장, 시각적 강화(황금색), 그리고 발동 시 짧은 무적(Shield Burst) 등의 유틸리티 성능이 추가된다.

3. 패시브 동기화 (Passive Sync)

  • 패시브 스킬(Fire Rate, Speed, Magnet)은 syncPassives()를 통해 매 프레임 플레이어의 EffectiveStats에 주입되어 즉각적인 성능 변화를 체감하게 한다.

💡 주요 설계 패턴 (Design Patterns)

1. TDZ (Temporal Dead Zone) 회피 패턴

  • useGameEngine 내에서 ctx 선언 전 클로저 참조 문제를 해결하기 위해 let ctx 선언 후 나중에 할당하는 패턴을 사용하여 초기화 안정성을 확보함.

2. 단방향 데이터 흐름 (Unidirectional Data Flow)

  • UI는 엔진의 상태를 직접 수정하지 않고, applySkill 콜백을 통해서만 의사결정을 엔진에 주입한다.

승인인: AI 개발부장 코다리 🫡 관련 코드: ProgressionSystem.ts, evolutions.ts, GameSceneRenderer.tsx, useGameEngine.ts

🔗 Knowledge Connections