Files
Endfield-Data/LuaScripts/UI/Widgets/CustomRewardRadioComp.lua
2026-01-31 21:42:01 +07:00

171 lines
4.8 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
local Index2Radio = {
[-1] = -1,
[1] = 1,
[2] = 2,
}
CustomRewardRadioComp = HL.Class('CustomRewardRadioComp', UIWidgetBase)
CustomRewardRadioComp.m_costStamina = HL.Field(HL.Number) << -1
CustomRewardRadioComp.m_onRadioChangedFunc = HL.Field(HL.Function)
CustomRewardRadioComp.m_curSelectRadioIndex = HL.Field(HL.Number) << -1
CustomRewardRadioComp.m_isStaminaActivityOn = HL.Field(HL.Boolean) << false
CustomRewardRadioComp._OnFirstTimeInit = HL.Override() << function(self)
self:RegisterMessage(MessageConst.ON_ITEM_COUNT_CHANGED, function(args)
self:_OnItemCountChanged(args)
end)
self.view.radioPartOneBtn.onClick:AddListener(function()
self:_OnClickPartOneBtn()
end)
self.view.radioPartTwoBtn.onClick:AddListener(function()
self:_OnClickPartTwoBtn()
end)
end
CustomRewardRadioComp.InitCustomRewardRadioComp = HL.Method(HL.Number, HL.Function)
<< function(self, costStamina, onRadioChangedFunc)
self:_FirstTimeInit()
self.m_costStamina = costStamina
self.m_onRadioChangedFunc = onRadioChangedFunc
self:_InitData()
self:_RefreshView()
end
CustomRewardRadioComp._InitData = HL.Method() << function(self)
local activityInfo = ActivityUtils.getStaminaReduceInfo()
self.m_isStaminaActivityOn = activityInfo.activityUsable
local bpDoubleCount = Utils.getItemCount(Tables.dungeonConst.doubleStaminaTicketItemId)
local staminaValue = bpDoubleCount * Tables.dungeonConst.staminaPerDoubleStaminaTicket
local doubleStaminaTickedEnough = staminaValue >= self.m_costStamina
self.m_curSelectRadioIndex = doubleStaminaTickedEnough and -1 or 1
end
CustomRewardRadioComp._RefreshView = HL.Method() << function(self)
self.view.stateController:SetState(self.m_isStaminaActivityOn and "ActivityOn" or "ActivityOff")
if not self.m_isStaminaActivityOn then
self.view.radioPartOneTxt:SetAndResolveTextStyle(string.format(Language.LUA_RADIO_ONE_DESC, self.m_costStamina))
self.view.radioPartTwoTxt:SetAndResolveTextStyle(string.format(Language.LUA_RADIO_TWO_DESC, self.m_costStamina * 2))
local bpDoubleCount = Utils.getItemCount(Tables.dungeonConst.doubleStaminaTicketItemId)
local staminaValue = bpDoubleCount * Tables.dungeonConst.staminaPerDoubleStaminaTicket
local doubleStaminaTickedEnough = staminaValue >= self.m_costStamina
local consume = math.ceil(self.m_costStamina / Tables.dungeonConst.staminaPerDoubleStaminaTicket)
self.view.radioPartTwoNumTxt.text = UIUtils.setCountColorByCustomColor(consume, not doubleStaminaTickedEnough, self.config.ITEM_LACK_COLOR_STR)
self.view.radioPartTwoNode:SetState(doubleStaminaTickedEnough and "Possess" or "NotPossess")
self.view.radioPartTwoBtn.gameObject:SetActive(doubleStaminaTickedEnough)
self.view.radioPartOneNode:SetState(self.m_curSelectRadioIndex == 1 and "Select" or "Unselect")
self.view.radioPartTwoNode:SetState(self.m_curSelectRadioIndex == 2 and "Select" or "Unselect")
end
self.m_onRadioChangedFunc(self.m_isStaminaActivityOn and 1 or Index2Radio[self.m_curSelectRadioIndex])
end
CustomRewardRadioComp._OnClickPartOneBtn = HL.Method() << function(self)
if self.m_curSelectRadioIndex == 1 then
return
end
if self.m_curSelectRadioIndex == 1 then
self.view.radioPartOneNode:SetState("Unselect")
self.m_curSelectRadioIndex = -1
else
self.view.radioPartOneNode:SetState("Select")
self.view.radioPartTwoNode:SetState("Unselect")
self.m_curSelectRadioIndex = 1
end
self.m_onRadioChangedFunc(Index2Radio[self.m_curSelectRadioIndex])
end
CustomRewardRadioComp._OnClickPartTwoBtn = HL.Method() << function(self)
if self.m_curSelectRadioIndex == 2 then
return
end
if self.m_curSelectRadioIndex == 2 then
self.view.radioPartTwoNode:SetState("Unselect")
self.m_curSelectRadioIndex = -1
else
self.view.radioPartOneNode:SetState("Unselect")
self.view.radioPartTwoNode:SetState("Select")
self.m_curSelectRadioIndex = 2
end
self.m_onRadioChangedFunc(Index2Radio[self.m_curSelectRadioIndex])
end
CustomRewardRadioComp._OnItemCountChanged = HL.Method(HL.Table) << function(self, args)
local changedItemId2DiffCount = unpack(args)
local itemId = Tables.dungeonConst.doubleStaminaTicketItemId
if not changedItemId2DiffCount:ContainsKey(itemId) then
return
end
self:_RefreshView()
end
CustomRewardRadioComp.SetDefaultTarget = HL.Method() << function(self)
if not DeviceInfo.usingController then
return
end
UIUtils.setAsNaviTarget(self.view.radioPartOneBtn)
end
HL.Commit(CustomRewardRadioComp)
return CustomRewardRadioComp