3.5 KiB
3.5 KiB
덱 컨트롤러 코드리뷰 수정 설계
- 날짜: 2026-06-08
- 브랜치: feature/deck-controller-fixes (main 기준)
- 대상:
tools/gen-slaydeck.mjs(단일 소스) → 재생성으로ui/DefaultGroup.ui·RootDesk/MyDesk/SlayDeckController.codeblock·Global/common.gamelogic갱신
배경
PR #6의 SlayDeckController 코드 리뷰에서 6건을 발견. 모든 산출물(카드 UI·DeckHud·codeblock·common 패치)은 tools/gen-slaydeck.mjs 한 곳에서 생성되므로, 이 생성기를 고치고 재실행하면 전부 반영된다.
수정 항목
- ① [Important] EndTurn 핸들러 self 바인딩:
buttonEntity:ConnectEvent(ButtonClickEvent, self.EndPlayerTurn)→ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end). 메서드 직접 전달 시 self가 event로 잘못 바인딩되는 문제 제거. (타이머는 이미 클로저 사용 — 일관성) - ② [Important] Card5 이미지 충돌: 이미
gen-slaydeck.upsertUi가 Card1~5를 동일 텍스트 카드로 통일(ImageRUID='', 틴트, Cost/Name/Desc 추가)하므로 재생성으로 해결됨. 추가 코드 변경 없음 — 검증만. - ③ [기능] 카드 클릭 = 사용:
upsertUi의 카드 스타일 루프에서 Card1~5에ButtonComponent추가 + 카드 스프라이트RaycastTarget=true.- codeblock에
PlayCard(slot)메서드 추가:Hand[slot]의 카드 코스트를CARDS에서 조회 →Energy >= cost면Energy -= cost, 효과 표시(토스트/로그, 예: "타격 — 피해 6"),Hand에서 제거 후DiscardPile에 삽입,RenderHand(false)+RenderPiles(). 부족하면 사용 불가(토스트/로그). BindButtons에서 각 카드의ButtonClickEvent를function() self:PlayCard(i) end클로저로 연결(루프 변수 i는 Lua에서 반복마다 새 지역변수라 안전). 재연결 전 이전 핸들러 해제.
- ④ [Minor] 카드 데이터 단일화:
CARDS = { Strike={name,cost,desc,kind}, Defend={...}, Bash={...} }테이블을 codeblock 상단에 두고, 시작덱 구성·ApplyCardVisual·PlayCard가 공유(if/elseif 중복 제거). - ⑤ [Minor] 매직넘버 상수화: 손패/드로우 수(5), 시작 에너지(3) 등 의미 있는 상수로.
- ⑥ [Nit] pcall 제거:
ApplyCardVisual의pcall(function() return Color(...) end)→ 직접Color(...)호출(틴트는CARDS[id].kind별 색).
효과 표시(③)
적/데미지 시스템이 없으므로 카드 사용 효과는 토스트 또는 로그로만 표현(예: log("타격 — 피해 6") 또는 UIToast). 실제 데미지 적용은 범위 밖.
재생성·검증
node --check tools/gen-slaydeck.mjs→node tools/gen-slaydeck.mjs- 검증(데이터): codeblock에
PlayCard존재,BindButtons/EndTurn이 클로저,CARDS단일 테이블,ApplyCardVisual에 pcall 없음. DefaultGroup.ui의 Card1~5에ButtonComponent+ RaycastTarget true, Card5가 균일 텍스트 카드(ImageRUID 빈값·Cost/Name/Desc 존재). - Maker Play: 카드 클릭 → 에너지 감소·카드가 버림더미로·재렌더, EndTurn 버튼 동작, 5장 균일.
stash 복구
이전 Maker 세션에서 stash해 둔 로컬 맵 변경(map02/05/06/07/10/11)을 이 브랜치에 복구해 포함. 단 복구분이 몬스터/타일셋 작업을 유지하는지(되돌리지 않는지) 무결성 검증 후 커밋. 손상/무의미하면 사용자에게 알리고 제외.
범위 밖 (YAGNI)
적 턴, 카드 효과의 실제 전투 적용, 신규 카드 종류.