Files
Endfield-Data/LuaScripts/UI/Panels/ShopMonthlyPass3D/ShopMonthlyPass3DCtrl.lua
2026-01-31 21:42:01 +07:00

271 lines
8.4 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.ShopMonthlyPass3D
local DECO_ICON_PATH_1 = "item_monthlypass_icon01"
local DECO_ICON_PATH_2 = "item_monthlypass_icon02"
local PanelType = {
Shop = 1,
DailyPopup = 2,
}
ShopMonthlyPass3DCtrl = HL.Class('ShopMonthlyPass3DCtrl', uiCtrl.UICtrl)
ShopMonthlyPass3DCtrl.m_currPageType = HL.Field(HL.Any) << PanelType.Shop
ShopMonthlyPass3DCtrl.m_rewardList1 = HL.Field(HL.Table)
ShopMonthlyPass3DCtrl.m_rewardList2 = HL.Field(HL.Table)
ShopMonthlyPass3DCtrl.m_rewardList3 = HL.Field(HL.Table)
ShopMonthlyPass3DCtrl.m_remainDayNumber = HL.Field(HL.Number) << 0
ShopMonthlyPass3DCtrl.m_rewardCell1 = HL.Field(HL.Forward("UIListCache"))
ShopMonthlyPass3DCtrl.m_rewardCell2 = HL.Field(HL.Forward("UIListCache"))
ShopMonthlyPass3DCtrl.m_rewardCell3 = HL.Field(HL.Forward("UIListCache"))
ShopMonthlyPass3DCtrl.s_messages = HL.StaticField(HL.Table) << {
}
ShopMonthlyPass3DCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
if arg.isDailyPopup then
self:ChangePanelCfg("clearedPanel", false)
else
self:ChangePanelCfg("clearedPanel", true)
end
self.m_currPageType = arg.isDailyPopup and PanelType.DailyPopup or PanelType.Shop
if arg.remainDayNumber ~= nil then
self.m_remainDayNumber = arg.remainDayNumber
else
self.m_remainDayNumber = GameInstance.player.monthlyPassSystem:GetRemainValidDays()
end
self.m_rewardCell1 = UIUtils.genCellCache(self.view.itemCellState)
self.m_rewardCell2 = UIUtils.genCellCache(self.view.acquireItemCell)
self.m_rewardCell3 = UIUtils.genCellCache(self.view.itemCell)
local main = self.view.main
local rect = main.gameObject:GetComponent("RectTransform")
if self.m_currPageType == PanelType.DailyPopup then
if not DeviceInfo.usingTouch then
rect.localPosition = Vector3(180, 42, 0)
rect.localEulerAngles = Vector3(10, -11.2, -4.5)
else
rect.localPosition = Vector3(180, 34, 200)
rect.localEulerAngles = Vector3(10, -11.2, -4.5)
end
self.view.shopMonthlyPass3DPanel:SetState("Acquire")
elseif self.m_currPageType == PanelType.Shop then
if not DeviceInfo.usingTouch then
rect.localPosition = Vector3(256, -52, 222)
rect.localEulerAngles = Vector3(10, -11.2, -4.5)
self.view.shopMonthlyPass3DPanel:SetState("ShopPc")
else
rect.localPosition = Vector3(208, -80, 810)
rect.localEulerAngles = Vector3(10, -11.2, -4.5)
self.view.shopMonthlyPass3DPanel:SetState("ShopTouch")
end
end
local dailyRewardInfoList = CashShopUtils.GetMonthlyPassDailyRewardInfoList()
if self.m_currPageType == PanelType.DailyPopup then
self.m_rewardList1 = dailyRewardInfoList
self.view.leftListNode:SetState("DailyPopup")
self:_RefreshDailyPopupUI()
else
self.m_rewardList1 = dailyRewardInfoList
self.m_rewardList2 = CashShopUtils.GetMonthlyPassMultiplyRewardInfoList()
self.m_rewardList3 = CashShopUtils.GetMonthlyPassImmediateRewardInfoList()
self.view.leftListNode:SetState("Shop")
self:_RefreshShopUI()
end
end
ShopMonthlyPass3DCtrl.OnShow = HL.Override() << function(self)
self.animationWrapper:PlayInAnimation()
end
ShopMonthlyPass3DCtrl._RefreshDailyPopupUI = HL.Method() << function(self)
local RectOffset = CS.UnityEngine.RectOffset
local padding = RectOffset()
padding.left = 0
padding.right = 0
padding.top = 20
padding.bottom = 20
self.view.leftItemEntry.padding = padding
self.view.leftItemEntry.spacing = 60
self.view.entry01Txt.text = Language.LUA_MONTHLYPASS_LEFT_TITLE_1_DAILY
self.view.entry03Txt.text = Language.LUA_MONTHLYPASS_LEFT_TITLE_2_DAILY
local haveGotDailyReward = self.m_phase and self.m_phase.m_haveGotReward or false
if haveGotDailyReward then
self.view.contentState:SetState("AcquireAfter")
else
self.view.contentState:SetState("AcquireBefore")
end
self.m_rewardCell1:Refresh(#self.m_rewardList1, function(cell, index)
local uiStateCtrl = cell.stateController
if haveGotDailyReward then
uiStateCtrl:SetState("AcquireAfter")
else
uiStateCtrl:SetState("AcquireBefore")
end
local itemInfo = self.m_rewardList1[index]
local succ, itemData = Tables.ItemTable:TryGetValue(itemInfo.rewardId)
if succ then
cell.itemIcon:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
cell.itemIconShadown:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
end
cell.itemNumTxt.text = itemInfo.number
cell.itemNumTxt2.text = itemInfo.number
if index == 1 then
cell.itemDecoIconShadown:LoadSprite(UIConst.UI_SPRITE_SHOP_MONTHLY_PASS, DECO_ICON_PATH_1)
cell.itemDecoIcon:LoadSprite(UIConst.UI_SPRITE_SHOP_MONTHLY_PASS, DECO_ICON_PATH_1)
elseif index == 2 then
cell.itemDecoIconShadown:LoadSprite(UIConst.UI_SPRITE_SHOP_MONTHLY_PASS, DECO_ICON_PATH_2)
cell.itemDecoIcon:LoadSprite(UIConst.UI_SPRITE_SHOP_MONTHLY_PASS, DECO_ICON_PATH_2)
end
end)
self.view.daysNumTxt.text = tostring(self.m_remainDayNumber)
self.view.daysNumTxtShadown.text = tostring(self.m_remainDayNumber)
if self.m_remainDayNumber <= Tables.CashShopConst.MonthlyCardShortThresholdDay then
self.view.daysNumTxt.color = self.view.config.DAY_COLOR_SHORT_DATED
else
self.view.daysNumTxt.color = self.view.config.DAY_COLOR_NORMAL
end
end
ShopMonthlyPass3DCtrl.PlayGotDailyReward = HL.Method() << function(self)
local haveGotDailyReward = self.m_phase and self.m_phase.m_haveGotReward or false
if haveGotDailyReward then
self.view.contentState:SetState("AcquireAfter")
self.view.aniAll:PlayInAnimation()
end
self.m_rewardCell1:Refresh(#self.m_rewardList1, function(cell, index)
local uiStateCtrl = cell.stateController
local animWrapper = cell.animationWrapper
if haveGotDailyReward then
uiStateCtrl:SetState("AcquireAfter")
animWrapper:PlayInAnimation()
else
uiStateCtrl:SetState("AcquireBefore")
end
end)
end
ShopMonthlyPass3DCtrl._RefreshShopUI = HL.Method() << function(self)
local RectOffset = CS.UnityEngine.RectOffset
local padding = RectOffset()
padding.left = 0
padding.right = 0
padding.top = 0
padding.bottom = 0
self.view.leftItemEntry.padding = padding
self.view.leftItemEntry.spacing = 30
self.view.contentState:SetState("Shop")
self.view.entry01Txt.text = Language.LUA_MONTHLYPASS_LEFT_TITLE_1_SHOP
self.view.entry03Txt.text = Language.LUA_MONTHLYPASS_LEFT_TITLE_2_SHOP
self.m_rewardCell1:Refresh(#self.m_rewardList1, function(cell, index)
local uiStateCtrl = cell.stateController
uiStateCtrl:SetState("Shop")
local itemInfo = self.m_rewardList1[index]
local succ, itemData = Tables.ItemTable:TryGetValue(itemInfo.rewardId)
if succ then
cell.itemIcon:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
cell.itemIconShadown:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
end
cell.itemNumTxt.text = itemInfo.number
cell.itemNumTxt2.text = itemInfo.number
end)
self.m_rewardCell2:Refresh(#self.m_rewardList2, function(cell, index)
local itemInfo = self.m_rewardList2[index]
local succ, itemData = Tables.ItemTable:TryGetValue(itemInfo.rewardId)
if succ then
cell.itemIcon:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
end
cell.itemNumTxt.text = itemInfo.number
cell.itemNumTxt2.text = itemInfo.number
end)
self.m_rewardCell3:Refresh(#self.m_rewardList3, function(cell, index)
local itemInfo = self.m_rewardList3[index]
local succ, itemData = Tables.ItemTable:TryGetValue(itemInfo.rewardId)
if succ then
cell.itemIcon:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
cell.itemIconShadown:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
end
cell.itemNumTxt.text = itemInfo.number
cell.itemNumTxt2.text = itemInfo.number
end)
end
HL.Commit(ShopMonthlyPass3DCtrl)