편성 = Fable 검수(2차) 결함 1~8 반영(#1104)

- 1 패널 프레임 = 외곽선 없는 BasicFrame_Round20 #3F4262(이전 BorderFrame_Round20 은 스프라이트 자체 검정 외곽선이라 틴트해도 검정 선으로 보였음) → 밝은 림 6 px
- 2 문양 3 % · 열 밴드 8 % · 3 저장 비활성 = 회색 스프라이트(녹 × 회색 = 녹 유지 문제) · h56 · 제약 칩과 세로 정렬 · 바뀌면 녹 + 알림 점 20
- 4 패널 A 236~996 · B 1028~1752(홈 ≥ 16 · 탭 바와 18) · 바닥 그라데이션 h100 · 5 보유 격자 빈 칸 = 고스트 카드(최소 8칸)
- 6 출전 덮개 20 % · 초상만 · 체크 뱃지 48/28 별 위로 · 7 라벨 140×60 · 30 px · 라벨 칸 세로 띠 · 8 프리셋 행 +8 · 출전 꼬리 64×30 탭 안쪽 · 전투력 칩 정렬

테스트 117/117 · console error 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-11-09 17:16:44 +09:00
parent 4c2692b555
commit 9a05b9a0ca
4 changed files with 60 additions and 37 deletions

View File

@ -386,15 +386,15 @@ color,panel_frame,,,,,,#3F4262,섹션 패널 프레임(바탕보다 밝게 · Fa
color,panel_field,,,,,,#262840,섹션 패널 안쪽 필드(바탕보다 어둡게) color,panel_field,,,,,,#262840,섹션 패널 안쪽 필드(바탕보다 어둡게)
color,panel_light,,,,,,#FFFFFF1A,섹션 패널 윗면 광택(흰 10 %) color,panel_light,,,,,,#FFFFFF1A,섹션 패널 윗면 광택(흰 10 %)
color,panel_shadow,,,,,,#14121A59,섹션 패널 그림자(α 0.35 · 아래 6) color,panel_shadow,,,,,,#14121A59,섹션 패널 그림자(α 0.35 · 아래 6)
color,panel_pattern,,,,,,#FFFFFF0D,섹션 패널 문양 타일(흰 5 %) color,panel_pattern,,,,,,#FFFFFF08,섹션 패널 문양 타일(흰 3 % · 검수 결함 2)
color,panel_ground,,,,,,#0000002E,섹션 패널 바닥 그라데이션(검정 18 %) color,panel_ground,,,,,,#0000002E,섹션 패널 바닥 그라데이션(검정 18 %)
color,band_title,,,,,,#121A33,섹션 제목 띠(Title_Tapered02 틴트) color,band_title,,,,,,#121A33,섹션 제목 띠(Title_Tapered02 틴트)
color,row_band,,,,,,#FFFFFF0F,편성 전열·후열 밴드(흰 6 %) color,row_band,,,,,,#FFFFFF14,편성 전열·후열 밴드(흰 8 % · 검수 결함 2·7)
color,divider,,,,,,#FFFFFF40,구분선(흰 25 %) color,divider,,,,,,#FFFFFF40,구분선(흰 25 %)
color,seat_plate,,,,,,#1A1C2EE6,편성 자리 받침(α 0.9) color,seat_plate,,,,,,#1A1C2EE6,편성 자리 받침(α 0.9)
color,seat_light,,,,,,#FFFFFF14,편성 자리 받침 윗면 광택(흰 8 %) color,seat_light,,,,,,#FFFFFF14,편성 자리 받침 윗면 광택(흰 8 %)
color,seat_dim,,,,,,#00000059,출전 중 카드 덮개(35 %) color,seat_dim,,,,,,#00000033,출전 중 카드 덮개(20 % · 초상만 · 검수 결함 6)
skin,panel_frame,Frame/BorderFrame_Round20_White_Bg.png,,1,,,,섹션 패널 프레임(틴트) skin,panel_frame,Frame/BasicFrame_Round20.png,,1,,,,섹션 패널 프레임(틴트 · 외곽선 없는 판 = 밝은 림 · Fable 검수 결함 1)
skin,panel_field,Frame/BasicFrame_Round20.png,,1,,,,섹션 패널 필드(틴트) skin,panel_field,Frame/BasicFrame_Round20.png,,1,,,,섹션 패널 필드(틴트)
skin,panel_light,Frame/BorderFrame_Round20_White_Light.png,,1,,,,섹션 패널 윗면 광택 skin,panel_light,Frame/BorderFrame_Round20_White_Light.png,,1,,,,섹션 패널 윗면 광택
skin,band_title,Label/Title_Tapered02.png,,1,,,,섹션 제목 띠(틴트) skin,band_title,Label/Title_Tapered02.png,,1,,,,섹션 제목 띠(틴트)
@ -405,7 +405,7 @@ skin,focus_line,Frame/ItemFrame00~03_FocusLine.png,,1,,,,선택 테두리(틴트
skin,badge_circle,UI_Etc/Alert_Circle_s_Bg.png,,1,,,,작은 원 뱃지(수량·플러스 바탕) skin,badge_circle,UI_Etc/Alert_Circle_s_Bg.png,,1,,,,작은 원 뱃지(수량·플러스 바탕)
skin,check_circle,Frame/BorderFrame_Circle75_Bg.png,,1,,,,체크 뱃지 원 skin,check_circle,Frame/BorderFrame_Circle75_Bg.png,,1,,,,체크 뱃지 원
skin,scroll_fade,Assets/UI/GUIPro/ResourcesData/Sprites/Demo/Demo_Background/Glow_Panel01.png,,1,,,,스크롤 페이드·바닥 그라데이션(위 불투명 → 아래 투명 · 실측) skin,scroll_fade,Assets/UI/GUIPro/ResourcesData/Sprites/Demo/Demo_Background/Glow_Panel01.png,,1,,,,스크롤 페이드·바닥 그라데이션(위 불투명 → 아래 투명 · 실측)
skin,btn_s_green,Button/Button01_s_Green.png,Button/Button01_s_White_Light1.png,1.8,4;3;4;10,0.35,,Secondary 녹(편성 저장) + 광택 skin,btn_s_green,Button/Button01_s_Green.png,Button/Button01_s_White_Light1.png,2.1,3;2;3;8,0.35,,Secondary 녹 h56(편성 저장) + 광택
icon,plus_glyph,UI_Etc/ResourceBar_Single_Btn_Yellow2.png,,,,,,플러스 글리프(빈 자리 뱃지) icon,plus_glyph,UI_Etc/ResourceBar_Single_Btn_Yellow2.png,,,,,,플러스 글리프(빈 자리 뱃지)
icon,check_badge,IconMisc/Icon_Check01.png,,,,,,체크(출전 중 뱃지) icon,check_badge,IconMisc/Icon_Check01.png,,,,,,체크(출전 중 뱃지)
skin,btn_round03,Button/Button_Round03_Dark.png,,1,,,,로비 측면 버튼(Fable §4-1) skin,btn_round03,Button/Button_Round03_Dark.png,,1,,,,로비 측면 버튼(Fable §4-1)
@ -425,4 +425,6 @@ icon,lobby_event,Icon_PictoIcons/128/PictoIcon_Calendar.Png,,,,,,로비 이벤
color,lobby_vignette,,,,,,#1E253599,로비 위 비네트(α 0.6) color,lobby_vignette,,,,,,#1E253599,로비 위 비네트(α 0.6)
color,lobby_band,,,,,,#1E24408C,로비 아래 버튼 뒤 띠(α 0.55) color,lobby_band,,,,,,#1E24408C,로비 아래 버튼 뒤 띠(α 0.55)
color,alert_red,,,,,,#FF243E,알림 원(수량) color,alert_red,,,,,,#FF243E,알림 원(수량)
skin,btn_s_gray,Button/Button01_s_Gray.png,,2.1,,,,Secondary 회색 h56(비활성 · 검수 결함 3)
color,row_label_strip,,,,,,#FFFFFF0A,편성 라벨 칸 세로 띠(흰 4 %)
font,title,Assets/UI/GUIPro/ResourcesData/Fonts/Sen-ExtraBold.ttf,,,,,,제목·숫자(라틴 Sen · 한글 = 폴백 Malgun Gothic · PD 결정 전) font,title,Assets/UI/GUIPro/ResourcesData/Fonts/Sen-ExtraBold.ttf,,,,,,제목·숫자(라틴 Sen · 한글 = 폴백 Malgun Gothic · PD 결정 전)

1 kind id path overlay ppu inset alpha color note
386 color panel_field #262840 섹션 패널 안쪽 필드(바탕보다 어둡게)
387 color panel_light #FFFFFF1A 섹션 패널 윗면 광택(흰 10 %)
388 color panel_shadow #14121A59 섹션 패널 그림자(α 0.35 · 아래 6)
389 color panel_pattern #FFFFFF0D #FFFFFF08 섹션 패널 문양 타일(흰 5 %) 섹션 패널 문양 타일(흰 3 % · 검수 결함 2)
390 color panel_ground #0000002E 섹션 패널 바닥 그라데이션(검정 18 %)
391 color band_title #121A33 섹션 제목 띠(Title_Tapered02 틴트)
392 color row_band #FFFFFF0F #FFFFFF14 편성 전열·후열 밴드(흰 6 %) 편성 전열·후열 밴드(흰 8 % · 검수 결함 2·7)
393 color divider #FFFFFF40 구분선(흰 25 %)
394 color seat_plate #1A1C2EE6 편성 자리 받침(α 0.9)
395 color seat_light #FFFFFF14 편성 자리 받침 윗면 광택(흰 8 %)
396 color seat_dim #00000059 #00000033 출전 중 카드 덮개(35 %) 출전 중 카드 덮개(20 % · 초상만 · 검수 결함 6)
397 skin panel_frame Frame/BorderFrame_Round20_White_Bg.png Frame/BasicFrame_Round20.png 1 섹션 패널 프레임(틴트) 섹션 패널 프레임(틴트 · 외곽선 없는 판 = 밝은 림 · Fable 검수 결함 1)
398 skin panel_field Frame/BasicFrame_Round20.png 1 섹션 패널 필드(틴트)
399 skin panel_light Frame/BorderFrame_Round20_White_Light.png 1 섹션 패널 윗면 광택
400 skin band_title Label/Title_Tapered02.png 1 섹션 제목 띠(틴트)
405 skin badge_circle UI_Etc/Alert_Circle_s_Bg.png 1 작은 원 뱃지(수량·플러스 바탕)
406 skin check_circle Frame/BorderFrame_Circle75_Bg.png 1 체크 뱃지 원
407 skin scroll_fade Assets/UI/GUIPro/ResourcesData/Sprites/Demo/Demo_Background/Glow_Panel01.png 1 스크롤 페이드·바닥 그라데이션(위 불투명 → 아래 투명 · 실측)
408 skin btn_s_green Button/Button01_s_Green.png Button/Button01_s_White_Light1.png 1.8 2.1 4;3;4;10 3;2;3;8 0.35 Secondary 녹(편성 저장) + 광택 Secondary 녹 h56(편성 저장) + 광택
409 icon plus_glyph UI_Etc/ResourceBar_Single_Btn_Yellow2.png 플러스 글리프(빈 자리 뱃지)
410 icon check_badge IconMisc/Icon_Check01.png 체크(출전 중 뱃지)
411 skin btn_round03 Button/Button_Round03_Dark.png 1 로비 측면 버튼(Fable §4-1)
425 color lobby_vignette #1E253599 로비 위 비네트(α 0.6)
426 color lobby_band #1E24408C 로비 아래 버튼 뒤 띠(α 0.55)
427 color alert_red #FF243E 알림 원(수량)
428 skin btn_s_gray Button/Button01_s_Gray.png 2.1 Secondary 회색 h56(비활성 · 검수 결함 3)
429 color row_label_strip #FFFFFF0A 편성 라벨 칸 세로 띠(흰 4 %)
430 font title Assets/UI/GUIPro/ResourcesData/Fonts/Sen-ExtraBold.ttf 제목·숫자(라틴 Sen · 한글 = 폴백 Malgun Gothic · PD 결정 전)

View File

@ -476,13 +476,13 @@ MonoBehaviour:
- id: panel_shadow - id: panel_shadow
color: {r: 0.078431375, g: 0.07058824, b: 0.101960786, a: 0.34901962} color: {r: 0.078431375, g: 0.07058824, b: 0.101960786, a: 0.34901962}
- id: panel_pattern - id: panel_pattern
color: {r: 1, g: 1, b: 1, a: 0.050980393} color: {r: 1, g: 1, b: 1, a: 0.03137255}
- id: panel_ground - id: panel_ground
color: {r: 0, g: 0, b: 0, a: 0.18039216} color: {r: 0, g: 0, b: 0, a: 0.18039216}
- id: band_title - id: band_title
color: {r: 0.07058824, g: 0.101960786, b: 0.2, a: 1} color: {r: 0.07058824, g: 0.101960786, b: 0.2, a: 1}
- id: row_band - id: row_band
color: {r: 1, g: 1, b: 1, a: 0.05882353} color: {r: 1, g: 1, b: 1, a: 0.078431375}
- id: divider - id: divider
color: {r: 1, g: 1, b: 1, a: 0.2509804} color: {r: 1, g: 1, b: 1, a: 0.2509804}
- id: seat_plate - id: seat_plate
@ -490,13 +490,15 @@ MonoBehaviour:
- id: seat_light - id: seat_light
color: {r: 1, g: 1, b: 1, a: 0.078431375} color: {r: 1, g: 1, b: 1, a: 0.078431375}
- id: seat_dim - id: seat_dim
color: {r: 0, g: 0, b: 0, a: 0.34901962} color: {r: 0, g: 0, b: 0, a: 0.2}
- id: lobby_vignette - id: lobby_vignette
color: {r: 0.11764706, g: 0.14509805, b: 0.20784314, a: 0.6} color: {r: 0.11764706, g: 0.14509805, b: 0.20784314, a: 0.6}
- id: lobby_band - id: lobby_band
color: {r: 0.11764706, g: 0.14117648, b: 0.2509804, a: 0.54901963} color: {r: 0.11764706, g: 0.14117648, b: 0.2509804, a: 0.54901963}
- id: alert_red - id: alert_red
color: {r: 1, g: 0.14117648, b: 0.24313726, a: 1} color: {r: 1, g: 0.14117648, b: 0.24313726, a: 1}
- id: row_label_strip
color: {r: 1, g: 1, b: 1, a: 0.039215688}
skins: skins:
- id: card - id: card
pack: {fileID: 21300000, guid: 3070a6f23e6ca4273897acf1b7e8c5ce, type: 3} pack: {fileID: 21300000, guid: 3070a6f23e6ca4273897acf1b7e8c5ce, type: 3}
@ -1066,7 +1068,7 @@ MonoBehaviour:
inset: {x: 6, y: 4, z: 6, w: 34} inset: {x: 6, y: 4, z: 6, w: 34}
overlayAlpha: 0.2 overlayAlpha: 0.2
- id: panel_frame - id: panel_frame
pack: {fileID: 21300000, guid: 3070a6f23e6ca4273897acf1b7e8c5ce, type: 3} pack: {fileID: 21300000, guid: 6c9211bc1d90b4e35a3a080121e93d05, type: 3}
samguk: {fileID: 0} samguk: {fileID: 0}
overlay: {fileID: 0} overlay: {fileID: 0}
ppu: 1 ppu: 1
@ -1146,8 +1148,8 @@ MonoBehaviour:
pack: {fileID: 21300000, guid: 2d734a17e89824d30b1f014a9c1f5f60, type: 3} pack: {fileID: 21300000, guid: 2d734a17e89824d30b1f014a9c1f5f60, type: 3}
samguk: {fileID: 0} samguk: {fileID: 0}
overlay: {fileID: 21300000, guid: 1047c0bcbda25440faf8332b872b3529, type: 3} overlay: {fileID: 21300000, guid: 1047c0bcbda25440faf8332b872b3529, type: 3}
ppu: 1.8 ppu: 2.1
inset: {x: 4, y: 3, z: 4, w: 10} inset: {x: 3, y: 2, z: 3, w: 8}
overlayAlpha: 0.35 overlayAlpha: 0.35
- id: btn_round03 - id: btn_round03
pack: {fileID: 21300000, guid: 13bb59864f8ee4bd0948e2f4bebb30dd, type: 3} pack: {fileID: 21300000, guid: 13bb59864f8ee4bd0948e2f4bebb30dd, type: 3}
@ -1184,6 +1186,13 @@ MonoBehaviour:
ppu: 2 ppu: 2
inset: {x: 0, y: 0, z: 0, w: 0} inset: {x: 0, y: 0, z: 0, w: 0}
overlayAlpha: 1 overlayAlpha: 1
- id: btn_s_gray
pack: {fileID: 21300000, guid: 5dc9d06d37e614ecdbcaa9ec360e5100, type: 3}
samguk: {fileID: 0}
overlay: {fileID: 0}
ppu: 2.1
inset: {x: 0, y: 0, z: 0, w: 0}
overlayAlpha: 1
icons: icons:
- id: cur_gold - id: cur_gold
pack: {fileID: 21300000, guid: 6d5687fb0dd3a428d9cd26a6f36c6d78, type: 3} pack: {fileID: 21300000, guid: 6d5687fb0dd3a428d9cd26a6f36c6d78, type: 3}

View File

@ -43,12 +43,13 @@ namespace TKS.OutGame
// 섹션 A 「출전 편성」 패널(절대 236~1010) · 홈 16 · 섹션 B 「보유 영웅」 패널(1026~1760) · 자리 = 목록 카드 × SeatScale · 보유 = × ListScale // 섹션 A 「출전 편성」 패널(절대 236~1010) · 홈 16 · 섹션 B 「보유 영웅」 패널(1026~1760) · 자리 = 목록 카드 × SeatScale · 보유 = × ListScale
const float SeatScale = 0.62f; const float SeatScale = 0.62f;
const float ListScale = 0.72f; const float ListScale = 0.72f;
const int GhostMin = 8; // 보유 격자 최소 칸(2줄 · 빈 칸 = 고스트 카드)
const float SeatPitch = 222f; // 자리 중심 간격(198 + 24) const float SeatPitch = 222f; // 자리 중심 간격(198 + 24)
const float SeatCenterX = 608f; // 자리 줄 가운데(절대 x · 왼쪽 라벨 칸만큼 오른쪽) const float SeatCenterX = 608f; // 자리 줄 가운데(절대 x · 왼쪽 라벨 칸만큼 오른쪽)
const float PanelX = 24f, PanelW = 1032f; const float PanelX = 24f, PanelW = 1032f;
const float PanelA_Y = 12f, PanelA_H = 774f; // 절대 236~1010 const float PanelA_Y = 12f, PanelA_H = 760f; // 절대 236~996(Fable 검수 결함 4)
const float PanelB_Y = 802f, PanelB_H = 734f; // 절대 1026~1760 const float PanelB_Y = 804f, PanelB_H = 724f; // 절대 1028~1752
const float FrontY = 180f, BackY = 483f; // 자리 위 끝(패널 A 기준 · 절대 416 / 719) const float FrontY = 182f, BackY = 471f; // 자리 위 끝(패널 A 기준 · 밴드 412~691 / 701~980 가운데)
Text countText; Text countText;
Text filterText; Text filterText;
Text ownedCount; Text ownedCount;
@ -83,41 +84,44 @@ namespace TKS.OutGame
UiKit.SectionPanel(body, "PanelA", PanelX, PanelA_Y, PanelW, PanelA_H, true, true, out a); UiKit.SectionPanel(body, "PanelA", PanelX, PanelA_Y, PanelW, PanelA_H, true, true, out a);
UiKit.SectionTitle(a, "출전 편성"); UiKit.SectionTitle(a, "출전 편성");
// 제약 칩(ⓘ = 편성 안내 팝업 · 안내 문장 이관) // 제약 칩(ⓘ = 편성 안내 팝업 · 안내 문장 이관)
var lim = At(a, "Limit", 592f, 8f, 230f, 56f); var lim = At(a, "Limit", 592f, 12f, 230f, 56f);
UiKit.Skin(lim, "chip", UiKit.Col("chip_dark", UiKit.Dark), true); UiKit.Skin(lim, "chip", UiKit.Col("chip_dark", UiKit.Dark), true);
UiKit.Layer(lim, "Line", "chip_line", UiKit.Col("chip_line", Color.clear), 4f, 4f, 4f, 4f); UiKit.Layer(lim, "Line", "chip_line", UiKit.Col("chip_line", Color.clear), 4f, 4f, 4f, 4f);
UiKit.Label(lim, "편성 제약 없음", 26, UiKit.Col("text_soft", UiKit.InkSoft), TextAnchor.MiddleLeft, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(18f, 0f), new Vector2(170f, 50f)).horizontalOverflow = HorizontalWrapMode.Overflow; UiKit.Label(lim, "편성 제약 없음", 26, UiKit.Col("text_soft", UiKit.InkSoft), TextAnchor.MiddleLeft, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(18f, 0f), new Vector2(170f, 50f)).horizontalOverflow = HorizontalWrapMode.Overflow;
UiKit.Icon(lim, "info", new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-16f, 0f), 32f); UiKit.Icon(lim, "info", new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-16f, 0f), 32f);
lim.gameObject.AddComponent<Button>().onClick.AddListener(ShowGuide); lim.gameObject.AddComponent<Button>().onClick.AddListener(ShowGuide);
// 저장(녹 · 바뀐 것 없으면 비활성 색 · 바뀌면 알림 점) // 저장(녹 · 바뀐 것 없으면 비활성 색 · 바뀌면 알림 점)
var sv = At(a, "Save", 832f, 4f, 180f, 68f); var sv = At(a, "Save", 832f, 14f, 180f, 56f);
saveImg = UiKit.Skin(sv, UISkin.Has("btn_s_green") ? "btn_s_green" : "button", UiKit.White, true); saveImg = UiKit.Skin(sv, UISkin.Has("btn_s_green") ? "btn_s_green" : "button", UiKit.White, true);
sv.gameObject.AddComponent<Button>().onClick.AddListener(SaveNow); sv.gameObject.AddComponent<Button>().onClick.AddListener(SaveNow);
saveText = UiKit.Title(UiKit.Label(sv, "저장", 34, UiKit.Col("text_on_green", UiKit.Dark), TextAnchor.MiddleCenter, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 5f), new Vector2(170f, 56f))); saveText = UiKit.Title(UiKit.Label(sv, "저장", 34, UiKit.Col("text_on_green", UiKit.Dark), TextAnchor.MiddleCenter, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 3f), new Vector2(170f, 50f)));
saveDot = UiKit.Icon(sv, "new_dot", new Vector2(1f, 1f), new Vector2(0.5f, 0.5f), new Vector2(-8f, -8f), 26f); saveDot = UiKit.Icon(sv, "new_dot", new Vector2(1f, 1f), new Vector2(0.5f, 0.5f), new Vector2(-6f, -6f), 20f);
// 프리셋 탭 3 + 출전 꼬리 칩 // 프리셋 탭 3 + 출전 꼬리 칩
for (int i = 0; i < S.Save.presets.Count; i++) for (int i = 0; i < S.Save.presets.Count; i++)
{ {
int k = i; int k = i;
var b = SubTab("Preset" + i, a, "프리셋 " + (i + 1), new Vector2(20f + i * 212f, -84f), new Vector2(200f, 72f), () => LoadPreset(k)); var b = SubTab("Preset" + i, a, "프리셋 " + (i + 1), new Vector2(20f + i * 212f, -92f), new Vector2(200f, 72f), () => LoadPreset(k));
presetBtns.Add(b); presetBtns.Add(b);
var tail = UiKit.Skin(UiKit.Rect("Active", b.transform, new Vector2(1f, 1f), new Vector2(1f, 0.5f), new Vector2(6f, -2f), new Vector2(72f, 34f)), "tail", UiKit.Col("tail_red", UiKit.Red)); var tail = UiKit.Skin(UiKit.Rect("Active", b.transform, new Vector2(1f, 1f), new Vector2(1f, 1f), new Vector2(-8f, 4f), new Vector2(64f, 30f)), "tail", UiKit.Col("tail_red", UiKit.Red));
UiKit.Title(UiKit.FillLabel(tail.transform, "출전", 20, UiKit.White), true); UiKit.Title(UiKit.FillLabel(tail.transform, "출전", 18, UiKit.White), true);
presetTails.Add(tail.gameObject); presetTails.Add(tail.gameObject);
} }
// 총 전투력 칩(편성 변화가 숫자로 바로 보임) // 총 전투력 칩(편성 변화가 숫자로 바로 보임)
var pw = At(a, "Power", 736f, 88f, 276f, 64f); var pw = At(a, "Power", 736f, 96f, 276f, 64f);
UiKit.Skin(pw, "chip", UiKit.Col("chip_dark", UiKit.Dark)); UiKit.Skin(pw, "chip", UiKit.Col("chip_dark", UiKit.Dark));
UiKit.Icon(pw, "sword", new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(12f, 0f), 44f); UiKit.Icon(pw, "sword", new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(12f, 0f), 44f);
UiKit.Label(pw, "전투력", 24, UiKit.Col("text_soft", UiKit.InkSoft), TextAnchor.MiddleLeft, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(62f, 0f), new Vector2(90f, 40f)); UiKit.Label(pw, "전투력", 24, UiKit.Col("text_soft", UiKit.InkSoft), TextAnchor.MiddleLeft, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(62f, 0f), new Vector2(90f, 40f));
powerText = UiKit.Title(UiKit.Label(pw, "", 40, UiKit.White, TextAnchor.MiddleRight, new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-18f, 2f), new Vector2(150f, 56f)), true); powerText = UiKit.Title(UiKit.Label(pw, "", 40, UiKit.White, TextAnchor.MiddleRight, new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-18f, 2f), new Vector2(150f, 56f)), true);
powerText.horizontalOverflow = HorizontalWrapMode.Overflow; powerText.horizontalOverflow = HorizontalWrapMode.Overflow;
// 열 밴드 2 · 구분선 · 전열/후열 칩 // 열 밴드 2 · 구분선 · 전열/후열 칩
UiKit.Skin(At(a, "FrontBand", 20f, 172f, 992f, 283f), "row_band", UiKit.Col("row_band", Color.clear)); UiKit.Skin(At(a, "FrontBand", 20f, 176f, 992f, 279f), "row_band", UiKit.Col("row_band", Color.clear));
UiKit.Skin(At(a, "Divider", 76f, 461f, 880f, 8f), "divider", UiKit.Col("divider", Color.clear)); UiKit.Skin(At(a, "Divider", 76f, 457f, 880f, 8f), "divider", UiKit.Col("divider", Color.clear));
UiKit.Skin(At(a, "BackBand", 20f, 475f, 992f, 283f), "row_band", UiKit.Col("row_band", Color.clear)); UiKit.Skin(At(a, "BackBand", 20f, 465f, 992f, 279f), "row_band", UiKit.Col("row_band", Color.clear));
Pill(a, "전열", UiKit.Col("row_front", UiKit.Red), 20f, 286f); // 라벨 칸 세로 띠(라벨 쪽을 면으로 분리 · 검수 결함 7)
Pill(a, "후열", UiKit.Col("row_back", UiKit.Dark), 20f, 589f); UiKit.Skin(At(a, "FrontStrip", 20f, 176f, 156f, 279f), "row_band", UiKit.Col("row_label_strip", Color.clear));
UiKit.Skin(At(a, "BackStrip", 20f, 465f, 156f, 279f), "row_band", UiKit.Col("row_label_strip", Color.clear));
Pill(a, "전열", UiKit.Col("row_front", UiKit.Red), 16f, 176f + 139.5f - 30f);
Pill(a, "후열", UiKit.Col("row_back", UiKit.Dark), 16f, 465f + 139.5f - 30f);
// 자리 = 받침(빈 자리에도) + 카드 칸 // 자리 = 받침(빈 자리에도) + 카드 칸
float sw = CollectionCards.CellSize.x * SeatScale, sh = CollectionCards.CellSize.y * SeatScale; float sw = CollectionCards.CellSize.x * SeatScale, sh = CollectionCards.CellSize.y * SeatScale;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
@ -165,7 +169,7 @@ namespace TKS.OutGame
UiKit.Icon(pick, "arrow_down", new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-22f, 0f), 28f); UiKit.Icon(pick, "arrow_down", new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-22f, 0f), 28f);
// 격자 4열(절대 x 54~1026 · y 1108~1748) + 위·아래 페이드 // 격자 4열(절대 x 54~1026 · y 1108~1748) + 위·아래 페이드
var cell = CollectionCards.CellSize * ListScale; var cell = CollectionCards.CellSize * ListScale;
float gridTop = 1108f - 224f, gridBottom = OutGameRoot.BodyH - (1748f - 224f); float gridTop = 1110f - 224f, gridBottom = OutGameRoot.BodyH - (1746f - 224f);
list = UiKit.ScrollGrid("List", body, 54f, 54f, gridTop, gridBottom, cell, new Vector2(17f, 16f), 4, out scroll); list = UiKit.ScrollGrid("List", body, 54f, 54f, gridTop, gridBottom, cell, new Vector2(17f, 16f), 4, out scroll);
UiKit.ScrollFades(body, gridTop, gridBottom, 40f, 30f); UiKit.ScrollFades(body, gridTop, gridBottom, 40f, 30f);
} }
@ -190,9 +194,9 @@ namespace TKS.OutGame
{ {
// 전열·후열 라벨 = 평행사변형 칩 120×54(Fable §3-3) // 전열·후열 라벨 = 평행사변형 칩 120×54(Fable §3-3)
var p = UISkin.Has("para_orange") var p = UISkin.Has("para_orange")
? UiKit.Skin(At(panel, "Row_" + label, x, y, 120f, 54f), "para_orange", c) ? UiKit.Skin(At(panel, "Row_" + label, x, y, 140f, 60f), "para_orange", c)
: UiKit.Paint(At(panel, "Row_" + label, x, y, 120f, 54f), c); : UiKit.Paint(At(panel, "Row_" + label, x, y, 140f, 60f), c);
UiKit.Title(UiKit.FillLabel(p.transform, label, 28, UiKit.White), true); UiKit.Title(UiKit.FillLabel(p.transform, label, 30, UiKit.White), true);
} }
public override void OnShow() public override void OnShow()
@ -384,7 +388,9 @@ namespace TKS.OutGame
if (!string.IsNullOrEmpty(id) && S.Def(id) != null) power += S.StatsOf(id).power; if (!string.IsNullOrEmpty(id) && S.Def(id) != null) power += S.StatsOf(id).power;
powerText.text = power.ToString("N0"); powerText.text = power.ToString("N0");
// 저장 = 바뀐 것이 있을 때만 녹(+ 알림 점) // 저장 = 바뀐 것이 있을 때만 녹(+ 알림 점)
saveImg.color = dirty ? UiKit.White : UiKit.Col("disabled", UiKit.Dark); // 비활성 = 회색 스프라이트(녹에 회색을 곱하면 녹이 남음 · 검수 결함 3) · 광택 없음 · 글자 #5A5E70
UISkin.Apply(saveImg, dirty || !UISkin.Has("btn_s_gray") ? "btn_s_green" : "btn_s_gray");
saveImg.color = UiKit.White;
saveText.color = UiKit.Col(dirty ? "text_on_green" : "disabled_text", UiKit.Dark); saveText.color = UiKit.Col(dirty ? "text_on_green" : "disabled_text", UiKit.Dark);
if (saveDot != null) saveDot.gameObject.SetActive(dirty); if (saveDot != null) saveDot.gameObject.SetActive(dirty);
@ -429,11 +435,11 @@ namespace TKS.OutGame
var card = CollectionCards.CardIn(holder, S, h, on, null, ListScale); var card = CollectionCards.CardIn(holder, S, h, on, null, ListScale);
if (on) if (on)
{ {
var dim = UiKit.Layer(card.transform, "Dim", "card_bg", UiKit.Col("seat_dim", Color.clear), 2f, 2f, 2f, 2f); var dim = UiKit.Layer(card.transform, "Dim", "card_bg", UiKit.Col("seat_dim", Color.clear), 2f, 80f, 2f, 70f); // 초상만(이름·레벨·별 제외)
dim.transform.SetSiblingIndex(2); // 바탕·테두리 위 · 글자·뱃지 아래 dim.transform.SetSiblingIndex(2); // 바탕·테두리 위 · 글자·뱃지 아래
var ck = UiKit.Skin(UiKit.Rect("Check", card.transform, new Vector2(1f, 0f), new Vector2(0.5f, 0.5f), new Vector2(-48f, 118f), new Vector2(72f, 75f)), "check_circle", UiKit.Col("ok", UiKit.Red)); var ck = UiKit.Skin(UiKit.Rect("Check", card.transform, new Vector2(1f, 0f), new Vector2(0.5f, 0.5f), new Vector2(-47f, 86f), new Vector2(67f, 70f)), "check_circle", UiKit.Col("ok", UiKit.Red));
ck.preserveAspect = true; ck.preserveAspect = true;
UiKit.Icon(ck.transform, "check_badge", new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 2f), 42f); UiKit.Icon(ck.transform, "check_badge", new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 2f), 39f);
} }
var td = card.gameObject.AddComponent<TapDrag>(); var td = card.gameObject.AddComponent<TapDrag>();
td.OnTap = () => TapCard(id); td.OnTap = () => TapCard(id);
@ -441,6 +447,12 @@ namespace TKS.OutGame
td.OnDragMove = MoveGhost; td.OnDragMove = MoveGhost;
td.OnDragEnd = e => DropCard(id, e); td.OnDragEnd = e => DropCard(id, e);
} }
// 빈 칸 = 고스트 카드(영웅 목록과 같은 빈 카드)로 최소 2줄(8칸)을 채움(Fable 검수 결함 5)
for (int i = owned.Count; i < GhostMin; i++)
{
var holder = UiKit.Rect("Ghost" + i, list, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, cellSize);
CollectionCards.EmptyIn(holder, ListScale).raycastTarget = false;
}
} }
} }
} }

