docs: add event pass and nova burst renderer implementation log
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# 작업 로그: Event Pass 연동 + Nova Burst Canvas 렌더러 구현
|
||||
|
||||
## 📋 작업 내용 (What)
|
||||
1. **addEventPassPoints 실제 연결**: 보스 처치, 미션 클리어(STAGE_CLEAR), 미션 실패(부분 런) 시 Event Pass 포인트를 실제 게임플레이 이벤트에 연결.
|
||||
2. **Nova Burst Canvas 링 이펙트**: `GameRenderer`에 20프레임 확장 충격파 링을 4개 레이어로 렌더링하는 `renderNovaBurstEffect` 메서드 구현.
|
||||
|
||||
## 🎯 왜 했는지 (Why)
|
||||
- **패스 포인트가 UI에만 존재**: HangarOverlay에 PASS 탭을 만들었지만 실제 게임플레이에서 포인트를 지급하는 파이프라인이 없었음.
|
||||
- **Nova Burst 시각 부재**: 스킬 논리(`ModularWeaponSystem`)는 완성됐으나 Canvas 렌더러와 연동되지 않아 플레이어가 충격파를 시각적으로 느끼지 못했음.
|
||||
|
||||
## 💡 기대값 (Expected Value)
|
||||
- 보스 처치 시 스테이지 × 200pts 지급 (Stage 1: 200, Stage 3: 600)
|
||||
- 스테이지 클리어(STAGE_CLEAR) 시 기본 500 + 스테이지 × 100pts
|
||||
- 런 실패 시에도 10초당 1pt 지급 → "패배해도 진전이 있다" 심리적 보상
|
||||
- Nova Burst 발동 시 20프레임(0.33초) 확장 충격파 링 + 스파이크 라인 시각화
|
||||
|
||||
## 🔧 처리 과정 (How)
|
||||
|
||||
### 1. useGameEngine.ts — 보스 처치 패스 포인트
|
||||
- `PERMANENT_REWARD` intent 핸들러에 `addEventPassPoints(200 × stage)` 추가.
|
||||
- 보라색 플로팅 텍스트 `+N PASS PTS` 연출.
|
||||
|
||||
### 2. StageDirectorSystem.ts — STAGE_CLEAR 패스 포인트
|
||||
- `case 'STAGE_CLEAR'`의 `phaseTimer === 1` 시점에 `addEventPassPoints(500 + stage × 100)` 1회 호출.
|
||||
- phaseTimer === 1 조건으로 중복 지급 완전 차단.
|
||||
|
||||
### 3. useGameEngine.ts — 게임오버 부분 런 보상
|
||||
- 최종 사망 분기에 `Math.floor(frame / 60 / 10)` pts 지급 (10초당 1pt).
|
||||
- "실패해도 패스 티어가 오른다" UX 확보.
|
||||
|
||||
### 4. stateMachine.ts — PhaseTransitionContext 확장
|
||||
- `addEventPassPoints`, `addGold` 콜백 시그니처 추가 (미래 확장성 확보).
|
||||
|
||||
### 5. ModularWeaponSystem.ts — novaBurstRingEffect 신호 생성
|
||||
- 충격파 발동 시 `state.novaBurstRingEffect = { x, y, radius, level, timer: 20 }` 설정.
|
||||
- GameRenderer가 이 신호를 읽어 20프레임 동안 링을 렌더링.
|
||||
|
||||
### 6. GameRenderer.ts — renderNovaBurstEffect (4레이어 렌더러)
|
||||
- **레이어 1**: 외부 청록(#00e5ff) 충격파 링 — 두께 4→1px, 글로우 shadow
|
||||
- **레이어 2**: 내부 흰색 보조 링 (50% 반경, 40% 투명도)
|
||||
- **레이어 3**: 중심 시안 라디알 플래시 (초기 8프레임만, 빠른 소멸)
|
||||
- **레이어 4**: 6/8방향 스파이크 라인 (Lv3이면 8개) — 링 바깥으로 뻗는 방출 연출
|
||||
- `ring.timer--`로 자체 tick하여 별도 상태 관리 불필요.
|
||||
|
||||
## 🧠 사용한 지식 (Knowledge Used)
|
||||
- **Canvas 2D Compositing**: globalAlpha 스택 + save/restore 패턴으로 레이어별 독립적 투명도 관리.
|
||||
- **RadialGradient API**: createRadialGradient(cx, cy, r0, cx, cy, r1) 패턴으로 중심 플래시 구현.
|
||||
- **Signal Pattern**: 시스템 간 결합을 최소화하기 위해 state 오브젝트에 임시 신호 필드를 기록하고 렌더러가 읽는 방식.
|
||||
- **Event Pass Economics**: 보스>클리어>실패 순의 포인트 차등화로 플레이 깊이에 따른 보상 곡선 설계.
|
||||
|
||||
## ✅ 결과 (Result)
|
||||
- TypeScript 에러 0개
|
||||
- Git Commit: `226eb7c` (feat_event_pass_hooks_nova_burst_canvas_renderer)
|
||||
- Push: `origin/main`
|
||||
|
||||
## 🔗 연결 지식 (Relevant Knowledge)
|
||||
- E:\Wiki\2nd\10_Wiki\Topics\Game-Design (Event Pass Economy, Consolation Reward)
|
||||
- E:\Wiki\2nd\10_Wiki\Topics\Software-Architecture (Signal Pattern, System Decoupling)
|
||||
- E:\Wiki\2nd\10_Wiki\Topics\UI-UX (Canvas Compositing, Visual Feedback Loop)
|
||||
Reference in New Issue
Block a user