| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- local UIREShopView = require("UIShop/UIREShopView_Generate")
- local UIShopBuyTips1 = require("UIShop/UIShopBuyTips1")
- local UIShopGoldBuyTips = require("UIShop/UIShopGoldBuyTips")
- local exchangeCostKey = 308
- local exchangeCosts
- function UIREShopView:OnAwake(data)
- self.controller = require("UIShop/UIREShopCtr"):new()
- self.controller:Init(self)
- self.controller:SetData(data)
- end
- function UIREShopView:AddEventListener()
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SHOP_DATA_CHANGED, self, self.OnShopDataChanged)
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Open_Activity_Refresh, self, self.OnOpenActivityRefresh)
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Activity_Data_Change, self, self.OnActivityDataChange)
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.RED_ENVELOPE_CASH_EXCHANGE_SUCCESS, self, self.RefreshResAndRedEnvelope)
- end
- function UIREShopView:FillContent(data, uiBase)
- self.uiBase = uiBase
- local gameObject = self.uiBase:GetRoot()
- if gameObject ~= nil then
- self.gameObject = gameObject
- self.transform = gameObject.transform
- end
- self:InitGenerate(self.transform, data)
- self:Init()
- end
- function UIREShopView:Init()
- local val = GlobalConfig.Instance:GetConfigStrValue(exchangeCostKey)
- if val ~= "" and val ~= nil then
- exchangeCosts = CommonUtil.DeserializeGlobalStrToTable(val)
- end
- self.controller:InitData()
- self.controller:RefreshCurShopData(true)
- self.shopCurrencyItem:SetActive(false)
- self:RefreshRedEnvelope()
- self:RefreshResourceBoxs()
- self:InitGoods()
- self:RefreshGoods(true)
- self:InitSubPanels()
- end
- function UIREShopView:InitSubPanels()
- if self.shopBuyTips1 == nil then
- self.shopBuyTips1 = UIShopBuyTips1:new()
- end
- self.shopBuyTips1:InitGo(self,self.uiBase:FindChildGo("UIShop/UIShopBuyTips1"))
- self.shopBuyTips1:Hide()
- if self.shopGoldBuyTips == nil then
- self.shopGoldBuyTips = UIShopGoldBuyTips:new()
- end
- self.shopGoldBuyTips:InitGo(self,self.uiBase:FindChildGo("UIShop/UIShopGoldBuyTips"))
- self.shopGoldBuyTips:Hide()
- end
- function UIREShopView:RefreshResAndRedEnvelope()
- self:RefreshResourceBoxs()
- self:RefreshRedEnvelope()
- end
- function UIREShopView:RefreshResourceBoxs()
- local cfgData = self.controller:GetCurShopCfgData()
- local currencyLs = cfgData and cfgData.Currency or nil
- local showIdx = 0
- local currencys = self.currencys
- if not currencys then
- currencys = {}
- self.currencys = currencys
- end
- if currencyLs then
- for i = 1, #currencyLs do
- showIdx = i
- local itemId = currencyLs[i]
- local itemLua = currencys[i]
- if not itemLua then
- itemLua = self:CreateCurrencyItem()
- currencys[i] = itemLua
- end
- itemLua:SetActive(true)
- itemLua.icon.image.sprite = nil
- itemLua.icon.image.enabled = false
- local itemCfgData = ManagerContainer.CfgMgr:GetItemById(itemId)
- if itemCfgData then
- CommonUtil.LoadIcon(self, itemCfgData.MiniIcon, function(sprite)
- itemLua.icon.image.sprite = sprite
- itemLua.icon.image.enabled = true
- end)
- itemLua.number.text.text = CommonUtil.FormatNumber(CommonUtil.GetOwnResCountByItemId(itemId))
- else
- itemLua.number.text.text = '0'
- end
- end
- end
- for i = showIdx + 1, #currencys do
- local currency = currencys[i]
- if currency then
- currency:SetActive(false)
- end
- end
- end
- function UIREShopView:RefreshRedEnvelope()
- if not exchangeCosts or not exchangeCosts[1] then return end
- local resId = tonumber(exchangeCosts[1][1])
- local count = tonumber(exchangeCosts[1][2])
- local ownerCount = CommonUtil.GetOwnResCountByItemId(resId)
- local state = ownerCount >= count
- if not state then
- self.redEnvelope.desc.text.text = string.formatbykey("CashShopTips01", count)
- end
- self.redEnvelope.desc:SetActive(not state)
- self.redEnvelope.btnSure:SetActive(state)
- end
- function UIREShopView:InitGoods()
- self.goodsScrollView.loopGridView:InitGridView(0, function(gridView, itemIndex, row, column)
- return self:GetShopGoodsItemByRowColumn(gridView, itemIndex, row, column)
- end, nil)
- end
- function UIREShopView:CreateCurrencyItem()
- local go = CommonUtil.Instantiate(self.shopCurrencyItem.gameObject, self.resourceBox.transform)
- return CommonUtil.BindGridViewItem2Lua(self, 'ShopCurrencyItem', go)
- end
- function UIREShopView:RefreshGoods(resetPos)
- local shopData = self.controller:GetCurShopData()
- local length = 0
- if shopData then
- local goods = shopData:GetShowGoodsDatas()
- if goods then
- length = #goods
- end
- -- 处理在时间段显示的商品,或不需要通过服务器就能刷新的数据
- -- local remain = ManagerContainer.LuaTimerMgr:GetRemainSeconds(shopData:GetNeedRefreshTime())
- -- if self.needRefreshTimer then
- -- self.needRefreshTimer:Stop()
- -- end
- -- if remain > 0 then
- -- self.needRefreshTimer = Timer.New(function()
- -- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ShopTips")
- -- local curShopData = self.controller:GetCurShopData()
- -- if curShopData then
- -- curShopData:RefreshShowGoodsDatas()
- -- end
- -- self:RefreshGoods(true)
- -- end, remain + 1, 1)
- -- if not self.needRefreshTimer.running then
- -- self.needRefreshTimer:Start()
- -- end
- -- end
- end
- if resetPos then
- self.goodsScrollView.loopGridView:RefreshListByIndex(length, 0)
- else
- self.goodsScrollView.loopGridView:RefreshListByIndex(length)
- end
- end
- function UIREShopView:GetShopGoodsItemByRowColumn(gridView, itemIndex, row, column)
- local shopData = self.controller:GetCurShopData()
- if not shopData then return nil end
- local goods = shopData:GetShowGoodsDatas()
- if not goods then return nil end
- local goodsData = goods[itemIndex + 1]
- if not goodsData then return nil end
- local item = gridView:NewListViewItem('RuneShopGoodsItem')
- local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'RuneShopGoodsItem', item.gameObject)
- if itemLua then
- itemLua.itemIcon.image.sprite = nil
- itemLua.itemIcon.image.enabled = false
- local cfgData = goodsData.cfgData
- itemLua.presentPrice.icon:SetActive(true)
- itemLua.presentPrice.currency:SetActive(false)
-
- if cfgData then
- CommonUtil.LoadIcon(self, cfgData.GoodsPic, function(sprite)
- if sprite then
- itemLua.itemIcon.image.sprite = sprite
- itemLua.itemIcon.image.enabled = true
- end
- end, itemLua, 'ItemIcon')
- local itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgData.PayForType)
- CommonUtil.LoadIcon(self, itemCfgData.MiniIcon, function (sprite)
- itemLua.presentPrice.icon.image.sprite = sprite
- end, itemLua, 'CurrenyIcon')
- itemLua.itemName.text.text = string.formatbykey(cfgData.GoodsName)
- --LogError("====================="..cfgData.GoodsName.."========================")
- itemLua.discount:SetActive(false)
- self:RefreshGiftsItem(itemLua, nil, nil, cfgData.Reward)
- else
- itemLua.discount:SetActive(false)
- itemLua.itemName.text.text = ''
- itemLua.specialReward:SetActive(false)
- itemLua.goodsItems:SetActive(false)
- end
- local remainBuyNum = goodsData:GetRemainBuyNum()
- if remainBuyNum >= 0 then
- itemLua.purchaseLimit:SetActive(true)
- itemLua.purchaseLimit.text.text = string.formatbykey('RuneShopLimitBuy', tostring(remainBuyNum))
- else
- itemLua.purchaseLimit:SetActive(false)
- end
- local price = goodsData.curPrice
- if price <= 0 then
- itemLua.presentPrice.number.text.text = string.formatbykey('Free')
- else
- itemLua.presentPrice.number.text.text = FloatToPrice(price)
- end
- if goodsData:IsSoldout() then
- itemLua.soldout:SetActive(true)
- itemLua.button.onClick:RemoveAllListeners()
- itemLua.presentPrice.button.onClick:RemoveAllListeners()
- else
- itemLua.soldout:SetActive(false)
- self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickGiftItem, goodsData)
- self.uiBase:AddButtonUniqueEventListener(itemLua.presentPrice.button, self, self.OnClickGiftPrice, goodsData)
- end
- end
- return item
- end
- function UIREShopView:RefreshGiftsItem(itemLua, bgPic, numPic, rewards)
- if numPic and numPic ~= '' then
- itemLua.specialReward.bg.image.sprite = nil
- itemLua.specialReward.bg.image.enabled = false
- CommonUtil.LoadIcon(self, bgPic, function(sprite)
- if sprite then
- itemLua.specialReward.bg.image.sprite = sprite
- itemLua.specialReward.bg.image.enabled = true
- end
- end, itemLua, 'SpecialRewardBgIcon')
- itemLua.specialReward.num.image.sprite = nil
- itemLua.specialReward.num.image.enabled = false
- CommonUtil.LoadIcon(self, numPic, function(sprite)
- if sprite then
- itemLua.specialReward.num.image.sprite = sprite
- itemLua.specialReward.num.image.enabled = true
- end
- end, itemLua, 'SpecialRewardNumIcon')
- itemLua.specialReward:SetActive(true)
- itemLua.goodsItems:SetActive(false)
- else
- itemLua.specialReward:SetActive(false)
- if rewards then
- itemLua.goodsItems:SetActive(true)
- local reward = rewards[1]
- if reward then
- itemLua.iconSmallItem1:SetActive(true)
- CommonUtil.UpdateItemPrefab(self, itemLua.iconSmallItem1, {cfgId = reward[1], num = reward[2]}, Enum.ItemIEnterType.Bag)
- else
- itemLua.iconSmallItem1:SetActive(false)
- end
- reward = rewards[2]
- if reward then
- itemLua.iconSmallItem2:SetActive(true)
- CommonUtil.UpdateItemPrefab(self, itemLua.iconSmallItem2, {cfgId = reward[1], num = reward[2]}, Enum.ItemIEnterType.Bag)
- else
- itemLua.iconSmallItem2:SetActive(false)
- end
- reward = rewards[3]
- if reward then
- itemLua.iconSmallItem3:SetActive(true)
- CommonUtil.UpdateItemPrefab(self, itemLua.iconSmallItem3, {cfgId = reward[1], num = reward[2]}, Enum.ItemIEnterType.Bag)
- else
- itemLua.iconSmallItem3:SetActive(false)
- end
- else
- itemLua.goodsItems:SetActive(false)
- end
- end
- end
- function UIREShopView:DisposeCurrencyItems()
- if not self.currencys then return end
- for _, currency in pairs(self.currencys) do
- if currency then
- local go = currency.gameObject
- CommonUtil.ClearGridViewItem(self, currency)
- CommonUtil.DestroyGO(go)
- end
- end
- self.currencys = nil
- end
- function UIREShopView:OnClickGiftItem(button, params)
- local goodsData = params[0]
- self.controller:SetCurGoodsData(goodsData)
- if self.shopBuyTips1 then
- self.shopBuyTips1:Show(goodsData)
- end
- end
- function UIREShopView:OnRedEnvelopeBtnClick(button, params)
- if self.shopGoldBuyTips then
- self.shopGoldBuyTips:Show()
- end
- end
- function UIREShopView:OnClickPlayRuleBtn()
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', 'CashShopExplain'})
- end
- function UIREShopView:OnClickGiftPrice(button, params)
- local goodsData = params[0]
- self.controller:SetCurGoodsData(goodsData)
- self:OnClickBuyBtn()
- end
- function UIREShopView:OnClickBuyBtn()
- local errorCode, itemCfgId = self.controller:SendShopBuyItemReq()
- if errorCode ~= 0 then
- if errorCode == 391 then
- CommonUtil.ItemNotEnoughHandle(itemCfgId, Enum.UIPageName.UIShop)
- else
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
- end
- end
- if self.shopBuyTips1 then
- self.shopBuyTips1:Hide()
- end
- end
- function UIREShopView:ShowItemTips(button, params)
- ManagerContainer.LuaUIMgr:OpenTips(params[0])
- end
- function UIREShopView:OnShopDataChanged(shopId)
- local cfgData = self.controller:GetCurShopCfgData()
- if cfgData and cfgData.Id ~= shopId then return end
- self.controller:RefreshCurShopData()
- self:RefreshRedEnvelope()
- self:RefreshResourceBoxs()
- self:RefreshGoods()
- end
- function UIREShopView:OnOpenActivityRefresh(actIds)
- if not actIds then return end
- local changed = false
- for _, actId in pairs(actIds) do
- local activityItem = ManagerContainer.DataMgr.ActsDataMgr:GetActivityItemById(actId)
- if activityItem and activityItem.type == Enum.ActivityType.ACTIVITY_TYPE_SHOP then
- changed = true
- break
- end
- end
- if not changed then return end
- self.controller:InitData()
- self.controller:RefreshCurShopData(true)
- self:RefreshRedEnvelope()
- self:RefreshResourceBoxs()
- self:RefreshGoods()
- end
- function UIREShopView:OnActivityDataChange(actId)
- if not actId then return end
- local activityItem = ManagerContainer.DataMgr.ActsDataMgr:GetActivityItemById(actId)
- if not activityItem then return end
- if activityItem.type ~= Enum.ActivityType.ACTIVITY_TYPE_SHOP then
- return
- end
- self.controller:InitData()
- self.controller:RefreshCurShopData(true)
- self:RefreshRedEnvelope()
- self:RefreshResourceBoxs()
- self:RefreshGoods()
- end
- function UIREShopView:RemoveEventListener()
- ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
- end
- function UIREShopView:AddUIEventListener()
- self.shopBuyTips1:AddUIEventListener()
- self.shopGoldBuyTips:AddUIEventListener()
- self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnClickCloseBtn)
- self.uiBase:AddButtonEventListener(self.redEnvelope.btnSure.button, self, self.OnRedEnvelopeBtnClick)
- self.uiBase:AddButtonEventListener(self.btnInfo.button, self, self.OnClickPlayRuleBtn)
- end
- function UIREShopView:OnClickCloseBtn()
- ManagerContainer.LuaUIMgr:OpenSourceUI(self)
- end
- function UIREShopView:OnHide()
- end
- function UIREShopView:OnShow(data)
- if data then
- self.controller:SetData(data)
- end
- self.controller:InitData()
- self.controller:RefreshCurShopData(true)
- self:RefreshResourceBoxs()
- self:RefreshGoods()
- end
- function UIREShopView:OnClose()
- if self.shopBuyTips1 ~= nil then
- self.shopBuyTips1:Dispose()
- self.shopBuyTips1 = nil
- end
- if self.shopGoldBuyTips ~= nil then
- self.shopGoldBuyTips:Dispose()
- self.shopGoldBuyTips = nil
- end
- end
- function UIREShopView:OnDispose()
- self.goodsScrollView.loopGridView:Dispose()
- self:DisposeCurrencyItems()
- self.controller:OnDispose()
- end
- return UIREShopView
|