View File

@ -179,10 +179,10 @@ namespace TKS.OutGame
if (ground && UISkin.Has("scroll_fade")) if (ground && UISkin.Has("scroll_fade"))
{ {
// 스프라이트 = 위 불투명 → 아래 투명(실측) → 뒤집어 바닥이 어둡게 // 스프라이트 = 위 불투명 → 아래 투명(실측) → 뒤집어 바닥이 어둡게
var g = Skin(Rect("Ground", field.transform, new Vector2(0.5f, 0f), new Vector2(0.5f, 0f), Vector2.zero, new Vector2(0f, 120f)), "scroll_fade", Col("panel_ground", Color.clear)); var g = Skin(Rect("Ground", field.transform, new Vector2(0.5f, 0f), new Vector2(0.5f, 0f), Vector2.zero, new Vector2(0f, 100f)), "scroll_fade", Col("panel_ground", Color.clear));
g.rectTransform.anchorMin = new Vector2(0f, 0f); g.rectTransform.anchorMin = new Vector2(0f, 0f);
g.rectTransform.anchorMax = new Vector2(1f, 0f); g.rectTransform.anchorMax = new Vector2(1f, 0f);
g.rectTransform.sizeDelta = new Vector2(0f, 120f); g.rectTransform.sizeDelta = new Vector2(0f, 100f);
g.rectTransform.localScale = new Vector3(1f, -1f, 1f); g.rectTransform.localScale = new Vector3(1f, -1f, 1f);
g.rectTransform.pivot = new Vector2(0.5f, 1f); g.rectTransform.pivot = new Vector2(0.5f, 1f);
g.rectTransform.anchoredPosition = Vector2.zero; g.rectTransform.anchoredPosition = Vector2.zero;