2.5 KiB
2.5 KiB
Context: Arena & Scene
1. 모듈별 상세 역할 (src/game/arena/)
ArenaScene.js: Phaser 씬의 생명주기와 전반적인 오케스트레이션을 담당합니다.update()매 프레임마다 전투원 상태를 체크하고, 카메라 이동 및 UI 모듈 호출을 조율합니다.arenaRenderer.js: 아레나 배경 그래픽 및 타일 렌더링을 담당합니다.arenaSpectatorCamera.js: 관전 모드 시점 계산 및 카메라 포커싱 로직을 담당합니다. 생존 인원에 따른 지능형 카메라 추적 알고리즘이 구현되어 있습니다.
2. 주요 로직 구현 세부 사항
지능형 카메라 추적 (Lerp & Jittering 방지)
카메라가 소수점 단위의 평균 좌표를 즉시 따라가면 화면이 떨려 보일 수 있습니다. 이를 방지하기 위해:
- 목표 좌표(
targetX, targetY)를Math.round()로 정수화합니다. - 현재 카메라 위치에서 목표 지점까지 매 프레임
0.1의 배율로 거리를 좁혀나가는Lerp연산을 수행합니다.
this.cameras.main.scrollX += (targetX - this.cameras.main.midPoint.x) * SPECTATOR_CAMERA_LERP;
최종교전 관전은 두 단계로 나뉩니다.
- 생존 4명 이하:
SPECTATOR_RANDOM_FOCUS_INTERVAL마다 생존 캐릭터 중 한 명을 무작위로 포커싱합니다. - 2팀 잔여 & 합계 8명 이하: 더 적은 생존 수를 가진 팀의 중앙을 포커싱하며, 동률이면 기존 교전쌍 중심 포커싱으로 되돌아갑니다.
미니맵 가이드라인
미니맵은 전장 전체를 축소하여 보여주는 독립된 카메라입니다. 주 카메라가 비추는 영역을 계산하여 미니맵 위에 사각형(graphics)을 그려줍니다.
camera.displayWidth / zoom등을 이용하여 현재 월드에서 보이는 실제 영역 크기를 계산합니다.- 뷰포트 사각형 좌표는 미니맵 픽셀 격자에 맞춰 반올림하고, 외곽 stroke가 겹쳐 검게 깨지지 않도록 노란 내부 선을 채운 직사각형으로 렌더링합니다.
씬 상태 관리
- 프리뷰 모드 (
presentationMode): 최초 로드 시 조용히 실행되는 배경 전투입니다. 로컬 저장 옵션과 무관하게 10팀 x 5명 고정 규모로 동작합니다. - 일시정지 (
setPaused): 실제 전투에서 물리, Phaser 타이머, tween, 스프라이트 애니메이션을 함께 제어합니다. 프리뷰 및 종료된 전투는 제외됩니다.