271 lines
10 KiB
JavaScript
271 lines
10 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 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.DebugCardPickerMode = false
|
|
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('OpenDebugCardPicker', `if self.RunActive ~= true or self.CombatOver == true or self.Hand == nil then
|
|
self:Toast("전투 중에만 테스트 카드를 추가할 수 있습니다")
|
|
return
|
|
end
|
|
local className = self.SelectedClass
|
|
if className ~= "warrior" and className ~= "magician" and className ~= "bandit" then
|
|
className = "bandit"
|
|
end
|
|
self.CodexMode = false
|
|
self.ClassDeckMode = true
|
|
self.DebugCardPickerMode = true
|
|
self.DeckAllOpen = true
|
|
self:SetClassDeckTab(className)
|
|
local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud")
|
|
if hud ~= nil then
|
|
hud.Enable = true
|
|
end
|
|
self:Toast("테스트 카드 추가 모드")`),
|
|
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.DebugCardPickerMode = false
|
|
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.DebugCardPickerMode = false
|
|
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
|
|
if self.DebugCardPickerMode == true then
|
|
title = title .. " - 테스트 카드 추가"
|
|
end
|
|
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' },
|
|
]),
|
|
method('OnAllDeckCardButton', `if self.DebugCardPickerMode ~= true then
|
|
return
|
|
end
|
|
if self.ClassDeckCards == nil then
|
|
return
|
|
end
|
|
local cardId = self.ClassDeckCards[slot]
|
|
if cardId == nil or self.Cards == nil or self.Cards[cardId] == nil then
|
|
return
|
|
end
|
|
self:AddCardsToHand(cardId, 1)
|
|
local c = self.Cards[cardId]
|
|
local name = cardId
|
|
if c.name ~= nil then name = c.name end
|
|
self:Toast("테스트 카드 추가: " .. name)`, [
|
|
{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' },
|
|
]),
|
|
];
|