diff --git a/tools/deck/gen-slaydeck.mjs b/tools/deck/gen-slaydeck.mjs index fc8d7c0..ac16002 100644 --- a/tools/deck/gen-slaydeck.mjs +++ b/tools/deck/gen-slaydeck.mjs @@ -112,7 +112,7 @@ const SKILL = { r: 0.46, g: 0.68, b: 0.52, a: 1 }; const MAX_MONSTERS = 4; const HEAD_OFFSET_Y = 1.4; // 몬스터 월드 원점 위로 띄울 높이(머리 위) — world→screen 변환 전 가산 -const HP_BAR_W = 120; +const HP_BAR_W = 140; const CARD_W = 180; const CARD_H = 250; const CARD_SPACING = 200; @@ -848,30 +848,41 @@ function upsertUi() { }); slot.jsonString.enable = false; combat.push(slot); + const targetFrame = entity({ + id: guid('cmb', 220 + i), path: `${base}/TargetFrame`, modelId: 'uisprite', entryId: 'UISprite', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 0, + components: [ + transform({ parentW: SLOT_W, parentH: SLOT_H, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: SLOT_W + 16, y: SLOT_H + 12 }, pos: { x: 0, y: 0 } }), + sprite({ color: { r: 0.95, g: 0.78, b: 0.25, a: 0.28 }, type: 1 }), + ], + }); + targetFrame.jsonString.enable = false; + combat.push(targetFrame); combat.push(entity({ id: guid('cmb', 60 + i), path: `${base}/Name`, modelId: 'uitext', entryId: 'UIText', componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', - displayOrder: 0, + displayOrder: 1, components: [ transform({ parentW: SLOT_W, parentH: SLOT_H, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: SLOT_W, y: 30 }, pos: { x: 0, y: 34 } }), sprite({ color: TRANSPARENT }), - text({ value: '', fontSize: 20, bold: true, color: GOLD, alignment: 4 }), + text({ value: '', fontSize: 22, bold: true, color: GOLD, alignment: 4 }), ], })); combat.push(entity({ id: guid('cmb', 80 + i), path: `${base}/Hp`, modelId: 'uitext', entryId: 'UIText', componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', - displayOrder: 1, + displayOrder: 2, components: [ transform({ parentW: SLOT_W, parentH: SLOT_H, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: SLOT_W, y: 26 }, pos: { x: 0, y: 6 } }), sprite({ color: TRANSPARENT }), - text({ value: '', fontSize: 18, bold: true, color: { r: 1, g: 1, b: 1, a: 1 }, alignment: 4 }), + text({ value: '', fontSize: 20, bold: true, color: { r: 1, g: 1, b: 1, a: 1 }, alignment: 4 }), ], })); combat.push(entity({ id: guid('cmb', 100 + i), path: `${base}/HpBarBg`, modelId: 'uisprite', entryId: 'UISprite', componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', - displayOrder: 2, + displayOrder: 3, components: [ transform({ parentW: SLOT_W, parentH: SLOT_H, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: HP_BAR_W, y: 14 }, pos: { x: 0, y: -14 } }), sprite({ color: { r: 0.18, g: 0.05, b: 0.06, a: 1 }, type: 1 }), @@ -880,7 +891,7 @@ function upsertUi() { combat.push(entity({ id: guid('cmb', 120 + i), path: `${base}/HpBarFill`, modelId: 'uisprite', entryId: 'UISprite', componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', - displayOrder: 3, + displayOrder: 4, components: [ transform({ parentW: SLOT_W, parentH: SLOT_H, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0, y: 0.5 }, size: { x: HP_BAR_W, y: 14 }, pos: { x: -HP_BAR_W / 2, y: -14 } }), sprite({ color: { r: 0.86, g: 0.35, b: 0.32, a: 1 }, type: 1 }), @@ -889,7 +900,7 @@ function upsertUi() { combat.push(entity({ id: guid('cmb', 140 + i), path: `${base}/Intent`, modelId: 'uitext', entryId: 'UIText', componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', - displayOrder: 4, + displayOrder: 5, components: [ transform({ parentW: SLOT_W, parentH: SLOT_H, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: SLOT_W + 40, y: 24 }, pos: { x: 0, y: -36 } }), sprite({ color: TRANSPARENT }), @@ -2385,8 +2396,16 @@ end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], N if intent.kind == "Attack" then t = "공격 " .. tostring(intent.value) elseif intent.kind == "Defend" then t = "방어 " .. tostring(intent.value) end end - if i == self.TargetIndex then t = "[타겟] " .. t end self:SetText(base .. "/Intent", t) + self:SetEntityEnabled(base .. "/TargetFrame", i == self.TargetIndex) + local intentEntity = _EntityService:GetEntityByPath(base .. "/Intent") + if intentEntity ~= nil and intentEntity.TextComponent ~= nil and intent ~= nil then + if intent.kind == "Attack" then + intentEntity.TextComponent.FontColor = Color(1, 0.45, 0.35, 1) + else + intentEntity.TextComponent.FontColor = Color(0.5, 0.75, 1, 1) + end + end self:SetHpBar(base .. "/HpBarFill", m.hp, m.maxHp, ${HP_BAR_W}) else self:SetEntityEnabled(base, false)