diff --git a/00_Raw/2026-04-22_EventPass_NovaBurst_Renderer.md b/00_Raw/2026-04-22_EventPass_NovaBurst_Renderer.md new file mode 100644 index 00000000..4a34978b --- /dev/null +++ b/00_Raw/2026-04-22_EventPass_NovaBurst_Renderer.md @@ -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)