Initial version - 1.2.0.60
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
local MallShopCtrl = class("MallShopCtrl", BaseCtrl)
|
||||
MallShopCtrl._mapNodeConfig = {
|
||||
sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
cgSv = {
|
||||
sNodeName = "sv",
|
||||
sComponentName = "CanvasGroup"
|
||||
},
|
||||
tab = {},
|
||||
trTab = {sComponentName = "Transform"},
|
||||
svTab = {sComponentName = "ScrollRect"},
|
||||
goRefresh = {},
|
||||
txtRefreshCn = {sComponentName = "TMP_Text"},
|
||||
txtRefreshTime = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
MallShopCtrl._mapEventConfig = {MallOrderClear = "Refresh"}
|
||||
function MallShopCtrl:Refresh(bResetPos)
|
||||
if self._panel.nCurTog ~= AllEnum.MallToggle.Shop then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgSv, 0)
|
||||
local callback = function(tbList, nTime)
|
||||
self:RefreshData(tbList)
|
||||
self:RefreshTab()
|
||||
self:RefreshList(bResetPos)
|
||||
self:SetTimer(nTime)
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgSv, 1)
|
||||
end
|
||||
PlayerData.Mall:SendMallShopListReq(callback)
|
||||
end
|
||||
function MallShopCtrl:RefreshData(tbList)
|
||||
local tbPage = PlayerData.Mall:GetExchangeShop()
|
||||
local tbGoodsToPage = {}
|
||||
for _, v in pairs(tbList) do
|
||||
local mapCfg = ConfigTable.GetData("MallShop", v.sId)
|
||||
local nGroupId = mapCfg.GroupId
|
||||
if not tbGoodsToPage[nGroupId] then
|
||||
tbGoodsToPage[nGroupId] = {}
|
||||
end
|
||||
table.insert(tbGoodsToPage[nGroupId], v)
|
||||
end
|
||||
self.tbGoodsPage, self.tbPages = {}, {}
|
||||
for _, v in pairs(tbPage) do
|
||||
if tbGoodsToPage[v.Id] then
|
||||
table.insert(self.tbGoodsPage, tbGoodsToPage[v.Id])
|
||||
local mapSample = tbGoodsToPage[v.Id][1]
|
||||
table.insert(self.tbPages, {
|
||||
Id = v.Id,
|
||||
Name = v.Name,
|
||||
ShopCoin = v.ShopCoin,
|
||||
RefreshTime = mapSample.nNextRefreshTime
|
||||
})
|
||||
end
|
||||
end
|
||||
self.nPageCount = #self.tbPages
|
||||
if self._panel.nDefaultId then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self._panel.nDefaultId then
|
||||
self.nCurTab = k
|
||||
self._panel.nDefaultId = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not self.tbPages[self.nCurTab] or self.nSelectPage and self.tbPages[self.nCurTab].Id ~= self.nSelectPage then
|
||||
self.nCurTab = 1
|
||||
end
|
||||
self.nSelectPage = self.tbPages[self.nCurTab].Id
|
||||
end
|
||||
function MallShopCtrl:RefreshTab()
|
||||
self._mapNode.svTab.gameObject:SetActive(true)
|
||||
NovaAPI.SetScrollHorizontal(self._mapNode.svTab, self.nPageCount > 4)
|
||||
self.ctrlTab = {}
|
||||
delChildren(self._mapNode.trTab)
|
||||
for i = 1, self.nPageCount do
|
||||
local goTab = instantiate(self._mapNode.tab, self._mapNode.trTab)
|
||||
goTab:SetActive(true)
|
||||
local btn = goTab.transform:Find("btnTab"):GetComponent("UIButton")
|
||||
local func_Handler = ui_handler(self, self.OnBtnClick_ChangeSheet, goTab, i)
|
||||
btn.onClick:AddListener(func_Handler)
|
||||
self.ctrlTab[i] = self:BindCtrlByNode(goTab, "Game.UI.TemplateEx.TemplateTabCtrl")
|
||||
self.ctrlTab[i]:SetText(self.tbPages[i].Name)
|
||||
end
|
||||
for i = 1, self.nPageCount do
|
||||
local nState = self:GetTabState(i)
|
||||
self.ctrlTab[i]:SetSelect(i == self.nCurTab, nState)
|
||||
EventManager.Hit("MallChangeTopCoin", self.tbPages[self.nCurTab].ShopCoin)
|
||||
if i == self.nCurTab and 1 < i then
|
||||
self.ctrlTab[i - 1]:SetLine(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallShopCtrl:SetTimer(nTime)
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel(false)
|
||||
self.timer = nil
|
||||
end
|
||||
if 0 < nTime then
|
||||
self.timer = self:AddTimer(1, nTime, function()
|
||||
self:Refresh(true)
|
||||
EventManager.Hit(EventId.CloseMessageBox)
|
||||
EventManager.Hit("MallCloseDetail")
|
||||
end, true, true, false)
|
||||
end
|
||||
end
|
||||
function MallShopCtrl:GetTabState(nCurTab)
|
||||
local nState = 2
|
||||
if nCurTab == 1 then
|
||||
nState = 1
|
||||
elseif nCurTab == self.nPageCount then
|
||||
nState = 3
|
||||
end
|
||||
return nState
|
||||
end
|
||||
function MallShopCtrl:RefreshList(bResetPos)
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
local tbCur = self.tbGoodsPage[self.nCurTab]
|
||||
self._mapNode.sv:SetAnim(0.04)
|
||||
self._mapNode.sv:Init(#tbCur, self, self.OnGridRefresh, self.OnGridBtnClick, not bResetPos)
|
||||
local mapShop = self.tbPages[self.nCurTab]
|
||||
self.nRemainTime = mapShop.RefreshTime == 0 and 0 or mapShop.RefreshTime - CS.ClientManager.Instance.serverTimeStamp
|
||||
if self.timerCountDown == nil then
|
||||
self.timerCountDown = self:AddTimer(0, 1, "RefreshTime", false, true, false)
|
||||
end
|
||||
if self.nRemainTime > 0 then
|
||||
self._mapNode.goRefresh:SetActive(true)
|
||||
self:RefreshTime()
|
||||
self.timerCountDown:Pause(false)
|
||||
else
|
||||
self._mapNode.goRefresh:SetActive(false)
|
||||
self.timerCountDown:Pause(true)
|
||||
end
|
||||
end
|
||||
function MallShopCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapData = self.tbGoodsPage[self.nCurTab][nIndex]
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceID] then
|
||||
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Mall.MallShopItemCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceID]:Refresh(mapData)
|
||||
end
|
||||
function MallShopCtrl:OnGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapData = self.tbGoodsPage[self.nCurTab][nIndex]
|
||||
local mapCfg = ConfigTable.GetData("MallShop", mapData.sId)
|
||||
local tbCoin = mapCfg and {
|
||||
mapCfg.ExchangeItemId
|
||||
} or {}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.MallPopup, AllEnum.MallToggle.Shop, mapData, tbCoin)
|
||||
end
|
||||
function MallShopCtrl:RefreshTime()
|
||||
self._mapNode.goRefresh:SetActive(true)
|
||||
self.nRemainTime = self.nRemainTime - 1
|
||||
if self.nRemainTime > 0 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshCn, ConfigTable.GetUIText("Shop_NextRefresh"))
|
||||
local sTime = ""
|
||||
if self.nRemainTime <= 60 then
|
||||
local sec = math.floor(self.nRemainTime)
|
||||
sTime = orderedFormat(ConfigTable.GetUIText("Shop_NextRefresh_Sec") or "", sec)
|
||||
elseif self.nRemainTime > 60 and self.nRemainTime <= 3600 then
|
||||
local min = math.floor(self.nRemainTime / 60)
|
||||
local sec = math.floor(self.nRemainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTime = orderedFormat(ConfigTable.GetUIText("Shop_NextRefresh_Min") or "", min, sec)
|
||||
elseif self.nRemainTime > 3600 and self.nRemainTime <= 86400 then
|
||||
local hour = math.floor(self.nRemainTime / 3600)
|
||||
local min = math.floor((self.nRemainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTime = orderedFormat(ConfigTable.GetUIText("Shop_NextRefresh_Hour") or "", hour, min)
|
||||
elseif self.nRemainTime > 86400 then
|
||||
local day = math.floor(self.nRemainTime / 86400)
|
||||
local hour = math.floor((self.nRemainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTime = orderedFormat(ConfigTable.GetUIText("Shop_NextRefresh_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshTime, sTime)
|
||||
else
|
||||
self.timerCountDown:Pause(true)
|
||||
end
|
||||
end
|
||||
function MallShopCtrl:ResetTab()
|
||||
if not self.ctrlTab then
|
||||
return
|
||||
end
|
||||
if self.nCurTab and self.nCurTab > 1 then
|
||||
local nState = self:GetTabState(self.nCurTab)
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(false, nState)
|
||||
self.ctrlTab[self.nCurTab - 1]:SetLine(true)
|
||||
end
|
||||
self.nCurTab = 1
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(true, 1)
|
||||
end
|
||||
function MallShopCtrl:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
self._mapNode.svTab.gameObject:SetActive(false)
|
||||
self._mapNode.goRefresh:SetActive(false)
|
||||
end
|
||||
function MallShopCtrl:OnEnable()
|
||||
end
|
||||
function MallShopCtrl:OnDisable()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
if self.ctrlTab then
|
||||
for nTab, objCtrl in pairs(self.ctrlTab) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.ctrlTab[nTab] = nil
|
||||
end
|
||||
self.ctrlTab = nil
|
||||
end
|
||||
end
|
||||
function MallShopCtrl:OnDestroy()
|
||||
end
|
||||
function MallShopCtrl:OnBtnClick_ChangeSheet(btn, nIndex)
|
||||
if nIndex == self.nCurTab then
|
||||
return
|
||||
end
|
||||
local nState = self:GetTabState(self.nCurTab)
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(false, nState)
|
||||
if self.nCurTab > 1 then
|
||||
self.ctrlTab[self.nCurTab - 1]:SetLine(true)
|
||||
end
|
||||
nState = self:GetTabState(nIndex)
|
||||
self.ctrlTab[nIndex]:SetSelect(true, nState)
|
||||
if 1 < nIndex then
|
||||
self.ctrlTab[nIndex - 1]:SetLine(false)
|
||||
end
|
||||
self.nCurTab = nIndex
|
||||
self.nSelectPage = self.tbPages[self.nCurTab].Id
|
||||
EventManager.Hit("MallChangeTopCoin", self.tbPages[self.nCurTab].ShopCoin)
|
||||
self:RefreshList(true)
|
||||
end
|
||||
return MallShopCtrl
|
||||
Reference in New Issue
Block a user