Files
Endfield-Data/LuaScripts/UI/Widgets/DungeonCommonSelectionCell.lua
2025-12-02 20:37:18 +07:00

158 lines
4.0 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
DungeonCommonSelectionCell = HL.Class('DungeonCommonSelectionCell', UIWidgetBase)
DungeonCommonSelectionCell.m_dungeonId = HL.Field(HL.String) << ""
DungeonCommonSelectionCell.m_clickFunc = HL.Field(HL.Function)
DungeonCommonSelectionCell.m_styleNode = HL.Field(HL.Any)
local UIState = {
Lock = "Lock",
Unlock = "Unlock",
Complete = "Complete",
Raid = "Raid",
UnlockChar = "UnlockChar",
UnlockRed = "UnlockRed",
UnlockYellow = "UnlockYellow",
UnlockGreen = "UnlockGreen",
LockRed = "LockRed",
LockYellow = "LockYellow",
LockGreen = "LockGreen",
Select = "Select",
Unselect = "Unselect",
}
DungeonCommonSelectionCell._OnFirstTimeInit = HL.Override() << function(self)
self.view.clickBtn.onClick:AddListener(function()
if self.m_clickFunc then
self.m_clickFunc()
end
end)
end
DungeonCommonSelectionCell.InitDungeonCommonSelectionCell = HL.Method(HL.String, HL.Function)
<< function(self, dungeonId, clickFunc)
self:_FirstTimeInit()
self.m_dungeonId = dungeonId
self.m_clickFunc = clickFunc
local dungeonCfg = Tables.dungeonTable[dungeonId]
self.view.levelDescTxt.text = dungeonCfg.dungeonLevelDesc
if not string.isEmpty(dungeonCfg.relatedCharId) then
self.view.charNameTxt.text = dungeonCfg.dungeonLevelDesc
self.view.charImg:LoadSprite(UIConst.UI_SPRITE_SQUARE_CHAR_HEAD,
UIConst.UI_CHAR_HEAD_SQUARE_PREFIX..CSCharUtils.GetCharTemplateId(dungeonCfg.relatedCharId))
end
self:_UpdateState()
self.view.redDot:InitRedDot("DungeonReadNormal", {dungeonId})
local inRelief = DungeonUtils.isDungeonCostStamina(dungeonId) and ActivityUtils.hasStaminaReduceCount()
self.view.reliefTab.gameObject:SetActive(inRelief)
end
DungeonCommonSelectionCell.SetSelected = HL.Method(HL.Boolean) << function(self, isOn)
self:_UpdateState(isOn)
if isOn then
GameInstance.player.subGameSys:SendSubGameListRead({ self.m_dungeonId })
end
end
DungeonCommonSelectionCell._UpdateState = HL.Method(HL.Opt(HL.Boolean)) << function(self, isOn)
local dungeonId = self.m_dungeonId
local isRaid = Tables.dungeonRaidTable:TryGetValue(dungeonId)
local dungeonCfg = Tables.dungeonTable[dungeonId]
local isUnlock = DungeonUtils.isDungeonUnlock(dungeonId)
local isComplete
local isNormalComplete = isRaid and DungeonUtils.isDungeonPassed(dungeonId)
if isRaid then
isComplete = DungeonUtils.isDungeonPassed(Tables.dungeonRaidTable[dungeonId].RelatedLevel) and DungeonUtils.isDungeonPassed(dungeonId)
else
isComplete = DungeonUtils.isDungeonPassed(dungeonId)
end
local state1
if isComplete then
state1 = UIState.Complete
elseif isNormalComplete then
state1 = UIState.Raid
elseif isUnlock then
state1 = UIState.Unlock
else
state1 = UIState.Lock
end
self.view.stateController:SetState(state1)
local hasHunterMode = not string.isEmpty(dungeonCfg.hunterModeRewardId)
local hasCustomRewardId = not string.isEmpty(dungeonCfg.customRewardId)
local hasCharInfo = not string.isEmpty(dungeonCfg.relatedCharId)
local state2
if isUnlock then
if hasCharInfo then
state2 = UIState.UnlockChar
elseif hasHunterMode then
state2 = UIState.UnlockRed
elseif hasCustomRewardId then
state2 = UIState.UnlockYellow
else
state2 = UIState.UnlockGreen
end
else
if hasHunterMode then
state2 = UIState.LockRed
elseif hasCustomRewardId then
state2 = UIState.LockYellow
else
state2 = UIState.LockGreen
end
end
self.view.stateController:SetState(state2)
local state3 = isOn and "Select" or "Unselect"
self.view.stateController:SetState(state3)
end
HL.Commit(DungeonCommonSelectionCell)
return DungeonCommonSelectionCell