ThreeKingdomsSlingshot/Assets/Tests/PlayMode/UIThemeTests.cs

49 lines
2.4 KiB
C#
Raw Permalink Normal View History

UI 리뉴얼 A-2~A-4 화면 적용(PD #1100) — 팩 부품 + UI 테마(id 치환) · 화면 10종 · 인박스 ui kind - 테마: SOT Assets/Data/UI/ui_theme.csv(색 57 · 스킨 32 · 아이콘 63 · 제목 폰트) → 메뉴 TKS/Import UI Theme → Resources/UI/UITheme.asset (Runtime/UI/UITheme · UISkin · Editor/UIThemeImporter · ProjectSetup 에서도 임포트) · 화면 코드는 id 로만 묻는다(스프라이트 경로 0) - 신규 제작(B) 치환: Assets/UI/Samguk/**/<id>.png → 임포트 시 같은 id 스킨·아이콘 자동 치환(팩 보존 · 새 id = 아이콘 추가) · Tools/apply_delivery.py ui kind(md5 → Samguk/<group> · gim_* → Resources/Gimmicks/Art · ui_delivered.csv) - 공통: UiKit(카드 = BorderFrame_Round20 틴트 · 버튼 = Button01_s + 광택 · 원 · 진행 바 = Slider_Basic01 · 초상 틀 · 등급 칸 ItemFrame02 · 별 줄 · 병종 배지) · 재화 바(ResourceBar + cur_* 아이콘) · 하단 탭(선택 판 + PictoIcon) · 제목 띠 · 팝업(Popup Topber + 닫기 X) · 토스트 - 화면: 로비(키아트 04 배경 위쪽 ×1.22 · 출정·편성·연무장 아이콘) · 영웅(등급 칸 + 장비 아이콘 · 체크/알림 점 · 별 아이콘) · 편성 · 거래(배너 · 상자 아이콘) · 보물(상자 아이콘 · 포인트 배지) · 내정(보상 줄 · 도면·골드 아이콘) · 연무장 · 결과(리본 · 별) · 월드맵 스테이지 팝업만 팩(거점 kit 유지) - 전투: HUD 칩 · 턴 띠 · 원형 스킬 버튼 + 쿨 라디얼 · 유닛 체력 바 · 기믹 내구 핍 = 팩 슬라이더(월드 9-slice 사본 · 가운데 2 px) · 조준선 색 유지 - 3:4(1536×2048): 본문 비율 축소(UiFitHeight · 1080×1920 = 그대로) - 검증: 플레이모드 116/116(기존 115 + UIThemeTests 1) · 컴파일 0 · error 0 · 캡처 = DataImporter.CaptureUI(UICaptureDriver · 15장) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 14:20:57 +00:00
using NUnit.Framework;
using UnityEngine;
using UnityEngine.UI;
namespace TKS.Tests
{
/// <summary>UI 테마(PD #1100) — 팩 부품이 실려 있고 신규 제작(B) 스프라이트가 같은 id 를 코드 변경 없이 치환한다.</summary>
public class UIThemeTests
{
[TearDown]
public void TearDown()
{
UITheme.Use(null); // 다음 테스트는 Resources 테마로
}
[Test]
public void Theme_PackParts_AndSamgukReplacesById()
{
var theme = Resources.Load<UITheme>(UITheme.ResourcePath);
Assert.IsNotNull(theme, "Resources/UI/UITheme 없음 — 메뉴 TKS/Import UI Theme");
foreach (var skin in new[] { "card", "button", "popup", "bar_bg", "bar_fill", "tab_focus", "skill_btn", "hp_bg" })
Assert.IsNotNull(theme.Skin(skin), "스킨 " + skin);
foreach (var icon in new[] { "cur_gold", "cur_gem", "cur_stamina", "tab_hero", "chest_gold", "gear_sword", "star_on" })
Assert.IsNotNull(theme.Icon(icon), "아이콘 " + icon);
Assert.IsNotNull(theme.titleFont, "제목 폰트");
// 신규 제작 납품 = 같은 id 의 samguk 칸 → 아이콘·스킨 모두 그 스프라이트로(팩은 보존)
var copy = Object.Instantiate(theme);
var tex = new Texture2D(8, 8);
var sp = Sprite.Create(tex, new Rect(0, 0, 8, 8), new Vector2(0.5f, 0.5f), 100f);
var pack = copy.IconEntryOf("cur_gold").pack; // 납품 반영 뒤에도 팩 원본 칸은 그대로(Icon() = 치환본)
UI 리뉴얼 A-2~A-4 화면 적용(PD #1100) — 팩 부품 + UI 테마(id 치환) · 화면 10종 · 인박스 ui kind - 테마: SOT Assets/Data/UI/ui_theme.csv(색 57 · 스킨 32 · 아이콘 63 · 제목 폰트) → 메뉴 TKS/Import UI Theme → Resources/UI/UITheme.asset (Runtime/UI/UITheme · UISkin · Editor/UIThemeImporter · ProjectSetup 에서도 임포트) · 화면 코드는 id 로만 묻는다(스프라이트 경로 0) - 신규 제작(B) 치환: Assets/UI/Samguk/**/<id>.png → 임포트 시 같은 id 스킨·아이콘 자동 치환(팩 보존 · 새 id = 아이콘 추가) · Tools/apply_delivery.py ui kind(md5 → Samguk/<group> · gim_* → Resources/Gimmicks/Art · ui_delivered.csv) - 공통: UiKit(카드 = BorderFrame_Round20 틴트 · 버튼 = Button01_s + 광택 · 원 · 진행 바 = Slider_Basic01 · 초상 틀 · 등급 칸 ItemFrame02 · 별 줄 · 병종 배지) · 재화 바(ResourceBar + cur_* 아이콘) · 하단 탭(선택 판 + PictoIcon) · 제목 띠 · 팝업(Popup Topber + 닫기 X) · 토스트 - 화면: 로비(키아트 04 배경 위쪽 ×1.22 · 출정·편성·연무장 아이콘) · 영웅(등급 칸 + 장비 아이콘 · 체크/알림 점 · 별 아이콘) · 편성 · 거래(배너 · 상자 아이콘) · 보물(상자 아이콘 · 포인트 배지) · 내정(보상 줄 · 도면·골드 아이콘) · 연무장 · 결과(리본 · 별) · 월드맵 스테이지 팝업만 팩(거점 kit 유지) - 전투: HUD 칩 · 턴 띠 · 원형 스킬 버튼 + 쿨 라디얼 · 유닛 체력 바 · 기믹 내구 핍 = 팩 슬라이더(월드 9-slice 사본 · 가운데 2 px) · 조준선 색 유지 - 3:4(1536×2048): 본문 비율 축소(UiFitHeight · 1080×1920 = 그대로) - 검증: 플레이모드 116/116(기존 115 + UIThemeTests 1) · 컴파일 0 · error 0 · 캡처 = DataImporter.CaptureUI(UICaptureDriver · 15장) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 14:20:57 +00:00
copy.IconEntryOf("cur_gold").samguk = sp;
copy.Skin("card").samguk = sp;
UITheme.Use(copy);
Assert.AreSame(sp, UISkin.Icon("cur_gold"), "아이콘 치환");
Assert.AreSame(pack, copy.IconEntryOf("cur_gold").pack, "팩 원본 보존");
var go = new GameObject("ThemeProbe", typeof(RectTransform));
var img = go.AddComponent<Image>();
Assert.IsTrue(UISkin.Apply(img, "card"));
Assert.AreSame(sp, img.sprite, "스킨 치환");
var ic = UISkin.IconImage(go.transform, "cur_gold", Vector2.zero, Vector2.zero, Vector2.zero, Vector2.one * 10f);
Assert.AreSame(sp, ic.sprite);
Object.DestroyImmediate(go);
Object.DestroyImmediate(copy);
Object.DestroyImmediate(tex);
}
}
}