From 848a5c53ef282e1f68c97b77a4f53c145cd213ab Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 29 Oct 2026 22:58:23 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=ED=83=AD=20=3D=20?= =?UTF-8?q?=EC=8A=A4=ED=85=8C=EC=9D=B4=EC=A7=80=20=EC=84=A0=ED=83=9D=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20+=20=EC=8A=A4=ED=85=8C=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20=EB=8B=A8=EC=9C=84=20=EC=A7=84=ED=96=89=20=E2=80=94=20PD=20?= =?UTF-8?q?=EC=A7=80=EC=8B=9C(=EC=B0=B8=EA=B3=A0=20=ED=99=94=EB=A9=B4:=20?= =?UTF-8?q?=EC=8A=A4=ED=85=8C=EC=9D=B4=EC=A7=80=20=EA=B3=A0=EB=A5=B4?= =?UTF-8?q?=EA=B8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 전투 탭을 누르면 스테이지 선택부터: 「번호. 이름」 · 상대 성 체력·공격 · 성 + 상대방 얼굴 + 성 공격 그림 · 좌우 화살표 · 시작 = 바로 전투 · 지도 = 스테이지 정보 · 오른쪽 아래 = 승리 보상 - 스테이지 = battle.json stageLoadouts 한 줄(이름 추가 · 7개) · 다음에 깰 스테이지까지 열림 · 클리어 표시 · 시험 전투 승리는 기록 안 함 - 결과 덮개 = 스테이지 선택 / 다음 스테이지·다시 도전 · 전투 화면 라벨 = 스테이지 N - 화면 비율(클래시 로얄) 수치 = battle.json view - 헤드리스 163/163 · 렌더 ALL PASS(48장 · 스테이지 화면 검사 포함) Co-Authored-By: Claude Opus 5.5 --- Assets/Editor/EditorRender.Systems.cs | 25 ++- Assets/Editor/HeadlessRun.Battle.cs | 15 ++ Assets/Resources/Data/battle.json | 15 +- Assets/Scripts/Sim/Battle.cs | 27 ++- Assets/Scripts/View/GameApp.Battle.cs | 71 ++++---- Assets/Scripts/View/GameApp.Stage.cs | 194 ++++++++++++++++++++++ Assets/Scripts/View/GameApp.Stage.cs.meta | 2 + 7 files changed, 304 insertions(+), 45 deletions(-) create mode 100644 Assets/Scripts/View/GameApp.Stage.cs create mode 100644 Assets/Scripts/View/GameApp.Stage.cs.meta diff --git a/Assets/Editor/EditorRender.Systems.cs b/Assets/Editor/EditorRender.Systems.cs index e3b453a..0829155 100644 --- a/Assets/Editor/EditorRender.Systems.cs +++ b/Assets/Editor/EditorRender.Systems.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using UnityEngine; +using UnityEngine.UI; using VS.Sim; using VS.View; @@ -38,8 +39,14 @@ namespace VS.EditorTools { var g = app.G; app.BattleTest = null; - app.SwitchTab(1); app.NewBattleRound(5); app.RefreshAll(); Shot(app, "battle_ready"); - app.B.Start(); app.B.Mana = 10; + // 스테이지 선택 — 전투 탭 = 고르는 화면부터(첫 화면 = 다음에 깰 스테이지 1) · 잠긴 스테이지 · 지도 = 정보 창 · 시작 = 바로 전투 + app.SwitchTab(1); app.RefreshAll(); + StageCheck(app, "stage_select", 1, true); Shot(app, "stage_select"); + app.ShowStage(3); StageCheck(app, "stage_locked", 3, false); Shot(app, "stage_locked"); + app.OpenStageInfo(); Shot(app, "stage_info"); app.ClosePopup(); + app.StartStage(1, 5); + if (app.StageRoot.gameObject.activeSelf || !app.BattleRoot.gameObject.activeSelf || app.B.State != BattleState.Fighting || app.B.Stage != 1) { fails++; notes.Add("stage_start: 시작을 눌렀는데 전투 화면이 아님"); } + app.B.Mana = 10; app.DeployCard(0); app.DebugTick(0.05f, 40); app.DeployCard(0); app.DebugTick(0.05f, 40); app.DeployCard(0); g.S.battleSlots = 6; app.B.MaxMana = 15; app.B.Mana = 15; app.DeployCard(1); app.DeployCard(4); app.DeployCard(5); @@ -50,6 +57,9 @@ namespace VS.EditorTools app.OpenBattleUpgrade(); Shot(app, "battle_upgrade"); app.ClosePopup(); app.OpenBattleTest(); Shot(app, "battle_test"); app.ClosePopup(); app.B.CastleHpDebugKill(); app.DebugTick(0.05f, 2); Shot(app, "battle_won"); + // 이긴 뒤 스테이지 선택 = 1 클리어 표시 · 2 열림(첫 화면) + app.OpenStageSelect(1); StageCheck(app, "stage_cleared", 1, true); Shot(app, "stage_cleared"); + app.OpenStageSelect(app.G.StageFocus); StageCheck(app, "stage_next", 2, true); Shot(app, "stage_next"); // 맵 4종 (바위·언덕 켬 · 성 공격 끔 — 길 찾기 장면) string[] mapKey = { "plain", "b1", "b2", "b3" }; for (int k = 0; k < 4; k++) @@ -125,6 +135,17 @@ namespace VS.EditorTools else Debug.Log($"[VS] LAYOUT {name} 맵 {playW:0}/{w:0} px({playW / Mathf.Max(1f, w) * 100f:0}%) · 칸 {v.tileX:0}×{v.tileY:0} · 카드 칸 {tray.sizeDelta.y:0} · 맵 {bottom:0}~{top:0}/{h:0} · 가장 작은 유닛 그림 {minUnit:0} px"); } + /// 스테이지 선택 화면 — 보임(전투 화면은 숨김) · 제목 「번호. 이름」 · 시작 버튼 열림/잠김 · 화살표(처음 = 왼쪽 없음 · 끝 = 오른쪽 없음) · 클리어 표시 + static void StageCheck(GameApp app, string name, int stage, bool open) + { + var root = app.StageRoot; int n = app.G.StageCount; + var title = root.Find("Title")?.GetComponent(); var start = root.Find("Start")?.GetComponent