389 lines
11 KiB
Lua
389 lines
11 KiB
Lua
|
||
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
||
local PANEL_ID = PanelId.ShopPackage
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl = HL.Class('ShopPackageCtrl', uiCtrl.UICtrl)
|
||
|
||
|
||
ShopPackageCtrl.m_shopGoodsInfos = HL.Field(HL.Table)
|
||
|
||
|
||
ShopPackageCtrl.m_getCellFunc = HL.Field(HL.Function)
|
||
|
||
|
||
|
||
ShopPackageCtrl.m_isControllerTarget = HL.Field(HL.Boolean) << false
|
||
|
||
|
||
ShopPackageCtrl.m_currNaviIndex = HL.Field(HL.Int) << 1
|
||
|
||
|
||
ShopPackageCtrl.m_needResetCurrNavi = HL.Field(HL.Boolean) << false
|
||
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl.s_messages = HL.StaticField(HL.Table) << {
|
||
[MessageConst.ON_READ_CASH_SHOP_GOODS] = '_UpdateContent',
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
||
self.m_shopGoodsInfos = arg.tabData.cashGoodsInfos
|
||
self.m_phase = arg.phase
|
||
|
||
|
||
table.sort(self.m_shopGoodsInfos, Utils.genSortFunction({ "soldOutSortValue", "cashShopPriority", "priority" }, true))
|
||
|
||
self.view.buyillustrateBtn.onClick:AddListener(function()
|
||
|
||
UIManager:Open(PanelId.InstructionBook, "ShopPackage_All")
|
||
end)
|
||
|
||
self:_InitShortCut()
|
||
|
||
if DeviceInfo.isPCorConsole then
|
||
self.view.contentScroll:SetSpace(Vector2(25, 40))
|
||
else
|
||
self.view.contentScroll:SetSpace(Vector2(40, 40))
|
||
end
|
||
|
||
self.m_getCellFunc = UIUtils.genCachedCellFunction(self.view.contentScroll)
|
||
self.view.contentScroll.onUpdateCell:AddListener(function(obj, index)
|
||
local cell = self.m_getCellFunc(obj)
|
||
local shopGoodsInfo = self.m_shopGoodsInfos[LuaIndex(index)]
|
||
self:_SetupCellView(cell, shopGoodsInfo)
|
||
|
||
if self.m_needResetCurrNavi and LuaIndex(index) == self.m_currNaviIndex then
|
||
UIUtils.setAsNaviTarget(cell.inputBindingGroupNaviDecorator)
|
||
self.m_needResetCurrNavi = false
|
||
end
|
||
end)
|
||
|
||
self:SetCurrNaviByGoodsId(arg.naviGoodsId)
|
||
if arg.naviGoodsId ~= nil and not string.isEmpty(arg.naviGoodsId) then
|
||
self.m_needResetCurrNavi = true
|
||
InputManagerInst:ToggleGroup(self.view.scrollGroupTarget.groupId, true)
|
||
end
|
||
|
||
self.view.contentScroll:UpdateCount(#self.m_shopGoodsInfos)
|
||
|
||
local cashShopCtrl = self.m_phase.cashShopCtrl
|
||
if cashShopCtrl == nil then
|
||
cashShopCtrl = self.m_phase.m_panel2Item[PanelId.CashShop].uiCtrl
|
||
end
|
||
|
||
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({
|
||
self.view.inputGroup.groupId,
|
||
arg.emptyCtrl.view.inputGroup.groupId,
|
||
cashShopCtrl.view.inputGroup.groupId,
|
||
})
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl.OnShow = HL.Override() << function(self)
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl._InitShortCut = HL.Method() << function(self)
|
||
if not DeviceInfo.usingController then
|
||
return
|
||
end
|
||
|
||
self:BindInputPlayerAction("cashshop_giftpack_goto_left", function()
|
||
InputManagerInst:ToggleGroup(self.view.scrollGroupTarget.groupId, false)
|
||
local leftCtrl = self.m_phase.m_panel2Item[PanelId.ShopGiftPackEmpty].uiCtrl
|
||
leftCtrl:NaviTargetCurrTab()
|
||
end, self.view.scrollGroupTarget.groupId)
|
||
|
||
self:BindInputPlayerAction("cashshop_navigation_4_dir_left", function()
|
||
self:_OnGoLeft()
|
||
end, self.view.scrollGroupTarget.groupId)
|
||
|
||
self:BindInputPlayerAction("cashshop_navigation_4_dir_up", function()
|
||
self:_OnGoUp()
|
||
end, self.view.scrollGroupTarget.groupId)
|
||
|
||
self:BindInputPlayerAction("cashshop_navigation_4_dir_right", function()
|
||
self:_OnGoRight()
|
||
end, self.view.scrollGroupTarget.groupId)
|
||
|
||
self:BindInputPlayerAction("cashshop_navigation_4_dir_down", function()
|
||
self:_OnGoDown()
|
||
end, self.view.scrollGroupTarget.groupId)
|
||
|
||
InputManagerInst:ToggleGroup(self.view.scrollGroupTarget.groupId, false)
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl._SetupCellView = HL.Method(HL.Table, HL.Table) << function(self, cell, shopGoodsInfo)
|
||
local shopGoodsId = shopGoodsInfo.goodsId
|
||
local succ, shopGoodsData = Tables.CashShopGoodsTable:TryGetValue(shopGoodsId)
|
||
if not succ then
|
||
logger.error("找不到商品配置:" .. shopGoodsId)
|
||
return
|
||
end
|
||
|
||
local stateCtrl = cell.stateController
|
||
local canBuy = CashShopUtils.CheckCanBuyCashShopGoods(shopGoodsId)
|
||
if canBuy then
|
||
stateCtrl:SetState("Sell")
|
||
else
|
||
stateCtrl:SetState("SellOut")
|
||
end
|
||
if shopGoodsData.goodsType == GEnums.CashGoodsType.MonthlyCard then
|
||
stateCtrl:SetState("MonthlyPass")
|
||
self:_SetupViewMonthlyPass(cell, shopGoodsId)
|
||
else
|
||
stateCtrl:SetState("Other")
|
||
end
|
||
|
||
local tagWidget = cell.cashShopItemTag
|
||
tagWidget:InitCashShopItemTag({
|
||
isCashShop = true,
|
||
shopGoodsInfo = shopGoodsInfo,
|
||
})
|
||
|
||
local name = CashShopUtils.GetCashGoodsName(shopGoodsId)
|
||
cell.groupBagNameTxt.text = name
|
||
cell.groupBagNameShadownTxt.text = name
|
||
cell.sellNumberTxt.text = CashShopUtils.getGoodsPriceText(shopGoodsId)
|
||
|
||
local path, imageName = CashShopUtils.GetCashGoodsImage(shopGoodsId)
|
||
cell.pattern:LoadSprite(path, imageName)
|
||
|
||
local _, cfg = Tables.GiftpackCashShopGoodsDataTable:TryGetValue(shopGoodsId)
|
||
if cfg and not string.isEmpty(cfg.bg) then
|
||
cell.bg:LoadSprite(UIConst.UI_SPRITE_SHOP_GROUP_BAG, cfg.bg)
|
||
end
|
||
if cfg and not string.isEmpty(cfg.deco) then
|
||
cell.bgDeco:LoadSprite(UIConst.UI_SPRITE_SHOP_GROUP_BAG, cfg.deco)
|
||
end
|
||
|
||
cell.contentBtn.onClick:RemoveAllListeners()
|
||
cell.contentBtn.onClick:AddListener(function()
|
||
|
||
GameInstance.player.cashShopSystem:ReadCashGoods(shopGoodsId)
|
||
|
||
EventLogManagerInst:GameEvent_GoodsViewClick(
|
||
"1",
|
||
shopGoodsInfo.cashShopId,
|
||
CashShopConst.CashShopCategoryType.Pack,
|
||
shopGoodsId
|
||
)
|
||
|
||
if shopGoodsData.goodsType == GEnums.CashGoodsType.MonthlyCard then
|
||
UIManager:Open(PanelId.ShopMonthlyDetail, {
|
||
goodsId = shopGoodsId,
|
||
goodsInfo = shopGoodsInfo,
|
||
})
|
||
else
|
||
UIManager:Open(PanelId.ShopGiftPackDetails, {
|
||
goodsId = shopGoodsId,
|
||
goodsInfo = shopGoodsInfo,
|
||
})
|
||
end
|
||
end)
|
||
cell.contentBtn.customBindingViewLabelText = Language.LUA_CASH_SHOP_PACKAGE_PANEL_BUTTON_BUTTON_KEY_HINT
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl._SetupCellViewTag = HL.Method(HL.Table, HL.Table) << function(self, cell, shopGoodsInfo)
|
||
local tagWidget = cell.cashShopItemTag
|
||
tagWidget:InitCashShopItemTag({
|
||
isCashShop = true,
|
||
shopGoodsInfo = shopGoodsInfo,
|
||
})
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl._SetupViewMonthlyPass = HL.Method(HL.Table, HL.String) << function(self, cell, goodsId)
|
||
local remainValidDays = GameInstance.player.monthlyPassSystem:GetRemainValidDays()
|
||
cell.monthlyPassNode.gameObject:SetActiveIfNecessary(remainValidDays > 0)
|
||
cell.dayNumberTxt.text = remainValidDays
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl._UpdateContent = HL.Method() << function(self)
|
||
logger.info("ShopPackageCtrl: 收到msg,刷新content")
|
||
|
||
self.view.contentScroll:UpdateShowingCells(function(index, obj)
|
||
local cell = self.m_getCellFunc(obj)
|
||
local shopGoodsInfo = self.m_shopGoodsInfos[LuaIndex(index)]
|
||
self:_SetupCellViewTag(cell, shopGoodsInfo)
|
||
end)
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl.TargetFirstCell = HL.Method() << function(self)
|
||
logger.info("ShopPackageCtrl: TargetFirstCell")
|
||
|
||
InputManagerInst:ToggleGroup(self.view.scrollGroupTarget.groupId, true)
|
||
|
||
local range = self.view.contentScroll:GetShowRange()
|
||
local firstCell = self.m_getCellFunc(self.view.contentScroll:Get(range.x))
|
||
UIUtils.setAsNaviTarget(firstCell.inputBindingGroupNaviDecorator)
|
||
self.m_currNaviIndex = LuaIndex(range.x)
|
||
self:_SetSingleGoodsReadByIndex(self.m_currNaviIndex)
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl._OnGoLeft = HL.Method() << function(self)
|
||
logger.info("ShopPackageCtrl: _OnGoLeft")
|
||
|
||
local currIndex = self.m_currNaviIndex
|
||
|
||
local countPerLine = self.view.contentScroll.countPerLine
|
||
if currIndex and currIndex % countPerLine == 1 then
|
||
InputManagerInst:ToggleGroup(self.view.scrollGroupTarget.groupId, false)
|
||
local leftCtrl = self.m_phase.m_panel2Item[PanelId.ShopGiftPackEmpty].uiCtrl
|
||
leftCtrl:NaviTargetCurrTab()
|
||
logger.info("ShopPackageCtrl: _OnGoLeft: NaviTargetCurrTab, currIndex is: " .. currIndex)
|
||
else
|
||
local targetCell = self.m_getCellFunc(self.view.contentScroll:Get(CSIndex(currIndex - 1)))
|
||
UIUtils.setAsNaviTarget(targetCell.inputBindingGroupNaviDecorator)
|
||
self.m_currNaviIndex = self.m_currNaviIndex - 1
|
||
self:_SetSingleGoodsReadByIndex(self.m_currNaviIndex)
|
||
end
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl._OnGoUp = HL.Method() << function(self)
|
||
local countPerLine = self.view.contentScroll.countPerLine
|
||
local targetIndex = self.m_currNaviIndex - countPerLine
|
||
if targetIndex <= 0 then
|
||
return
|
||
end
|
||
|
||
local targetCell = self.m_getCellFunc(self.view.contentScroll:Get(CSIndex(targetIndex)))
|
||
UIUtils.setAsNaviTarget(targetCell.inputBindingGroupNaviDecorator)
|
||
self.m_currNaviIndex = targetIndex
|
||
self:_SetSingleGoodsReadByIndex(self.m_currNaviIndex)
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl._OnGoRight = HL.Method() << function(self)
|
||
local targetIndex = self.m_currNaviIndex + 1
|
||
if targetIndex > #self.m_shopGoodsInfos then
|
||
return
|
||
end
|
||
|
||
local targetCell = self.m_getCellFunc(self.view.contentScroll:Get(CSIndex(targetIndex)))
|
||
UIUtils.setAsNaviTarget(targetCell.inputBindingGroupNaviDecorator)
|
||
self.m_currNaviIndex = targetIndex
|
||
self:_SetSingleGoodsReadByIndex(self.m_currNaviIndex)
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl._OnGoDown = HL.Method() << function(self)
|
||
local countPerLine = self.view.contentScroll.countPerLine
|
||
local targetIndex = self.m_currNaviIndex + countPerLine
|
||
if targetIndex > #self.m_shopGoodsInfos then
|
||
|
||
local lineNumber = (#self.m_shopGoodsInfos // countPerLine) +
|
||
((#self.m_shopGoodsInfos % countPerLine > 0) and 1 or 0)
|
||
if self.m_currNaviIndex <= countPerLine * (lineNumber - 1) then
|
||
targetIndex = #self.m_shopGoodsInfos
|
||
else
|
||
return
|
||
end
|
||
end
|
||
|
||
local targetCell = self.m_getCellFunc(self.view.contentScroll:Get(CSIndex(targetIndex)))
|
||
UIUtils.setAsNaviTarget(targetCell.inputBindingGroupNaviDecorator)
|
||
self.m_currNaviIndex = targetIndex
|
||
self:_SetSingleGoodsReadByIndex(self.m_currNaviIndex)
|
||
end
|
||
|
||
|
||
|
||
ShopPackageCtrl.GetCurrNaviGoodsId = HL.Method().Return(HL.String) << function(self)
|
||
if self.m_currNaviIndex > #self.m_shopGoodsInfos then
|
||
return ""
|
||
else
|
||
return self.m_shopGoodsInfos[self.m_currNaviIndex].goodsId
|
||
end
|
||
end
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl.SetCurrNaviByGoodsId = HL.Method(HL.String) << function(self, goodsId)
|
||
if goodsId ~= nil then
|
||
for index, info in ipairs(self.m_shopGoodsInfos) do
|
||
if info.goodsId == goodsId then
|
||
self.m_currNaviIndex = index
|
||
return
|
||
end
|
||
end
|
||
end
|
||
|
||
self.m_currNaviIndex = 1
|
||
self:_SetSingleGoodsReadByIndex(self.m_currNaviIndex)
|
||
end
|
||
|
||
|
||
|
||
|
||
ShopPackageCtrl._SetSingleGoodsReadByIndex = HL.Method(HL.Number) << function(self, luaIndex)
|
||
local info = self.m_shopGoodsInfos[luaIndex]
|
||
if info ~= nil then
|
||
local goodsId = info.goodsId
|
||
GameInstance.player.cashShopSystem:ReadCashGoods(goodsId)
|
||
end
|
||
end
|
||
|
||
HL.Commit(ShopPackageCtrl)
|