Files
2nd/00_Raw/2026-04-22_EventPass_NovaBurst_Renderer.md
T

3.7 KiB
Raw Blame History

작업 로그: 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)