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 deckViewMethods = [ method('OpenDeckInspect', `self.DeckInspectKind = kind if self.DeckAllOpen == true then self.DeckAllOpen = false local allHud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud") if allHud ~= nil then allHud.Enable = false end end local pile = {} local title = "" if kind == "discard" then pile = self.DiscardPile or {} title = "버린 덱" elseif kind == "exhaust" then pile = self.ExhaustPile or {} title = "소멸 덱" else pile = self.DrawPile or {} title = "뽑을 덱" end self:RenderDeckInspect(pile, title) local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckInspectHud") if hud ~= nil then hud.Enable = true end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'kind' }]), method('CloseDeckInspect', `self.DeckInspectKind = "" local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckInspectHud") if hud ~= nil then hud.Enable = false end`), method('RenderDeckInspect', `local count = 0 if pile ~= nil then count = #pile end local suffix = " (" .. tostring(count) .. ")" if count > 60 then suffix = suffix .. " - 60장까지 표시" end self:SetText("/ui/DefaultGroup/DeckInspectHud/Title", title .. suffix) local empty = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckInspectHud/Empty") if empty ~= nil then empty.Enable = count <= 0 end for i = 1, 60 do local e = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckInspectHud/Grid/Card" .. tostring(i)) if e ~= nil then local cardId = nil if pile ~= nil then cardId = pile[i] end if cardId == nil then e.Enable = false else e.Enable = true self:ApplyInspectCardVisual(i, cardId) end end end`, [ { Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'pile' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'title' }, ]), method('ApplyInspectCardVisual', `self:ApplyCardFace("/ui/DefaultGroup/DeckInspectHud/Grid/Card" .. tostring(slot), cardId)`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, ]), method('BindClassDeckTabs', `local warriorTab = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud/WarriorTab") if warriorTab ~= nil and warriorTab.ButtonComponent ~= nil then if self.WarriorDeckTabHandler ~= nil then warriorTab:DisconnectEvent(ButtonClickEvent, self.WarriorDeckTabHandler) self.WarriorDeckTabHandler = nil end self.WarriorDeckTabHandler = warriorTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab("warrior") end) end local thiefTab = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud/ThiefTab") if thiefTab ~= nil and thiefTab.ButtonComponent ~= nil then if self.ThiefDeckTabHandler ~= nil then thiefTab:DisconnectEvent(ButtonClickEvent, self.ThiefDeckTabHandler) self.ThiefDeckTabHandler = nil end self.ThiefDeckTabHandler = thiefTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab("bandit") end) end local mageTab = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud/MageTab") if mageTab ~= nil and mageTab.ButtonComponent ~= nil then if self.MageDeckTabHandler ~= nil then mageTab:DisconnectEvent(ButtonClickEvent, self.MageDeckTabHandler) self.MageDeckTabHandler = nil end self.MageDeckTabHandler = mageTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab("magician") end) end`), method('OpenClassDeck', `self.CodexMode = false self.ClassDeckMode = true self.DeckAllOpen = true self:SetClassDeckTab(className) local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud") if hud ~= nil then hud.Enable = true end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'className' }]), method('SetClassDeckTab', `if self.ClassDeckMode ~= true then return end self.ClassDeckCards = {} self.ClassDeckTitle = "직업 덱" if className ~= "warrior" and className ~= "magician" and className ~= "bandit" then className = "bandit" end self.ClassDeckClass = className local allowed = {} if className == "warrior" then allowed["warrior"] = true allowed["fighter"] = true allowed["page"] = true allowed["spearman"] = true self.ClassDeckTitle = "전사 전체 덱" elseif className == "magician" then allowed["magician"] = true allowed["firepoison"] = true allowed["icelightning"] = true allowed["cleric"] = true self.ClassDeckTitle = "마법사 전체 덱" else allowed["bandit"] = true allowed["shiv"] = true allowed["poisoner"] = true allowed["trickster"] = true self.ClassDeckTitle = "도적 전체 덱" end for id, c in pairs(self.Cards) do if c ~= nil and c.curse ~= true and allowed[c.class] == true then table.insert(self.ClassDeckCards, id) end end table.sort(self.ClassDeckCards, function(a, b) local ca = self.Cards[a] local cb = self.Cards[b] local na = a local nb = b if ca ~= nil and ca.name ~= nil then na = ca.name end if cb ~= nil and cb.name ~= nil then nb = cb.name end if na == nb then return a < b end return na < nb end) self:RenderAllDeck() self:RenderClassDeckTabs()`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'className' }]), method('RenderClassDeckTabs', `local tabs = { { path = "/ui/DefaultGroup/DeckAllHud/WarriorTab", cls = "warrior" }, { path = "/ui/DefaultGroup/DeckAllHud/ThiefTab", cls = "bandit" }, { path = "/ui/DefaultGroup/DeckAllHud/MageTab", cls = "magician" }, } for i = 1, #tabs do local e = _EntityService:GetEntityByPath(tabs[i].path) if e ~= nil then e.Enable = self.ClassDeckMode == true if e.SpriteGUIRendererComponent ~= nil then if self.ClassDeckClass == tabs[i].cls then e.SpriteGUIRendererComponent.Color = Color(0.22, 0.28, 0.34, 1) else e.SpriteGUIRendererComponent.Color = Color(0.11, 0.13, 0.16, 1) end end end end`), method('OpenAllDeck', `local inspectHud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckInspectHud") if inspectHud ~= nil then inspectHud.Enable = false end self.DeckInspectKind = "" self.ClassDeckMode = false self.ClassDeckClass = "" self:RenderClassDeckTabs() self.DeckAllOpen = true self:RenderAllDeck() local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud") if hud ~= nil then hud.Enable = true end`), method('CloseAllDeck', `self.DeckAllOpen = false local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud") if hud ~= nil then hud.Enable = false end if self.ClassDeckMode == true then self.ClassDeckMode = false self.ClassDeckCards = {} self.ClassDeckTitle = "" self.ClassDeckClass = "" end self:RenderClassDeckTabs() if self.CodexMode == true then self.CodexMode = false self:ShowLobby() end`), method('RenderAllDeck', `local pile = self.RunDeck or {} local title = "모든 덱" if self.ClassDeckMode == true then pile = self.ClassDeckCards or {} title = self.ClassDeckTitle elseif self.CodexMode == true then pile = self.CodexCards or {} title = "카드 도감" end local count = #pile self:SetText("/ui/DefaultGroup/DeckAllHud/Title", title .. " (" .. tostring(count) .. ")") self:RenderClassDeckTabs() local empty = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud/Empty") if empty ~= nil then empty.Enable = count <= 0 end for i = 1, 120 do local e = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud/Grid/Card" .. tostring(i)) if e ~= nil then local cardId = pile[i] if cardId == nil then e.Enable = false else e.Enable = true self:ApplyAllDeckCardVisual(i, cardId) end end end`), method('ApplyAllDeckCardVisual', `self:ApplyCardFace("/ui/DefaultGroup/DeckAllHud/Grid/Card" .. tostring(slot), cardId)`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, ]), ];