luaCharsTable() 신설(characters.json→self.ClassPortraits), boot/run 시드 +
prop, RenderCharacterSelect가 각 {key}Button/Art ImageRUID를 경로로 주입.
(메이커 저작 레이아웃이어도 컨트롤러가 이미지 채움 = 패턴 b 내용주입.)
산출물: SlayDeckController.codeblock 재생성 포함.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
71 lines
4.6 KiB
JavaScript
71 lines
4.6 KiB
JavaScript
import { method, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, LOBBY_MAP, LOBBY_SPAWN } from '../lib/codeblock.mjs';
|
|
import { CARDS, ENEMIES, CLASSES, JOBS, SOUL_UNLOCKS, CARDFRAMES, RARITIES, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, POTIONS, luaSoulShopTable, frameRuid, luaFramesTable, luaNodeIconsTable, luaRelicsTable, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable } from '../lib/data.mjs';
|
|
import { UI_FILE, COMMON_FILE, UI_ROOT, GENERATED_UI_SECTIONS, UI_APPEND_ORDER, DISABLED_STOCK_CONTROLS, TRANSPARENT, DARK, GOLD, ATTACK, DEFEND, SKILL, DAMAGE_DIGIT_RUIDS, DAMAGE_POP_MAX_DIGITS, DAMAGE_POP_DIGIT_W, DAMAGE_POP_DIGIT_H, DAMAGE_POP_DIGIT_SPACING, MAX_MONSTERS, HEAD_OFFSET_Y, HP_BAR_W, WHITE, CARD_NAME_TEXT, CARD_DESC_TEXT, cardFaceLayout, CARD_W, CARD_H, CARD_SPACING, CARD_XS, ALIGN_CENTER, ALIGN_BOTTOM_CENTER, guid, transform, sprite, button, text, scrollLayoutGroup, popupLayerFor, uiOrderFor, displayOrderFor, applySortingOverride, entity, uiPath, sectionRoot, isGeneratedUiEntity, appendUiSection } from '../lib/ui-helpers.mjs';
|
|
|
|
export const charSelectMethods = [
|
|
method('ShowCharacterSelect', `self.SelectedClass = ""
|
|
self:ShowState("charselect")
|
|
self:RenderCharacterSelect()`),
|
|
method('SelectClass', `self.SelectedClass = className
|
|
self:RenderCharacterSelect()`, [
|
|
{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'className' },
|
|
]),
|
|
method('RenderCharacterSelect', `local warriorArt = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/WarriorButton/Art")
|
|
if warriorArt ~= nil and warriorArt.SpriteGUIRendererComponent ~= nil and self.ClassPortraits ~= nil and self.ClassPortraits["warrior"] ~= nil then
|
|
warriorArt.SpriteGUIRendererComponent.ImageRUID = self.ClassPortraits["warrior"]
|
|
end
|
|
local mageArt = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/MageButton/Art")
|
|
if mageArt ~= nil and mageArt.SpriteGUIRendererComponent ~= nil and self.ClassPortraits ~= nil and self.ClassPortraits["magician"] ~= nil then
|
|
mageArt.SpriteGUIRendererComponent.ImageRUID = self.ClassPortraits["magician"]
|
|
end
|
|
local thiefArt = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton/Art")
|
|
if thiefArt ~= nil and thiefArt.SpriteGUIRendererComponent ~= nil and self.ClassPortraits ~= nil and self.ClassPortraits["bandit"] ~= nil then
|
|
thiefArt.SpriteGUIRendererComponent.ImageRUID = self.ClassPortraits["bandit"]
|
|
end
|
|
local warrior = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/WarriorButton")
|
|
if warrior ~= nil and warrior.SpriteGUIRendererComponent ~= nil then
|
|
if self.SelectedClass == "warrior" then
|
|
warrior.SpriteGUIRendererComponent.Color = Color(1, 0.82, 0.3, 1)
|
|
else
|
|
warrior.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)
|
|
end
|
|
end
|
|
local mage = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/MageButton")
|
|
if mage ~= nil and mage.SpriteGUIRendererComponent ~= nil then
|
|
if self.SelectedClass == "magician" then
|
|
mage.SpriteGUIRendererComponent.Color = Color(1, 0.82, 0.3, 1)
|
|
else
|
|
mage.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)
|
|
end
|
|
end
|
|
local thief = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton")
|
|
if thief ~= nil and thief.SpriteGUIRendererComponent ~= nil then
|
|
if self.SelectedClass == "bandit" then
|
|
thief.SpriteGUIRendererComponent.Color = Color(1, 0.82, 0.3, 1)
|
|
else
|
|
thief.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)
|
|
end
|
|
end
|
|
if self.SelectedClass == "warrior" then
|
|
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "전사 선택됨")
|
|
elseif self.SelectedClass == "bandit" then
|
|
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "도적 선택됨")
|
|
elseif self.SelectedClass == "magician" then
|
|
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "마법사 선택됨")
|
|
else
|
|
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 선택하고 시작하세요")
|
|
end`),
|
|
method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "bandit" and self.SelectedClass ~= "magician" then
|
|
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 먼저 선택하세요")
|
|
return
|
|
end
|
|
self:StartRun()`),
|
|
method('SetEntityEnabled', `local e = _EntityService:GetEntityByPath(path)
|
|
if e ~= nil then
|
|
e.Enable = enabled
|
|
end`, [
|
|
{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'path' },
|
|
{ Type: 'boolean', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'enabled' },
|
|
]),
|
|
];
|