Major Update - 2.0.0.143
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
local MallCheckInCtrl = class("MallCheckInCtrl", BaseCtrl)
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
local LocalData = require("GameCore.Data.LocalData")
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
MallCheckInCtrl._mapNodeConfig = {
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
txtDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Detail"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"},
|
||||
txtActivityTimeTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Activity_CheckIn_LeftTimeTitle"
|
||||
},
|
||||
txtActivityTimeDesc = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Activity_CheckIn_ReceiveTips"
|
||||
},
|
||||
goRewardItem = {
|
||||
nCount = 5,
|
||||
sCtrlName = "Game.UI.Mall.MallActivity._302001.MallCheckInItemCtrl"
|
||||
},
|
||||
btnRewardItem = {
|
||||
nCount = 5,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Item"
|
||||
},
|
||||
btnBuy = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Buy"
|
||||
},
|
||||
btnBuyDisable = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_BuyDisable"
|
||||
},
|
||||
txtBtnBuyDisable = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Activity_CheckIn_Btn_Done"
|
||||
},
|
||||
txtBtnBuy = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
MallCheckInCtrl._mapEventConfig = {}
|
||||
function MallCheckInCtrl:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
if self.remainTimer then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
end
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
|
||||
end
|
||||
function MallCheckInCtrl:RefreshRewardList()
|
||||
local actData = self.actData
|
||||
local tbRewardList = actData:GetActLoginRewardList()
|
||||
local nNextDay = actData:GetCanReceive() + 1
|
||||
local bPurchased = self.bPurchased
|
||||
for k, itemCtrl in ipairs(self._mapNode.goRewardItem) do
|
||||
local mapReward = tbRewardList[k]
|
||||
self._mapNode.btnRewardItem[k].gameObject:SetActive(mapReward ~= nil)
|
||||
if mapReward ~= nil then
|
||||
itemCtrl:SetRewardItem(k, mapReward, bPurchased, k == nNextDay)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallCheckInCtrl:RefreshDetail()
|
||||
local mapActCfg = self.actData:GetLoginRewardControlCfg()
|
||||
local bEmpty = mapActCfg.DesText == ""
|
||||
self._mapNode.btnDetail.gameObject:SetActive(not bEmpty)
|
||||
end
|
||||
function MallCheckInCtrl:RefreshBuy()
|
||||
self.mapProductCfg = PlayerData.Mall:GetMallActivityCfgByActId(self.nActId)
|
||||
local actData = self.actData
|
||||
local bActive = actData:GetActive() or self.mapProductCfg ~= nil and PlayerData.Mall:CheckMallActivityPurchased(self.mapProductCfg.Id)
|
||||
self.bPurchased = bActive
|
||||
if self.mapProductCfg == nil then
|
||||
self._mapNode.btnBuy.gameObject:SetActive(false)
|
||||
self._mapNode.btnBuyDisable.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self._mapNode.btnBuy.gameObject:SetActive(not bActive)
|
||||
self._mapNode.btnBuyDisable.gameObject:SetActive(bActive)
|
||||
if bActive then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnBuyDisable, ConfigTable.GetUIText("Mall_Package_SoldOut"))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnBuy, tostring(self.mapProductCfg.ShowPrice))
|
||||
end
|
||||
end
|
||||
function MallCheckInCtrl:CheckBuySucTip()
|
||||
local actData = self.actData
|
||||
if not self.bPurchased or actData:GetReceived() > 0 then
|
||||
return
|
||||
end
|
||||
local sKey = "Mall_CheckIn_BuySucTip_" .. self.nActId
|
||||
if LocalData.GetPlayerLocalData(sKey) then
|
||||
return
|
||||
end
|
||||
LocalData.SetPlayerLocalData(sKey, true)
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Mall_Activity_CheckIn_BuySuc"))
|
||||
end
|
||||
function MallCheckInCtrl:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self:RefreshBuy()
|
||||
self:RefreshRewardList()
|
||||
self:RefreshDetail()
|
||||
self:CheckBuySucTip()
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallCheckInCtrl:ReceiveReward()
|
||||
local callback = function()
|
||||
self:RefreshBuy()
|
||||
self:RefreshRewardList()
|
||||
end
|
||||
PlayerData.Activity:SendReceiveMallLoginRewardMsg(self.nActId, callback)
|
||||
end
|
||||
function MallCheckInCtrl:Awake()
|
||||
self.actData = nil
|
||||
self.mapProductCfg = nil
|
||||
self.bPurchased = false
|
||||
end
|
||||
function MallCheckInCtrl:OnEnable()
|
||||
end
|
||||
function MallCheckInCtrl:OnDisable()
|
||||
end
|
||||
function MallCheckInCtrl:OnDestroy()
|
||||
end
|
||||
function MallCheckInCtrl:OnBtnClick_Detail()
|
||||
local mapActCfg = self.actData:GetLoginRewardControlCfg()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = mapActCfg.DesText,
|
||||
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function MallCheckInCtrl:OnBtnClick_Item(btn, nIndex)
|
||||
local itemCtrl = self._mapNode.goRewardItem[nIndex]
|
||||
if itemCtrl == nil then
|
||||
return
|
||||
end
|
||||
if not self.actData:CheckCanReceive() or not itemCtrl:CheckCanReceive() then
|
||||
return
|
||||
end
|
||||
self:ReceiveReward()
|
||||
end
|
||||
function MallCheckInCtrl:OnBtnClick_Buy()
|
||||
local mapProductCfg = self.mapProductCfg
|
||||
if mapProductCfg == nil then
|
||||
return
|
||||
end
|
||||
if self.bPurchased then
|
||||
self:RefreshBuy()
|
||||
return
|
||||
end
|
||||
PlayerData.Mall:BuyMallActivity(mapProductCfg.Id, mapProductCfg.StatisticalGroup)
|
||||
end
|
||||
function MallCheckInCtrl:OnBtnClick_BuyDisable()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Shop_GoodsEmpty"))
|
||||
end
|
||||
return MallCheckInCtrl
|
||||
@@ -0,0 +1,190 @@
|
||||
local MallCheckInItemCtrl = class("MallCheckInItemCtrl", BaseCtrl)
|
||||
MallCheckInItemCtrl._mapNodeConfig = {
|
||||
imgCanReceiveBg = {},
|
||||
imgPlusReceiveBg = {},
|
||||
imgNormalBg = {},
|
||||
imgPlusBg = {},
|
||||
imgBgDb = {},
|
||||
imgPlusDb = {},
|
||||
txtDayNormal = {sComponentName = "TMP_Text"},
|
||||
txtDayPlus = {sComponentName = "TMP_Text"},
|
||||
btnItem = {nCount = 2, sComponentName = "UIButton"},
|
||||
goReceived = {},
|
||||
txtReceived = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Activity_CheckIn_Received"
|
||||
},
|
||||
imgCanReceive = {},
|
||||
txtCanReceive = {sComponentName = "TMP_Text"},
|
||||
txtPlusReceive = {sComponentName = "TMP_Text"},
|
||||
imgNextReceive = {},
|
||||
txtNextReceive = {sComponentName = "TMP_Text"},
|
||||
goParticle = {sNodeName = "UIParticle"}
|
||||
}
|
||||
MallCheckInItemCtrl._mapEventConfig = {}
|
||||
MallCheckInItemCtrl._mapRedDotConfig = {}
|
||||
local eState = {
|
||||
Received = 1,
|
||||
CanReceive = 2,
|
||||
NextDay = 3,
|
||||
Locked = 4
|
||||
}
|
||||
MallCheckInItemCtrl.eState = eState
|
||||
local mapStateText = {
|
||||
[eState.Received] = "Mall_Activity_CheckIn_Received",
|
||||
[eState.NextDay] = "Mall_Activity_CheckIn_NextReceive",
|
||||
[eState.Locked] = "Mall_Activity_CheckIn_Lock"
|
||||
}
|
||||
local _, colorNextReceiveRare = ColorUtility.TryParseHtmlString("#824D25")
|
||||
local _, colorNextReceiveNormal = ColorUtility.TryParseHtmlString("#E7F6F7")
|
||||
local GetState = function(mapReward, bActive, bNextDay)
|
||||
if not bActive then
|
||||
return eState.Locked
|
||||
end
|
||||
if mapReward.Status == 2 then
|
||||
return eState.Received
|
||||
end
|
||||
if mapReward.Status == 1 then
|
||||
return eState.CanReceive
|
||||
end
|
||||
if bNextDay then
|
||||
return eState.NextDay
|
||||
end
|
||||
return eState.Locked
|
||||
end
|
||||
local GetItemNode = function(btn)
|
||||
local trAnimRoot = btn.transform:Find("AnimRoot")
|
||||
if trAnimRoot == nil then
|
||||
return nil
|
||||
end
|
||||
local trIcon = trAnimRoot:Find("imgIcon")
|
||||
local trCount = trAnimRoot:Find("txtItemCount")
|
||||
if trIcon == nil or trCount == nil then
|
||||
return nil
|
||||
end
|
||||
return {
|
||||
imgIcon = trIcon:GetComponent("Image"),
|
||||
txtItemCount = trCount:GetComponent("TMP_Text")
|
||||
}
|
||||
end
|
||||
function MallCheckInItemCtrl:Awake()
|
||||
self.mapReward = nil
|
||||
self.nState = eState.Locked
|
||||
self.tbRewardList = nil
|
||||
self.tbHandler = nil
|
||||
self.tbItemNode = {}
|
||||
for k, btn in ipairs(self._mapNode.btnItem) do
|
||||
self.tbItemNode[k] = GetItemNode(btn)
|
||||
end
|
||||
end
|
||||
function MallCheckInItemCtrl:OnDisable()
|
||||
self:UnBindHandler()
|
||||
end
|
||||
function MallCheckInItemCtrl:BindHandler()
|
||||
self.tbHandler = {}
|
||||
for k, btn in ipairs(self._mapNode.btnItem) do
|
||||
self.tbHandler[k] = ui_handler(self, self.OnBtnClick_Item, btn, k)
|
||||
btn.onClick:AddListener(self.tbHandler[k])
|
||||
end
|
||||
end
|
||||
function MallCheckInItemCtrl:UnBindHandler()
|
||||
local tbHandler = self.tbHandler
|
||||
if tbHandler == nil then
|
||||
return
|
||||
end
|
||||
local tbBtn = self._mapNode.btnItem
|
||||
for k, handler in ipairs(tbHandler) do
|
||||
if tbBtn[k] ~= nil then
|
||||
tbBtn[k].onClick:RemoveListener(handler)
|
||||
end
|
||||
end
|
||||
self.tbHandler = nil
|
||||
end
|
||||
function MallCheckInItemCtrl:SetItemNode(nIndex, sIcon, nCount)
|
||||
local btn = self._mapNode.btnItem[nIndex]
|
||||
if btn == nil then
|
||||
return
|
||||
end
|
||||
local mapItemNode = self.tbItemNode[nIndex]
|
||||
btn.gameObject:SetActive(sIcon ~= nil and sIcon ~= "" and mapItemNode ~= nil)
|
||||
if mapItemNode == nil or sIcon == nil or sIcon == "" then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(mapItemNode.imgIcon, sIcon)
|
||||
NovaAPI.SetTMPText(mapItemNode.txtItemCount, orderedFormat(ConfigTable.GetUIText("LoginReward_Reward_Count"), nCount))
|
||||
end
|
||||
function MallCheckInItemCtrl:SetItemClickable(bClickable)
|
||||
for _, btn in ipairs(self._mapNode.btnItem) do
|
||||
NovaAPI.SetRaycastTarget(btn.gameObject, bClickable)
|
||||
end
|
||||
end
|
||||
function MallCheckInItemCtrl:RefreshItemNode(mapReward)
|
||||
local sSumIcon = mapReward.RewardIcon
|
||||
local bUseSum = #self.tbRewardList <= 1 and sSumIcon ~= nil and sSumIcon ~= ""
|
||||
for nIndex = 1, #self._mapNode.btnItem do
|
||||
if bUseSum then
|
||||
self:SetItemNode(nIndex, nIndex == 1 and sSumIcon or nil, mapReward.RewardCount)
|
||||
else
|
||||
local mapItem = self.tbRewardList[nIndex]
|
||||
local mapItemCfg = mapItem ~= nil and ConfigTable.GetData_Item(mapItem.nTid) or nil
|
||||
self:SetItemNode(nIndex, mapItemCfg ~= nil and mapItemCfg.Icon or nil, mapItem ~= nil and mapItem.nCount or 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallCheckInItemCtrl:SetRewardItem(nDay, mapReward, bActive, bNextDay)
|
||||
self.mapReward = mapReward
|
||||
local nState = GetState(mapReward, bActive, bNextDay)
|
||||
self.nState = nState
|
||||
local bRare = mapReward.DisRare
|
||||
local bCanReceive = nState == eState.CanReceive
|
||||
local bReceived = nState == eState.Received
|
||||
self._mapNode.imgNormalBg.gameObject:SetActive(not bRare)
|
||||
self._mapNode.imgPlusBg.gameObject:SetActive(bRare)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDayNormal, tostring(nDay))
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDayPlus, tostring(nDay))
|
||||
self._mapNode.imgCanReceiveBg.gameObject:SetActive(bCanReceive and not bRare)
|
||||
self._mapNode.imgPlusReceiveBg.gameObject:SetActive(bCanReceive and bRare)
|
||||
self._mapNode.imgBgDb.gameObject:SetActive(bCanReceive and not bRare)
|
||||
self._mapNode.imgPlusDb.gameObject:SetActive(bCanReceive and bRare)
|
||||
self._mapNode.imgCanReceive.gameObject:SetActive(bCanReceive)
|
||||
self._mapNode.txtCanReceive.gameObject:SetActive(bCanReceive and not bRare)
|
||||
self._mapNode.txtPlusReceive.gameObject:SetActive(bCanReceive and bRare)
|
||||
if bCanReceive then
|
||||
local sReceive = ConfigTable.GetUIText("Mall_Activity_CheckIn_Receive")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCanReceive, sReceive)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPlusReceive, sReceive)
|
||||
end
|
||||
self._mapNode.goReceived.gameObject:SetActive(bReceived)
|
||||
self._mapNode.imgNextReceive.gameObject:SetActive(not bCanReceive)
|
||||
if not bCanReceive then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNextReceive, ConfigTable.GetUIText(mapStateText[nState]))
|
||||
NovaAPI.SetTMPColor(self._mapNode.txtNextReceive, bRare and colorNextReceiveRare or colorNextReceiveNormal)
|
||||
end
|
||||
self._mapNode.goParticle.gameObject:SetActive(bRare and not bReceived)
|
||||
self.tbRewardList = {}
|
||||
for i = 1, 3 do
|
||||
local nTid = mapReward["RewardId" .. i]
|
||||
local nCount = mapReward["Qty" .. i]
|
||||
if nTid ~= 0 then
|
||||
table.insert(self.tbRewardList, {nTid = nTid, nCount = nCount})
|
||||
end
|
||||
end
|
||||
self:RefreshItemNode(mapReward)
|
||||
self:SetItemClickable(not bCanReceive)
|
||||
self:UnBindHandler()
|
||||
self:BindHandler()
|
||||
end
|
||||
function MallCheckInItemCtrl:GetState()
|
||||
return self.nState
|
||||
end
|
||||
function MallCheckInItemCtrl:CheckCanReceive()
|
||||
return self.nState == eState.CanReceive
|
||||
end
|
||||
function MallCheckInItemCtrl:OnBtnClick_Item(btn, nIndex)
|
||||
if self.tbRewardList == nil or next(self.tbRewardList) == nil then
|
||||
return
|
||||
end
|
||||
UTILS.ClickItemGridWithTips(self.tbRewardList[nIndex].nTid, btn.gameObject.transform, true, true, false)
|
||||
end
|
||||
return MallCheckInItemCtrl
|
||||
@@ -0,0 +1,115 @@
|
||||
local MallActivityCtrl = class("MallActivityCtrl", BaseCtrl)
|
||||
MallActivityCtrl._mapNodeConfig = {
|
||||
rtContent = {
|
||||
sNodeName = "--Content--",
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
MallActivityCtrl._mapEventConfig = {MallOrderClear = "Refresh"}
|
||||
local sPrefabFormat = "UI_Activity/%s.prefab"
|
||||
local sCtrlFormat = "Game.UI.Mall.MallActivity.%s"
|
||||
local GetActUICfg = function(actData)
|
||||
if actData:GetActType() == GameEnum.activityType.MallLogin then
|
||||
return actData:GetLoginRewardControlCfg()
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function MallActivityCtrl:CreateActivityCtrl(actData)
|
||||
local mapActCfg = GetActUICfg(actData)
|
||||
if mapActCfg == nil then
|
||||
printError(string.format("商城活动 %s (类型 %s) 缺少界面配置", tostring(actData:GetActId()), tostring(actData:GetActType())))
|
||||
return nil
|
||||
end
|
||||
local sPrefabPath = string.format(sPrefabFormat, mapActCfg.UIAssets)
|
||||
local goObj = self:CreatePrefabInstance(sPrefabPath, self._mapNode.rtContent)
|
||||
if goObj == nil then
|
||||
return nil
|
||||
end
|
||||
self.sPrefabPath = sPrefabPath
|
||||
local actCtrl = self:BindCtrlByNode(goObj, string.format(sCtrlFormat, mapActCfg.CtrlName))
|
||||
if actCtrl == nil then
|
||||
self:DestroyPrefabInstance(sPrefabPath)
|
||||
self.sPrefabPath = nil
|
||||
end
|
||||
return actCtrl
|
||||
end
|
||||
function MallActivityCtrl:SetExpireTimer(actData)
|
||||
if self.expireTimer ~= nil then
|
||||
self.expireTimer:Cancel(false)
|
||||
self.expireTimer = nil
|
||||
end
|
||||
if actData == nil or actData:GetActCfgData().EndType == GameEnum.activityEndType.NoLimit then
|
||||
return
|
||||
end
|
||||
local nRemainTime = actData:GetActEndTime() - CS.ClientManager.Instance.serverTimeStamp
|
||||
if nRemainTime <= 0 then
|
||||
return
|
||||
end
|
||||
self.expireTimer = self:AddTimer(1, nRemainTime + 1, function()
|
||||
self.expireTimer = nil
|
||||
EventManager.Hit("MallActivityExpire")
|
||||
end, true, true, false)
|
||||
end
|
||||
function MallActivityCtrl:ClearActivity()
|
||||
local actCtrl = self.actCtrl
|
||||
if actCtrl ~= nil then
|
||||
if actCtrl.ClearActivity ~= nil then
|
||||
actCtrl:ClearActivity()
|
||||
end
|
||||
self:UnbindCtrlByNode(actCtrl)
|
||||
self.actCtrl = nil
|
||||
end
|
||||
if self.sPrefabPath ~= nil then
|
||||
self:DestroyPrefabInstance(self.sPrefabPath)
|
||||
self.sPrefabPath = nil
|
||||
end
|
||||
self.nActId = nil
|
||||
end
|
||||
function MallActivityCtrl:Refresh()
|
||||
if self._panel.nCurTog ~= AllEnum.MallToggle.Activity then
|
||||
return
|
||||
end
|
||||
if PlayerData.Activity:GetMallActivityData() == nil then
|
||||
self:ClearActivity()
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
self:RefreshActivity()
|
||||
end
|
||||
PlayerData.Mall:SendMallActivityListReq(callback)
|
||||
end
|
||||
function MallActivityCtrl:RefreshActivity()
|
||||
if self._panel.nCurTog ~= AllEnum.MallToggle.Activity then
|
||||
return
|
||||
end
|
||||
local actData = PlayerData.Activity:GetMallActivityData()
|
||||
if actData == nil then
|
||||
self:ClearActivity()
|
||||
return
|
||||
end
|
||||
if self.nActId ~= nil and self.nActId ~= actData:GetActId() then
|
||||
self:ClearActivity()
|
||||
end
|
||||
local actCtrl = self.actCtrl
|
||||
if actCtrl == nil then
|
||||
actCtrl = self:CreateActivityCtrl(actData)
|
||||
if actCtrl == nil then
|
||||
return
|
||||
end
|
||||
self.actCtrl = actCtrl
|
||||
self.nActId = actData:GetActId()
|
||||
end
|
||||
actCtrl.gameObject:SetActive(true)
|
||||
actCtrl:InitActData(actData)
|
||||
end
|
||||
function MallActivityCtrl:Awake()
|
||||
self.expireTimer = nil
|
||||
end
|
||||
function MallActivityCtrl:OnEnable()
|
||||
end
|
||||
function MallActivityCtrl:OnDisable()
|
||||
self:ClearActivity()
|
||||
end
|
||||
function MallActivityCtrl:OnDestroy()
|
||||
end
|
||||
return MallActivityCtrl
|
||||
+118
-12
@@ -5,15 +5,20 @@ MallCtrl._mapNodeConfig = {
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
tog = {
|
||||
nCount = 6,
|
||||
nCount = 8,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ChangeSheet"
|
||||
},
|
||||
ctrlTog = {
|
||||
nCount = 6,
|
||||
nCount = 8,
|
||||
sNodeName = "tog",
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
|
||||
},
|
||||
srTog = {sComponentName = "ScrollRect"},
|
||||
scTog = {
|
||||
sNodeName = "srTog",
|
||||
sComponentName = "UIScrollToClick"
|
||||
},
|
||||
Recommend = {
|
||||
sNodeName = "---Recommend---",
|
||||
sCtrlName = "Game.UI.Mall.MallRecommendCtrl"
|
||||
@@ -38,6 +43,14 @@ MallCtrl._mapNodeConfig = {
|
||||
sNodeName = "---Skin---",
|
||||
sCtrlName = "Game.UI.Mall.MallSkinCtrl"
|
||||
},
|
||||
Furniture = {
|
||||
sNodeName = "---Furniture---",
|
||||
sCtrlName = "Game.UI.Mall.MallFurnitureCtrl"
|
||||
},
|
||||
Activity = {
|
||||
sNodeName = "---Activity---",
|
||||
sCtrlName = "Game.UI.Mall.MallActivityCtrl"
|
||||
},
|
||||
btnCharShard = {
|
||||
sNodeName = "btnCharShard",
|
||||
sComponentName = "UIButton",
|
||||
@@ -47,8 +60,8 @@ MallCtrl._mapNodeConfig = {
|
||||
sNodeName = "---MonthlyCard---",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
redDotTog = {nCount = 4},
|
||||
redDot_New = {nCount = 6},
|
||||
redDotTog = {nCount = 8},
|
||||
redDot_New = {nCount = 8},
|
||||
btnDailyGift = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_DailyGift"
|
||||
@@ -69,7 +82,9 @@ MallCtrl._mapEventConfig = {
|
||||
OpenMallTog = "OnEvent_OpenMallTog",
|
||||
MallChangeTopCoin = "OnEvent_ChangeTopCoin",
|
||||
Mall_Refresh_Reddot = "OnEvent_RefreshReddot",
|
||||
Mall_UpdateMallPackageRedDot = "OnEvent_RefreshReddot"
|
||||
Mall_UpdateMallPackageRedDot = "OnEvent_RefreshReddot",
|
||||
MallActivityChange = "OnEvent_MallActivityChange",
|
||||
MallActivityExpire = "OnEvent_MallActivityExpire"
|
||||
}
|
||||
MallCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.Mall_Daily] = {sNodeName = "reddotGift"}
|
||||
@@ -78,6 +93,15 @@ function MallCtrl:RegisterRedDot()
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Page_New, {
|
||||
AllEnum.MallToggle.Skin
|
||||
}, self._mapNode.redDot_New[5])
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Page_New, {
|
||||
AllEnum.MallToggle.Furniture
|
||||
}, self._mapNode.redDot_New[7])
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Page, {
|
||||
AllEnum.MallToggle.Activity
|
||||
}, self._mapNode.redDotTog[8])
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Page_New, {
|
||||
AllEnum.MallToggle.Activity
|
||||
}, self._mapNode.redDot_New[8], nil, true)
|
||||
end
|
||||
function MallCtrl:SwitchTog()
|
||||
self._mapNode.Gem.gameObject:SetActive(self._panel.nCurTog == AllEnum.MallToggle.Gem)
|
||||
@@ -86,6 +110,8 @@ function MallCtrl:SwitchTog()
|
||||
self._mapNode.Shop.gameObject:SetActive(self._panel.nCurTog == AllEnum.MallToggle.Shop)
|
||||
self._mapNode.Skin.gameObject:SetActive(self._panel.nCurTog == AllEnum.MallToggle.Skin)
|
||||
self._mapNode.Recommend.gameObject:SetActive(self._panel.nCurTog == AllEnum.MallToggle.Recommend)
|
||||
self._mapNode.Furniture.gameObject:SetActive(self._panel.nCurTog == AllEnum.MallToggle.Furniture)
|
||||
self._mapNode.Activity.gameObject:SetActive(self._panel.nCurTog == AllEnum.MallToggle.Activity)
|
||||
if self._panel.nCurTog == AllEnum.MallToggle.Gem then
|
||||
self._mapNode.Gem:Refresh()
|
||||
self._mapNode.TopBar:CreateCoin({
|
||||
@@ -113,28 +139,84 @@ function MallCtrl:SwitchTog()
|
||||
self._mapNode.TopBar:CreateCoin({
|
||||
AllEnum.CoinItemId.FREESTONE
|
||||
})
|
||||
elseif self._panel.nCurTog == AllEnum.MallToggle.Furniture then
|
||||
self._mapNode.Furniture:ResetTab()
|
||||
self._mapNode.Furniture:Refresh(true)
|
||||
self._mapNode.TopBar:CreateCoin({
|
||||
AllEnum.CoinItemId.Jade,
|
||||
AllEnum.CoinItemId.FREESTONE,
|
||||
AllEnum.CoinItemId.Furniture
|
||||
})
|
||||
elseif self._panel.nCurTog == AllEnum.MallToggle.Recommend then
|
||||
self._mapNode.Recommend:Refresh()
|
||||
self._mapNode.TopBar:CreateCoin({
|
||||
AllEnum.CoinItemId.Jade,
|
||||
AllEnum.CoinItemId.FREESTONE
|
||||
})
|
||||
elseif self._panel.nCurTog == AllEnum.MallToggle.Activity then
|
||||
self._mapNode.Activity:Refresh()
|
||||
self._mapNode.TopBar:CreateCoin({
|
||||
AllEnum.CoinItemId.Jade,
|
||||
AllEnum.CoinItemId.FREESTONE
|
||||
})
|
||||
end
|
||||
self:RegisterRedDot()
|
||||
self:OnEvent_RefreshReddot()
|
||||
end
|
||||
function MallCtrl:RefreshActivityTogText(actData)
|
||||
local sName
|
||||
if actData ~= nil then
|
||||
local mapProductCfg = PlayerData.Mall:GetMallActivityCfgByActId(actData:GetActId())
|
||||
sName = mapProductCfg ~= nil and mapProductCfg.Name or nil
|
||||
end
|
||||
if sName == nil or sName == "" then
|
||||
sName = ConfigTable.GetUIText("Mall_Tog_Package")
|
||||
end
|
||||
local tbCtrlTog = self._mapNode.ctrlTog
|
||||
tbCtrlTog[AllEnum.MallToggle.Activity]:SetText(sName)
|
||||
end
|
||||
function MallCtrl:RefreshActivityTog()
|
||||
local actData = PlayerData.Activity:GetMallActivityData()
|
||||
self.bHasActivity = actData ~= nil
|
||||
self._mapNode.tog[AllEnum.MallToggle.Activity].gameObject:SetActive(self.bHasActivity)
|
||||
self:RefreshActivityTogText(actData)
|
||||
self._mapNode.Activity:SetExpireTimer(actData)
|
||||
PlayerData.Mall:UpdateMallActivityRedDot()
|
||||
if not self.bHasActivity and self._panel.nCurTog == AllEnum.MallToggle.Activity then
|
||||
self._panel.nCurTog = AllEnum.MallToggle.Recommend
|
||||
end
|
||||
end
|
||||
function MallCtrl:ApplyActivityTogChange()
|
||||
local nLastTog = self._panel.nCurTog
|
||||
self:RefreshActivityTog()
|
||||
if nLastTog ~= self._panel.nCurTog then
|
||||
for i = 1, 8 do
|
||||
self._mapNode.ctrlTog[i]:SetDefault(i == self._panel.nCurTog)
|
||||
end
|
||||
self._mapNode.scTog:ScrollToClick(self._mapNode.tog[self._panel.nCurTog].gameObject)
|
||||
self:SwitchTog()
|
||||
self:PlayTogAni()
|
||||
elseif self._panel.nCurTog == AllEnum.MallToggle.Activity then
|
||||
self._mapNode.Activity:Refresh()
|
||||
end
|
||||
end
|
||||
function MallCtrl:PlayTogAni()
|
||||
if self._panel.nCurTog == AllEnum.MallToggle.MonthlyCard then
|
||||
self._mapNode.aniMonthlyCard:Play("MonthlyCard_in")
|
||||
end
|
||||
end
|
||||
function MallCtrl:SetDefaultTog()
|
||||
if self._panel.nCurTog == nil then
|
||||
self._panel.nCurTog = AllEnum.MallToggle.Recommend
|
||||
self:RefreshActivityTog()
|
||||
local nCurTog = self._panel.nCurTog
|
||||
if nCurTog == nil then
|
||||
self._panel.nCurTog = self.bHasActivity and AllEnum.MallToggle.Activity or AllEnum.MallToggle.Recommend
|
||||
end
|
||||
for i = 1, 6 do
|
||||
for i = 1, 8 do
|
||||
self._mapNode.ctrlTog[i]:SetDefault(i == self._panel.nCurTog)
|
||||
end
|
||||
if self._panel.nCurTog == AllEnum.MallToggle.Gem or self._panel.nCurTog == AllEnum.MallToggle.Shop then
|
||||
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.srTog, 0)
|
||||
end
|
||||
self:SwitchTog()
|
||||
local bActive = PlayerData.Mall:GetDailyMallReward()
|
||||
self._mapNode.goGiftOff:SetActive(not bActive)
|
||||
@@ -147,6 +229,8 @@ function MallCtrl:RefreshTogText()
|
||||
self._mapNode.ctrlTog[4]:SetText(ConfigTable.GetUIText("Mall_Tog_Exchange"))
|
||||
self._mapNode.ctrlTog[5]:SetText(ConfigTable.GetUIText("Mall_Tog_Skin"))
|
||||
self._mapNode.ctrlTog[6]:SetText(ConfigTable.GetUIText("Mall_Tog_Recommend"))
|
||||
self._mapNode.ctrlTog[7]:SetText(ConfigTable.GetUIText("Mall_Tog_Furniture"))
|
||||
self:RefreshActivityTogText(PlayerData.Activity:GetMallActivityData())
|
||||
end
|
||||
function MallCtrl:FadeIn(bPlayFadeIn)
|
||||
EventManager.Hit(EventId.SetTransition)
|
||||
@@ -171,13 +255,19 @@ function MallCtrl:OnBtnClick_ChangeSheet(btn, nIndex)
|
||||
self._mapNode.ctrlTog[self._panel.nCurTog]:SetTrigger(false)
|
||||
local lastTog = self._panel.nCurTog
|
||||
if lastTog == AllEnum.MallToggle.Package then
|
||||
local nCurTab = self._mapNode.Package:GetCurTab() or 1
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Package, nCurTab)
|
||||
local nCurSort = self._mapNode.Package:GetCurSort()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Package, nCurSort)
|
||||
elseif lastTog == AllEnum.MallToggle.Skin then
|
||||
local nCurTab = self._mapNode.Skin:GetCurTab() or 1
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Skin, nCurTab)
|
||||
local nCurSort = self._mapNode.Skin:GetCurSort()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Skin, nCurSort)
|
||||
elseif lastTog == AllEnum.MallToggle.Furniture then
|
||||
local nCurSort = self._mapNode.Furniture:GetCurSort()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Furniture, nCurSort)
|
||||
elseif lastTog == AllEnum.MallToggle.Activity then
|
||||
PlayerData.Mall:RemoveMallActivityNew()
|
||||
end
|
||||
self._panel.nCurTog = nIndex
|
||||
self._mapNode.scTog:ScrollToClick(self._mapNode.tog[self._panel.nCurTog].gameObject)
|
||||
self:SwitchTog()
|
||||
self:PlayTogAni()
|
||||
end
|
||||
@@ -201,8 +291,17 @@ function MallCtrl:OnEvent_ChangeTopCoin(tbCoin)
|
||||
self._mapNode.TopBar:CreateCoin(tbCoin)
|
||||
end
|
||||
function MallCtrl:OnEvent_OpenMallTog(nTog)
|
||||
if nTog == AllEnum.MallToggle.Activity and not self.bHasActivity then
|
||||
return
|
||||
end
|
||||
self:OnBtnClick_ChangeSheet(nil, nTog)
|
||||
end
|
||||
function MallCtrl:OnEvent_MallActivityChange()
|
||||
self:ApplyActivityTogChange()
|
||||
end
|
||||
function MallCtrl:OnEvent_MallActivityExpire()
|
||||
self:ApplyActivityTogChange()
|
||||
end
|
||||
function MallCtrl:OnEvent_RefreshReddot()
|
||||
local bMallFree = RedDotManager.GetValid(RedDotDefine.Mall_Free)
|
||||
if bMallFree then
|
||||
@@ -218,5 +317,12 @@ function MallCtrl:OnEvent_RefreshReddot()
|
||||
else
|
||||
self._mapNode.redDot_New[2]:SetActive(false)
|
||||
end
|
||||
local bActivity = RedDotManager.GetValid(RedDotDefine.Mall_Page, {
|
||||
AllEnum.MallToggle.Activity
|
||||
})
|
||||
local bActivityNew = RedDotManager.GetValid(RedDotDefine.Mall_Page_New, {
|
||||
AllEnum.MallToggle.Activity
|
||||
})
|
||||
self._mapNode.redDot_New[8]:SetActive(bActivityNew and not bActivity)
|
||||
end
|
||||
return MallCtrl
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
local MallFurnitureCtrl = class("MallFurnitureCtrl", BaseCtrl)
|
||||
MallFurnitureCtrl._mapNodeConfig = {
|
||||
sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
cgSv = {
|
||||
sNodeName = "sv",
|
||||
sComponentName = "CanvasGroup"
|
||||
},
|
||||
tab = {},
|
||||
trTab = {sComponentName = "Transform"},
|
||||
svTab = {sComponentName = "ScrollRect"},
|
||||
goEmpty = {},
|
||||
txtFurnitureEmpty = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Furniture_Empty"
|
||||
}
|
||||
}
|
||||
MallFurnitureCtrl._mapEventConfig = {MallOrderClear = "Refresh"}
|
||||
function MallFurnitureCtrl:Refresh(bResetPos)
|
||||
if self._panel.nCurTog ~= AllEnum.MallToggle.Furniture 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:SendMallPackageListReq(callback)
|
||||
end
|
||||
function MallFurnitureCtrl:RefreshData(tbList)
|
||||
local tbPage = PlayerData.Mall:GetPackagePage(GameEnum.MallItemType.Furniture)
|
||||
local tbAllList = {}
|
||||
local tbPackageToPage = {}
|
||||
for _, v in pairs(tbList) do
|
||||
local mapCfg = ConfigTable.GetData("MallPackage", v.sId)
|
||||
if mapCfg.Tag == GameEnum.MallItemType.Furniture then
|
||||
local nGroupId = mapCfg.GroupId
|
||||
if not tbPackageToPage[nGroupId] then
|
||||
tbPackageToPage[nGroupId] = {}
|
||||
end
|
||||
table.insert(tbPackageToPage[nGroupId], v)
|
||||
table.insert(tbAllList, v)
|
||||
end
|
||||
end
|
||||
self.tbPackagePage, self.tbPages = {}, {}
|
||||
table.insert(self.tbPackagePage, tbAllList)
|
||||
self.tbPages[1] = {
|
||||
Id = 0,
|
||||
Name = ConfigTable.GetUIText("Mall_Package_TabAll"),
|
||||
Sort = 0
|
||||
}
|
||||
for _, v in pairs(tbPage) do
|
||||
if tbPackageToPage[v.Id] then
|
||||
table.insert(self.tbPackagePage, tbPackageToPage[v.Id])
|
||||
table.insert(self.tbPages, v)
|
||||
end
|
||||
end
|
||||
self.nPageCount = #self.tbPages
|
||||
local nTab
|
||||
if self._panel.nDefaultId then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self._panel.nDefaultId then
|
||||
nTab = k
|
||||
self._panel.nDefaultId = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if nTab == nil and self.nSelectPage then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self.nSelectPage then
|
||||
nTab = k
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self.nCurTab = nTab or 1
|
||||
self.nSelectPage = self.tbPages[self.nCurTab].Id
|
||||
end
|
||||
function MallFurnitureCtrl:RefreshList(bResetPos)
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbCurList = self.tbPackagePage[self.nCurTab] or {}
|
||||
if #self.tbCurList == 0 then
|
||||
self._mapNode.goEmpty.gameObject:SetActive(true)
|
||||
self._mapNode.sv.gameObject:SetActive(false)
|
||||
self._mapNode.svTab.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goEmpty.gameObject:SetActive(false)
|
||||
self._mapNode.sv.gameObject:SetActive(true)
|
||||
self._mapNode.svTab.gameObject:SetActive(true)
|
||||
self._mapNode.sv:SetAnim(0.04)
|
||||
self._mapNode.sv:Init(#self.tbCurList, self, self.OnGridRefresh, self.OnGridBtnClick, not bResetPos)
|
||||
end
|
||||
end
|
||||
function MallFurnitureCtrl:RefreshTab()
|
||||
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")
|
||||
local goTabNew = goTab.transform:Find("btnTab/AnimRoot/redDot_New").gameObject
|
||||
if i == 1 then
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Page_New, {
|
||||
AllEnum.MallToggle.Furniture
|
||||
}, goTabNew)
|
||||
else
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Tab_New, {
|
||||
AllEnum.MallToggle.Furniture,
|
||||
self.tbPages[i].Sort
|
||||
}, goTabNew)
|
||||
end
|
||||
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)
|
||||
if i == self.nCurTab and 1 < i then
|
||||
self.ctrlTab[i - 1]:SetLine(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallFurnitureCtrl: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("MallCloseDetail")
|
||||
end, true, true, false)
|
||||
end
|
||||
end
|
||||
function MallFurnitureCtrl:GetTabState(nCurTab)
|
||||
local nState = 2
|
||||
if nCurTab == 1 then
|
||||
nState = 1
|
||||
elseif nCurTab == self.nPageCount then
|
||||
nState = 3
|
||||
end
|
||||
return nState
|
||||
end
|
||||
function MallFurnitureCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapData = self.tbPackagePage[self.nCurTab][nIndex]
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceID] then
|
||||
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Mall.MallFurnitureItemCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceID]:Refresh(mapData)
|
||||
end
|
||||
function MallFurnitureCtrl:OnGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapData = self.tbPackagePage[self.nCurTab][nIndex]
|
||||
if not mapData then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.MallPopup, AllEnum.MallToggle.Furniture, mapData, {
|
||||
AllEnum.CoinItemId.Furniture
|
||||
})
|
||||
end
|
||||
function MallFurnitureCtrl: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)
|
||||
self.nSelectPage = self.tbPages[self.nCurTab] and self.tbPages[self.nCurTab].Id or nil
|
||||
end
|
||||
function MallFurnitureCtrl:GetCurSort()
|
||||
if not self.tbPages or not self.tbPages[self.nCurTab] then
|
||||
return 0
|
||||
end
|
||||
return self.tbPages[self.nCurTab].Sort
|
||||
end
|
||||
function MallFurnitureCtrl:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
self._mapNode.goEmpty.gameObject:SetActive(false)
|
||||
self._mapNode.sv.gameObject:SetActive(false)
|
||||
self._mapNode.svTab.gameObject:SetActive(false)
|
||||
end
|
||||
function MallFurnitureCtrl:OnEnable()
|
||||
end
|
||||
function MallFurnitureCtrl: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 MallFurnitureCtrl:OnDestroy()
|
||||
end
|
||||
function MallFurnitureCtrl:OnBtnClick_ChangeSheet(btn, nIndex)
|
||||
if nIndex == self.nCurTab then
|
||||
return
|
||||
end
|
||||
local nSort = self:GetCurSort()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Furniture, nSort)
|
||||
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
|
||||
self:RefreshList(true)
|
||||
end
|
||||
return MallFurnitureCtrl
|
||||
@@ -0,0 +1,329 @@
|
||||
local MallFurnitureDetailCtrl = class("MallFurnitureDetailCtrl", BaseCtrl)
|
||||
MallFurnitureDetailCtrl._mapNodeConfig = {
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Shop_TitleBuy"
|
||||
},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
goCurrency = {},
|
||||
imgCurrency = {sComponentName = "Image"},
|
||||
txtPrice = {sComponentName = "TMP_Text"},
|
||||
txtPriceCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_PriceTitle"
|
||||
},
|
||||
goFurniture = {},
|
||||
txtFurnitureValue = {sComponentName = "TMP_Text"},
|
||||
svFurniture = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
snapFurniture = {
|
||||
sNodeName = "svFurniture",
|
||||
sComponentName = "LoopScrollSnap",
|
||||
callback = "OnGridSelect_Icon"
|
||||
},
|
||||
imgPoint = {nCount = 4},
|
||||
goTime = {},
|
||||
txtLimit = {sComponentName = "TMP_Text"},
|
||||
txtLimitCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_LimitTitle"
|
||||
},
|
||||
txtTime = {sComponentName = "TMP_Text"},
|
||||
txtTimeCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_TimeTitle"
|
||||
},
|
||||
txtTitleDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_Detail"
|
||||
},
|
||||
btnBuy1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Buy"
|
||||
},
|
||||
btnBuy2 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Disable"
|
||||
},
|
||||
btnAll = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_All"
|
||||
},
|
||||
txtBtnBuy = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Btn_Buy"
|
||||
},
|
||||
txtBtnAll = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Btn_All"
|
||||
},
|
||||
goShow = {
|
||||
nCount = 5,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnShow = {
|
||||
nCount = 5,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Tips"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
txtDisable = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
MallFurnitureDetailCtrl._mapEventConfig = {}
|
||||
function MallFurnitureDetailCtrl:Refresh(mapData)
|
||||
self.sId = mapData.sId
|
||||
local mapCfg = ConfigTable.GetData("MallPackage", mapData.sId)
|
||||
self:PlayInAni()
|
||||
self:RefreshInfo(mapCfg)
|
||||
self:RefreshPrice(mapCfg)
|
||||
self:RefreshLimit(mapCfg, mapData)
|
||||
self:RefreshTime(mapData)
|
||||
self:RefreshFurnitureValue(mapCfg)
|
||||
self:RefreshItem(mapCfg)
|
||||
self:RefreshBuy(mapCfg, mapData)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshInfo(mapCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapCfg.DetailName)
|
||||
self:RefreshDetailIcon(mapCfg)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshDetailIcon(mapCfg)
|
||||
self.tbIcon = {}
|
||||
table.insert(self.tbIcon, mapCfg.Icon)
|
||||
self.nIconCount = #self.tbIcon
|
||||
self.nIconIndex = 1
|
||||
self.bFurnitureIcon = PlayerData.Mall:IsFurnitureGroup(mapCfg.GroupId)
|
||||
self._mapNode.svFurniture:Init(self.nIconCount, self, self.OnIconGridRefresh)
|
||||
self._mapNode.svFurniture:SetScrollGridPos(self.nIconIndex - 1, 0)
|
||||
self:RefreshIconDot()
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnIconGridRefresh(goGrid, gridIndex)
|
||||
local sIcon = self.tbIcon[gridIndex + 1]
|
||||
local trIcon = goGrid.transform:Find("imgDetailIcon")
|
||||
if trIcon == nil or sIcon == nil or sIcon == "" then
|
||||
return
|
||||
end
|
||||
local img = trIcon:GetComponent("Image")
|
||||
self:SetPngSprite(img, sIcon)
|
||||
NovaAPI.SetImageNativeSize(img)
|
||||
img.transform.localScale = self.bFurnitureIcon and Vector3(1.1, 1.1, 1) or Vector3.one
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshIconDot()
|
||||
for i = 1, 4 do
|
||||
self._mapNode.imgPoint[i]:SetActive(i == self.nIconIndex)
|
||||
end
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshPrice(mapCfg)
|
||||
if mapCfg.CurrencyType == GameEnum.currencyType.Cash then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, tostring(mapCfg.CurrencyShowPrice))
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Item then
|
||||
self._mapNode.goCurrency:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, mapCfg.CurrencyItemQty)
|
||||
self:SetPngSprite(self._mapNode.imgCurrency, ConfigTable.GetData_Item(mapCfg.CurrencyItemId).Icon2)
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Free then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, ConfigTable.GetUIText("Mall_Package_Free"))
|
||||
end
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshLimit(mapCfg, mapData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, mapData.nCurStock .. "/" .. mapCfg.Stock)
|
||||
if mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_LimitTitle"))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Day then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_DayLimitTitle"))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Week then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_WeekLimitTitle"))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Month then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_MonthLimitTitle"))
|
||||
end
|
||||
end
|
||||
function MallFurnitureDetailCtrl:GetTimeStr(nRemainTime)
|
||||
local str = ""
|
||||
if nRemainTime <= 3600 then
|
||||
str = ConfigTable.GetUIText("Mall_Package_WithinHour")
|
||||
elseif 3600 < nRemainTime and nRemainTime <= 86400 then
|
||||
str = orderedFormat(ConfigTable.GetUIText("Mall_Package_Hour") or "", math.floor(nRemainTime / 3600))
|
||||
elseif 86400 < nRemainTime then
|
||||
str = orderedFormat(ConfigTable.GetUIText("Mall_Package_Day") or "", math.floor(nRemainTime / 86400))
|
||||
end
|
||||
return str
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshTime(mapData)
|
||||
self._mapNode.goTime:SetActive(mapData.nNextRefreshTime > 0)
|
||||
if mapData.nNextRefreshTime <= 0 then
|
||||
return
|
||||
end
|
||||
local sSuffix = mapData.bPrioritizeDeList and ConfigTable.GetUIText("Mall_Package_Delist") or ConfigTable.GetUIText("Mall_Package_Refresh")
|
||||
local sPrefix = self:GetTimeStr(mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sPrefix .. sSuffix)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshFurnitureValue(mapCfg)
|
||||
if self._mapNode.goFurniture == nil then
|
||||
return
|
||||
end
|
||||
local bShow = PlayerData.Mall:IsFurnitureGroup(mapCfg.GroupId)
|
||||
self._mapNode.goFurniture:SetActive(bShow)
|
||||
if not bShow then
|
||||
return
|
||||
end
|
||||
local nValue = PlayerData.Mall:GetPackageCollectionValue(mapCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtFurnitureValue, tostring(nValue))
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshItem(mapCfg)
|
||||
local tbItem = decodeJson(mapCfg.Items)
|
||||
self.tbShow = {}
|
||||
for k, v in pairs(tbItem) do
|
||||
local nId = tonumber(k)
|
||||
table.insert(self.tbShow, {
|
||||
nId = nId,
|
||||
nCount = v,
|
||||
nRarity = ConfigTable.GetData_Item(nId).Rarity
|
||||
})
|
||||
end
|
||||
table.sort(self.tbShow, function(a, b)
|
||||
if a.nRarity ~= b.nRarity then
|
||||
return a.nRarity < b.nRarity
|
||||
else
|
||||
return a.nId < b.nId
|
||||
end
|
||||
end)
|
||||
local nItemCount = #self.tbShow
|
||||
self._mapNode.btnAll.gameObject:SetActive(5 < nItemCount)
|
||||
for i = 1, 5 do
|
||||
if i <= nItemCount then
|
||||
self._mapNode.goShow[i]:SetItem(self.tbShow[i].nId, nil, self.tbShow[i].nCount, nil, nil, nil, nil, true)
|
||||
else
|
||||
self._mapNode.goShow[i]:SetItem()
|
||||
end
|
||||
self._mapNode.btnShow[i].interactable = i <= nItemCount
|
||||
end
|
||||
end
|
||||
function MallFurnitureDetailCtrl:RefreshBuy(mapCfg, mapData)
|
||||
local tbCond = decodeJson(mapCfg.OrderCondParams)
|
||||
local bPurchaseAble = PlayerData.Shop:CheckShopCond(mapCfg.OrderCondType, tbCond)
|
||||
local bAble = bPurchaseAble and mapData.nCurStock > 0
|
||||
self._mapNode.btnBuy1.gameObject:SetActive(bAble)
|
||||
self._mapNode.btnBuy2.gameObject:SetActive(not bAble)
|
||||
self._mapNode.txtDisable.gameObject:SetActive(not bAble)
|
||||
local sDisable
|
||||
if not bPurchaseAble then
|
||||
if mapCfg.OrderCondType == GameEnum.shopCond.WorldClassSpecific then
|
||||
sDisable = orderedFormat(ConfigTable.GetUIText("Shop_Cond_WorldClassShort") or "", tbCond[1])
|
||||
end
|
||||
self.sDisableTip = ConfigTable.GetUIText("Shop_Condition")
|
||||
elseif mapData.nCurStock == 0 then
|
||||
sDisable = ConfigTable.GetUIText("Shop_Cond_SoldOutShort")
|
||||
self.sDisableTip = ConfigTable.GetUIText("Shop_GoodsEmpty")
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDisable, sDisable)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:PlayInAni()
|
||||
self.gameObject:SetActive(true)
|
||||
self.ani:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:PlayOutAni()
|
||||
self.ani:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, "Close", true, true, true)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:Close()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:Awake()
|
||||
self.ani = self.gameObject.transform:GetComponent("Animator")
|
||||
self.nIconIndex = 1
|
||||
self.nIconCount = 0
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnEnable()
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnDisable()
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnDestroy()
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnBtnClick_Buy()
|
||||
local mapCfg = ConfigTable.GetData("MallPackage", self.sId)
|
||||
if not mapCfg then
|
||||
return
|
||||
end
|
||||
local nCurrencyType = mapCfg.CurrencyType
|
||||
if nCurrencyType == GameEnum.currencyType.Cash then
|
||||
PlayerData.Mall:BuyPackage(self.sId, mapCfg.StatisticalGroup)
|
||||
else
|
||||
local bShowConfirm = false
|
||||
if nCurrencyType == GameEnum.currencyType.Item then
|
||||
local nHas = 0
|
||||
if mapCfg.CurrencyItemId == AllEnum.CoinItemId.FREESTONE or mapCfg.CurrencyItemId == AllEnum.CoinItemId.STONE then
|
||||
bShowConfirm = true
|
||||
nHas = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.FREESTONE) + PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE)
|
||||
else
|
||||
nHas = PlayerData.Coin:GetCoinCount(mapCfg.CurrencyItemId)
|
||||
end
|
||||
if nHas < mapCfg.CurrencyItemQty then
|
||||
local funcOpenBuyGem = function()
|
||||
EventManager.Hit("MallCloseDetail")
|
||||
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.Gem)
|
||||
end
|
||||
if mapCfg.CurrencyItemId == AllEnum.CoinItemId.FREESTONE or mapCfg.CurrencyItemId == AllEnum.CoinItemId.STONE then
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE).Id),
|
||||
callbackConfirm = funcOpenBuyGem,
|
||||
bBlur = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
elseif mapCfg.CurrencyItemId == AllEnum.CoinItemId.Furniture then
|
||||
PlayerData.Coin:ExchangeFurnitureCoin(mapCfg.CurrencyItemQty, funcOpenBuyGem)
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
if bShowConfirm then
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = orderedFormat(ConfigTable.GetUIText("Mall_Package_Buy_Confirm") or "", mapCfg.CurrencyItemQty, mapCfg.CurrencyItemId, mapCfg.DetailName),
|
||||
callbackConfirm = function()
|
||||
PlayerData.Mall:SendMallPackageOrderReq(self.sId)
|
||||
end,
|
||||
bBlur = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
else
|
||||
PlayerData.Mall:SendMallPackageOrderReq(self.sId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnBtnClick_Disable()
|
||||
EventManager.Hit(EventId.OpenMessageBox, self.sDisableTip)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnBtnClick_All()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.ItemList,
|
||||
tbItem = self.tbShow,
|
||||
bBlur = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit("MallCloseDetail")
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnBtnClick_Tips(btn, nIndex)
|
||||
local mapShow = self.tbShow[nIndex]
|
||||
if not mapShow then
|
||||
return
|
||||
end
|
||||
UTILS.ClickItemGridWithTips(mapShow.nId, btn.transform, true, true, false)
|
||||
end
|
||||
function MallFurnitureDetailCtrl:OnGridSelect_Icon(_, goGrid)
|
||||
local nIndex = tonumber(goGrid.name)
|
||||
if nIndex == nil then
|
||||
return
|
||||
end
|
||||
self.nIconIndex = nIndex + 1
|
||||
self:RefreshIconDot()
|
||||
end
|
||||
return MallFurnitureDetailCtrl
|
||||
@@ -0,0 +1,179 @@
|
||||
local MallFurnitureItemCtrl = class("MallFurnitureItemCtrl", BaseCtrl)
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
MallFurnitureItemCtrl._mapNodeConfig = {
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgBg = {sComponentName = "Image"},
|
||||
txtPrice = {sComponentName = "TMP_Text"},
|
||||
txtLimit = {sComponentName = "TMP_Text"},
|
||||
imgCurrency = {sComponentName = "Image"},
|
||||
goCurrency = {},
|
||||
goTime = {},
|
||||
goCondition = {},
|
||||
goSoldOut = {},
|
||||
imgSoldOut = {nCount = 2},
|
||||
imgLimit = {nCount = 2},
|
||||
txtRefreshTime = {sComponentName = "TMP_Text"},
|
||||
txtTime = {sComponentName = "TMP_Text"},
|
||||
txtSoldOut = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_SoldOut"
|
||||
},
|
||||
txtCondition = {sComponentName = "TMP_Text"},
|
||||
goSaleRate = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
fxSaleRate = {sNodeName = "goSaleRate", sComponentName = "UIShiny"},
|
||||
txtSaleRate = {sComponentName = "TMP_Text"},
|
||||
imgMask = {},
|
||||
imgSaleMask = {},
|
||||
reddotPkg = {},
|
||||
reddotNew = {},
|
||||
goFurniture = {},
|
||||
txtFurnitureValue = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
MallFurnitureItemCtrl._mapEventConfig = {}
|
||||
function MallFurnitureItemCtrl:Refresh(mapData)
|
||||
local mapCfg = ConfigTable.GetData("MallPackage", mapData.sId)
|
||||
self.sId = mapData.sId
|
||||
self:RefreshInfo(mapCfg)
|
||||
self:RefreshPrice(mapCfg)
|
||||
self:RefreshLimit(mapCfg, mapData)
|
||||
self:RefreshCond(mapCfg, mapData)
|
||||
self:RefreshTime(mapCfg, mapData)
|
||||
self:RefreshFurnitureValue(mapCfg)
|
||||
self:RegisterRedDot(mapCfg)
|
||||
end
|
||||
function MallFurnitureItemCtrl:RefreshPrice(mapCfg)
|
||||
if mapCfg.CurrencyType == GameEnum.currencyType.Cash then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, tostring(mapCfg.CurrencyShowPrice))
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Item then
|
||||
self._mapNode.goCurrency:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, mapCfg.CurrencyItemQty)
|
||||
self:SetPngSprite(self._mapNode.imgCurrency, ConfigTable.GetData_Item(mapCfg.CurrencyItemId).Icon2)
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Free then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, ConfigTable.GetUIText("Mall_Package_Free"))
|
||||
end
|
||||
end
|
||||
function MallFurnitureItemCtrl:RefreshLimit(mapCfg, mapData)
|
||||
self._mapNode.imgLimit[1]:SetActive(mapData.nNextRefreshTime > 0 and mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None)
|
||||
self._mapNode.imgLimit[2]:SetActive(mapData.nNextRefreshTime > 0 and mapCfg.RefreshType ~= GameEnum.mallPackageRefreshType.None)
|
||||
if mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, orderedFormat(ConfigTable.GetUIText("Mall_Package_Limit") or "", mapData.nCurStock, mapCfg.Stock))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Day then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, orderedFormat(ConfigTable.GetUIText("Mall_Package_DayLimit") or "", mapData.nCurStock, mapCfg.Stock))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Week then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, orderedFormat(ConfigTable.GetUIText("Mall_Package_WeekLimit") or "", mapData.nCurStock, mapCfg.Stock))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Month then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, orderedFormat(ConfigTable.GetUIText("Mall_Package_MonthLimit") or "", mapData.nCurStock, mapCfg.Stock))
|
||||
end
|
||||
end
|
||||
function MallFurnitureItemCtrl:RefreshInfo(mapCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapCfg.Name)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapCfg.Icon)
|
||||
NovaAPI.SetImageNativeSize(self._mapNode.imgIcon)
|
||||
local bFurniture = PlayerData.Mall:IsFurnitureGroup(mapCfg.GroupId)
|
||||
self._mapNode.imgIcon.transform.localScale = bFurniture and Vector3(1.1, 1.1, 1) or Vector3.one
|
||||
self:SetPngSprite(self._mapNode.imgBg, mapCfg.IconBg)
|
||||
self._mapNode.goSaleRate.gameObject:SetActive(mapCfg.SaleRate ~= 0)
|
||||
if mapCfg.SaleRate ~= 0 then
|
||||
if mapCfg.SaleRate == -1 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSaleRate, ConfigTable.GetUIText("Mall_Package_Recommend"))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSaleRate, string.format("%s%%", mapCfg.SaleRate))
|
||||
end
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goSaleRate)
|
||||
end
|
||||
end
|
||||
function MallFurnitureItemCtrl:GetTimeStr(nRemainTime)
|
||||
local str = ""
|
||||
if nRemainTime <= 3600 then
|
||||
str = ConfigTable.GetUIText("Mall_Package_WithinHour")
|
||||
elseif 3600 < nRemainTime and nRemainTime <= 86400 then
|
||||
str = orderedFormat(ConfigTable.GetUIText("Mall_Package_Hour") or "", math.floor(nRemainTime / 3600))
|
||||
elseif 86400 < nRemainTime then
|
||||
str = orderedFormat(ConfigTable.GetUIText("Mall_Package_Day") or "", math.floor(nRemainTime / 86400))
|
||||
end
|
||||
return str
|
||||
end
|
||||
function MallFurnitureItemCtrl:RefreshTime(mapCfg, mapData)
|
||||
local bDisposable = mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None
|
||||
local bShowTime = mapData.nNextRefreshTime > 0 and bDisposable
|
||||
self._mapNode.goTime.gameObject:SetActive(bShowTime)
|
||||
if not bShowTime then
|
||||
return
|
||||
end
|
||||
local sSuffix = mapData.bPrioritizeDeList and ConfigTable.GetUIText("Mall_Package_Delist") or ConfigTable.GetUIText("Mall_Package_Refresh")
|
||||
local sPrefix = self:GetTimeStr(mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sPrefix .. sSuffix)
|
||||
end
|
||||
function MallFurnitureItemCtrl:RefreshFurnitureValue(mapCfg)
|
||||
if self._mapNode.goFurniture == nil then
|
||||
return
|
||||
end
|
||||
local bShow = PlayerData.Mall:IsFurnitureValueGroup(mapCfg.GroupId)
|
||||
self._mapNode.goFurniture:SetActive(bShow)
|
||||
if not bShow then
|
||||
return
|
||||
end
|
||||
local nValue = PlayerData.Mall:GetFurnitureValue(mapCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtFurnitureValue, tostring(nValue))
|
||||
end
|
||||
function MallFurnitureItemCtrl:RefreshCond(mapCfg, mapData)
|
||||
local tbCond = decodeJson(mapCfg.OrderCondParams)
|
||||
local bPurchaseAble = PlayerData.Shop:CheckShopCond(mapCfg.OrderCondType, tbCond)
|
||||
local bShowMask = mapData.nCurStock == 0 or not bPurchaseAble
|
||||
self._mapNode.imgMask:SetActive(bShowMask)
|
||||
self._mapNode.imgSaleMask:SetActive(bShowMask)
|
||||
NovaAPI.SetComponentEnable(self._mapNode.fxSaleRate, not bShowMask)
|
||||
self._mapNode.goCondition:SetActive(not bPurchaseAble)
|
||||
self._mapNode.goSoldOut:SetActive(mapData.nCurStock == 0)
|
||||
if not bPurchaseAble then
|
||||
local sCond = ""
|
||||
if mapCfg.OrderCondType == GameEnum.shopCond.WorldClassSpecific then
|
||||
sCond = orderedFormat(ConfigTable.GetUIText("Mall_Cond_WorldClass") or "", tbCond[1])
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCondition, sCond)
|
||||
end
|
||||
if mapData.nCurStock == 0 then
|
||||
local bDisposable = mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None
|
||||
local bTime = 0 < mapData.nNextRefreshTime and not bDisposable
|
||||
self._mapNode.imgSoldOut[1]:SetActive(not bTime)
|
||||
self._mapNode.imgSoldOut[2]:SetActive(bTime)
|
||||
if 0 < mapData.nNextRefreshTime then
|
||||
local sPrefix
|
||||
local nRemaining = mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
|
||||
if nRemaining <= 3600 then
|
||||
sPrefix = ConfigTable.GetUIText("Mall_Package_WithinHourRefresh")
|
||||
elseif 3600 < nRemaining and nRemaining <= 86400 then
|
||||
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_HourRefresh") or "", math.floor(nRemaining / 3600))
|
||||
elseif 86400 < nRemaining then
|
||||
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_DayRefresh") or "", math.floor(nRemaining / 86400))
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshTime, sPrefix)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallFurnitureItemCtrl:RegisterRedDot(mapCfg)
|
||||
local groupCfg = ConfigTable.GetData("MallPackagePage", mapCfg.GroupId)
|
||||
if groupCfg == nil then
|
||||
return
|
||||
end
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Package_New, {
|
||||
AllEnum.MallToggle.Furniture,
|
||||
groupCfg.Sort,
|
||||
self.sId
|
||||
}, self._mapNode.reddotNew)
|
||||
end
|
||||
function MallFurnitureItemCtrl:Awake()
|
||||
end
|
||||
function MallFurnitureItemCtrl:OnEnable()
|
||||
end
|
||||
function MallFurnitureItemCtrl:OnDisable()
|
||||
end
|
||||
function MallFurnitureItemCtrl:OnDestroy()
|
||||
end
|
||||
return MallFurnitureItemCtrl
|
||||
@@ -0,0 +1,424 @@
|
||||
local MallFurnitureSetCtrl = class("MallFurnitureSetCtrl", BaseCtrl)
|
||||
MallFurnitureSetCtrl._mapNodeConfig = {
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Shop_TitleBuy"
|
||||
},
|
||||
txtTagName = {sComponentName = "TMP_Text"},
|
||||
imgTag = {},
|
||||
goFurniture = {},
|
||||
txtFurnitureValue = {sComponentName = "TMP_Text"},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
goCurrency = {},
|
||||
imgCurrency = {sComponentName = "Image"},
|
||||
txtPrice = {sComponentName = "TMP_Text"},
|
||||
txtPriceCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_PriceTitle"
|
||||
},
|
||||
svList = {
|
||||
sNodeName = "lsvList",
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
goTime = {},
|
||||
txtLimit = {sComponentName = "TMP_Text"},
|
||||
txtLimitCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_LimitTitle"
|
||||
},
|
||||
txtTime = {sComponentName = "TMP_Text"},
|
||||
txtTimeCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_TimeTitle"
|
||||
},
|
||||
txtTitleFurnitureList = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_FurnitureList"
|
||||
},
|
||||
btnBuy1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Buy"
|
||||
},
|
||||
btnBuy2 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Disable"
|
||||
},
|
||||
txtBtnBuy = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Btn_Buy"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
goTitleList = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
eventDrag = {
|
||||
sNodeName = "goTitleList",
|
||||
sComponentName = "UIDrag",
|
||||
callback = "OnDrag_Banner"
|
||||
},
|
||||
goTitleItem = {
|
||||
nCount = 3,
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgTitleImg = {nCount = 3, sComponentName = "Image"},
|
||||
imgPointBg = {nCount = 4},
|
||||
imgPoint = {nCount = 4}
|
||||
}
|
||||
MallFurnitureSetCtrl._mapEventConfig = {}
|
||||
function MallFurnitureSetCtrl:Refresh(mapData)
|
||||
self.sId = mapData.sId
|
||||
local mapCfg = ConfigTable.GetData("MallPackage", mapData.sId)
|
||||
self:PlayInAni()
|
||||
self:RefreshInfo(mapCfg)
|
||||
self:RefreshPrice(mapCfg)
|
||||
self:RefreshLimit(mapCfg, mapData)
|
||||
self:RefreshTime(mapData)
|
||||
self:RefreshFurnitureValue(mapCfg)
|
||||
self:RefreshItem(mapCfg)
|
||||
self:RefreshBuy(mapCfg, mapData)
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshInfo(mapCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapCfg.DetailName)
|
||||
self.tbIcon = {}
|
||||
local tbItem = decodeJson(mapCfg.Items)
|
||||
if next(tbItem) == nil then
|
||||
return
|
||||
end
|
||||
local tbSet = {}
|
||||
for sSetId in pairs(tbItem) do
|
||||
table.insert(tbSet, tonumber(sSetId))
|
||||
end
|
||||
local mapDormCfg = ConfigTable.GetData("DormLayoutReward", tbSet[1])
|
||||
if not mapDormCfg then
|
||||
return
|
||||
end
|
||||
self._mapNode.imgTag:SetActive(mapDormCfg.RoomLayoutTag ~= "")
|
||||
if mapDormCfg.RoomLayoutTag ~= "" then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTagName, mapDormCfg.RoomLayoutTag)
|
||||
end
|
||||
table.insert(self.tbIcon, mapDormCfg.RoomLayoutListIcon)
|
||||
self:SetBanner()
|
||||
end
|
||||
function MallFurnitureSetCtrl:SetBanner()
|
||||
self:ResetBannerTimer()
|
||||
self.nBannerIdx = 1
|
||||
self.nBannerDragPosX = 0
|
||||
for k, v in ipairs(self._mapNode.goTitleItem) do
|
||||
v.anchoredPosition = self.tbBannerInitPos[k]
|
||||
end
|
||||
self._mapNode.eventDrag.enabled = 1 < #self.tbIcon
|
||||
for k, v in ipairs(self._mapNode.imgPointBg) do
|
||||
v:SetActive(false)
|
||||
end
|
||||
if next(self.tbIcon) == nil then
|
||||
return
|
||||
end
|
||||
self:RefreshBanner()
|
||||
self:StartBannerTimer()
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshBanner()
|
||||
local nCount = #self.tbIcon
|
||||
local nLastIdx = self.nBannerIdx - 1 <= 0 and nCount or self.nBannerIdx - 1
|
||||
local nNextIdx = nCount < self.nBannerIdx + 1 and 1 or self.nBannerIdx + 1
|
||||
local tbCurIcon = {
|
||||
self.tbIcon[nLastIdx],
|
||||
self.tbIcon[self.nBannerIdx],
|
||||
self.tbIcon[nNextIdx]
|
||||
}
|
||||
for k, v in ipairs(self._mapNode.imgTitleImg) do
|
||||
if tbCurIcon[k] ~= nil then
|
||||
self:SetPngSprite(v, tbCurIcon[k] .. "_big")
|
||||
end
|
||||
end
|
||||
for k, v in ipairs(self._mapNode.imgPoint) do
|
||||
v:SetActive(k == self.nBannerIdx)
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:StartBannerTimer()
|
||||
if self.bannerTimer == nil and #self.tbIcon > 1 then
|
||||
self.bannerTimer = self:AddTimer(0, self.nBannerInterval, "PlayBannerAnim", true, true, false)
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:ResetBannerTimer()
|
||||
if self.bannerTimer ~= nil then
|
||||
self.bannerTimer:Cancel(false)
|
||||
end
|
||||
self.bannerTimer = nil
|
||||
end
|
||||
function MallFurnitureSetCtrl:PlayBannerAnim()
|
||||
local onCompleteCb = function()
|
||||
self:BannerTweenerEnd()
|
||||
end
|
||||
for k, v in ipairs(self._mapNode.goTitleItem) do
|
||||
if k == #self._mapNode.goTitleItem then
|
||||
v:DOAnchorPosX(self.tbBannerInitPos[k].x - self.nBannerWidth, 0.5):SetUpdate(true):OnComplete(onCompleteCb)
|
||||
else
|
||||
v:DOAnchorPosX(self.tbBannerInitPos[k].x - self.nBannerWidth, 0.5):SetUpdate(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:BannerTweenerEnd()
|
||||
for k, v in ipairs(self._mapNode.goTitleItem) do
|
||||
v.anchoredPosition = self.tbBannerInitPos[k]
|
||||
end
|
||||
self.nBannerIdx = self.nBannerIdx + 1 > #self.tbIcon and 1 or self.nBannerIdx + 1
|
||||
self:RefreshBanner()
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnDrag_Banner(mDrag)
|
||||
if #self.tbIcon <= 1 then
|
||||
return
|
||||
end
|
||||
if mDrag.DragEventType == AllEnum.UIDragType.DragStart then
|
||||
self.nBannerDragPosX = 0
|
||||
self:ResetBannerTimer()
|
||||
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
|
||||
self.nBannerDragPosX = self.nBannerDragPosX + mDrag.EventData.delta.x
|
||||
for k, v in ipairs(self._mapNode.goTitleItem) do
|
||||
v.anchoredPosition = Vector2(self.tbBannerInitPos[k].x + self.nBannerDragPosX, self.tbBannerInitPos[k].y)
|
||||
end
|
||||
elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then
|
||||
local nPos = 0
|
||||
if self.nBannerDragPosX > 0 then
|
||||
nPos = self.nBannerWidth
|
||||
self.nBannerIdx = 0 >= self.nBannerIdx - 1 and #self.tbIcon or self.nBannerIdx - 1
|
||||
elseif self.nBannerDragPosX < 0 then
|
||||
nPos = -self.nBannerWidth
|
||||
self.nBannerIdx = self.nBannerIdx + 1 > #self.tbIcon and 1 or self.nBannerIdx + 1
|
||||
end
|
||||
local tweener
|
||||
for k, v in ipairs(self._mapNode.goTitleItem) do
|
||||
tweener = v:DOAnchorPosX(self.tbBannerInitPos[k].x + nPos, 0.5):SetUpdate(true)
|
||||
end
|
||||
local _cb = function()
|
||||
for k, v in ipairs(self._mapNode.goTitleItem) do
|
||||
v.anchoredPosition = self.tbBannerInitPos[k]
|
||||
end
|
||||
self:RefreshBanner()
|
||||
self:StartBannerTimer()
|
||||
end
|
||||
tweener.onComplete = dotween_callback_handler(self, _cb)
|
||||
self.nBannerDragPosX = 0
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshPrice(mapCfg)
|
||||
if mapCfg.CurrencyType == GameEnum.currencyType.Cash then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, tostring(mapCfg.CurrencyShowPrice))
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Item then
|
||||
self._mapNode.goCurrency:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, mapCfg.CurrencyItemQty)
|
||||
self:SetPngSprite(self._mapNode.imgCurrency, ConfigTable.GetData_Item(mapCfg.CurrencyItemId).Icon2)
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Free then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, ConfigTable.GetUIText("Mall_Package_Free"))
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshLimit(mapCfg, mapData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, mapData.nCurStock .. "/" .. mapCfg.Stock)
|
||||
if mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_LimitTitle"))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Day then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_DayLimitTitle"))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Week then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_WeekLimitTitle"))
|
||||
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Month then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_MonthLimitTitle"))
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:GetTimeStr(nRemainTime)
|
||||
local str = ""
|
||||
if nRemainTime <= 3600 then
|
||||
str = ConfigTable.GetUIText("Mall_Package_WithinHour")
|
||||
elseif 3600 < nRemainTime and nRemainTime <= 86400 then
|
||||
str = orderedFormat(ConfigTable.GetUIText("Mall_Package_Hour") or "", math.floor(nRemainTime / 3600))
|
||||
elseif 86400 < nRemainTime then
|
||||
str = orderedFormat(ConfigTable.GetUIText("Mall_Package_Day") or "", math.floor(nRemainTime / 86400))
|
||||
end
|
||||
return str
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshTime(mapData)
|
||||
self._mapNode.goTime:SetActive(mapData.nNextRefreshTime > 0)
|
||||
if mapData.nNextRefreshTime <= 0 then
|
||||
return
|
||||
end
|
||||
local sSuffix = mapData.bPrioritizeDeList and ConfigTable.GetUIText("Mall_Package_Delist") or ConfigTable.GetUIText("Mall_Package_Refresh")
|
||||
local sPrefix = self:GetTimeStr(mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sPrefix .. sSuffix)
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshFurnitureValue(mapCfg)
|
||||
local nValue = PlayerData.Mall:GetFurnitureSetCollectionValue(mapCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtFurnitureValue, tostring(nValue))
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshItem(mapCfg)
|
||||
self.tbFurniture = {}
|
||||
local mapIndex = {}
|
||||
for sSetId in pairs(decodeJson(mapCfg.Items) or {}) do
|
||||
local itemCfg = ConfigTable.GetData_Item(tonumber(sSetId))
|
||||
if itemCfg ~= nil then
|
||||
for sItemId, nCount in pairs(decodeJson(itemCfg.UseArgs) or {}) do
|
||||
local nId = tonumber(sItemId)
|
||||
local furnitureCfg = ConfigTable.GetData("DormFurniture", nId)
|
||||
local furnitureItemCfg = ConfigTable.GetData_Item(nId)
|
||||
if furnitureCfg ~= nil and furnitureItemCfg ~= nil then
|
||||
local nIndex = mapIndex[nId]
|
||||
if nIndex == nil then
|
||||
table.insert(self.tbFurniture, {
|
||||
nId = nId,
|
||||
nCount = nCount,
|
||||
nRarity = furnitureItemCfg.Rarity
|
||||
})
|
||||
mapIndex[nId] = #self.tbFurniture
|
||||
else
|
||||
self.tbFurniture[nIndex].nCount = self.tbFurniture[nIndex].nCount + nCount
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(self.tbFurniture, function(a, b)
|
||||
if a.nRarity ~= b.nRarity then
|
||||
return a.nRarity < b.nRarity
|
||||
else
|
||||
return a.nId < b.nId
|
||||
end
|
||||
end)
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.svList:Init(#self.tbFurniture, self, self.OnGridRefresh, self.OnGridClick)
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnGridRefresh(goGrid, nIdx)
|
||||
local mapItem = self.tbFurniture[nIdx + 1]
|
||||
if mapItem == nil then
|
||||
return
|
||||
end
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if self.tbGridCtrl[nInstanceId] == nil then
|
||||
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormEditor.TemplateDormFurnitureItem")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceId]:Refresh(mapItem.nId, mapItem.nCount, 0)
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnGridClick(goGrid, nIdx)
|
||||
local mapItem = self.tbFurniture[nIdx + 1]
|
||||
if mapItem == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.svList:SetScrollGridPos(nIdx, 0.1, 1)
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
self:AddTimer(1, 0.1, function()
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
UTILS.ClickItemGridWithTips(mapItem.nId, goGrid.transform:Find("btnGrid"), false, false, false)
|
||||
end, true, true, true)
|
||||
end
|
||||
function MallFurnitureSetCtrl:RefreshBuy(mapCfg, mapData)
|
||||
local tbCond = decodeJson(mapCfg.OrderCondParams)
|
||||
local bPurchaseAble = PlayerData.Shop:CheckShopCond(mapCfg.OrderCondType, tbCond)
|
||||
local bAble = bPurchaseAble and mapData.nCurStock > 0
|
||||
self._mapNode.btnBuy1.gameObject:SetActive(bAble)
|
||||
self._mapNode.btnBuy2.gameObject:SetActive(not bAble)
|
||||
if not bPurchaseAble then
|
||||
self.sDisableTip = ConfigTable.GetUIText("Shop_Condition")
|
||||
elseif mapData.nCurStock == 0 then
|
||||
self.sDisableTip = ConfigTable.GetUIText("Shop_GoodsEmpty")
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:PlayInAni()
|
||||
self.gameObject:SetActive(true)
|
||||
self.ani:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function MallFurnitureSetCtrl:PlayOutAni()
|
||||
self.ani:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, "Close", true, true, true)
|
||||
end
|
||||
function MallFurnitureSetCtrl:Close()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function MallFurnitureSetCtrl:Awake()
|
||||
self.ani = self.gameObject.transform:GetComponent("Animator")
|
||||
self.tbGridCtrl = {}
|
||||
self.tbIcon = {}
|
||||
self.tbBannerInitPos = {}
|
||||
for _, v in ipairs(self._mapNode.goTitleItem) do
|
||||
self.nBannerWidth = v.sizeDelta.x
|
||||
table.insert(self.tbBannerInitPos, v.anchoredPosition)
|
||||
end
|
||||
self.nBannerInterval = ConfigTable.GetConfigNumber("Activity_Banner_Interval_Time")
|
||||
self._mapNode.eventDrag:SetStrictDrag(true)
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnEnable()
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnDisable()
|
||||
self:ResetBannerTimer()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnDestroy()
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnBtnClick_Buy()
|
||||
local mapCfg = ConfigTable.GetData("MallPackage", self.sId)
|
||||
if not mapCfg then
|
||||
return
|
||||
end
|
||||
local nCurrencyType = mapCfg.CurrencyType
|
||||
if nCurrencyType == GameEnum.currencyType.Cash then
|
||||
PlayerData.Mall:BuyPackage(self.sId, mapCfg.StatisticalGroup)
|
||||
else
|
||||
local bShowConfirm = false
|
||||
if nCurrencyType == GameEnum.currencyType.Item then
|
||||
local nHas = 0
|
||||
if mapCfg.CurrencyItemId == AllEnum.CoinItemId.FREESTONE or mapCfg.CurrencyItemId == AllEnum.CoinItemId.STONE then
|
||||
bShowConfirm = true
|
||||
nHas = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.FREESTONE) + PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE)
|
||||
else
|
||||
nHas = PlayerData.Coin:GetCoinCount(mapCfg.CurrencyItemId)
|
||||
end
|
||||
if nHas < mapCfg.CurrencyItemQty then
|
||||
local funcOpenBuyGem = function()
|
||||
EventManager.Hit("MallCloseDetail")
|
||||
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.Gem)
|
||||
end
|
||||
if mapCfg.CurrencyItemId == AllEnum.CoinItemId.FREESTONE or mapCfg.CurrencyItemId == AllEnum.CoinItemId.STONE then
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE).Id),
|
||||
callbackConfirm = funcOpenBuyGem,
|
||||
bBlur = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
elseif mapCfg.CurrencyItemId == AllEnum.CoinItemId.Furniture then
|
||||
PlayerData.Coin:ExchangeFurnitureCoin(mapCfg.CurrencyItemQty, funcOpenBuyGem)
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
if bShowConfirm then
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = orderedFormat(ConfigTable.GetUIText("Mall_Package_Buy_Confirm") or "", mapCfg.CurrencyItemQty, mapCfg.CurrencyItemId, mapCfg.DetailName),
|
||||
callbackConfirm = function()
|
||||
PlayerData.Mall:SendMallPackageOrderReq(self.sId)
|
||||
end,
|
||||
bBlur = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
else
|
||||
PlayerData.Mall:SendMallPackageOrderReq(self.sId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnBtnClick_Disable()
|
||||
EventManager.Hit(EventId.OpenMessageBox, self.sDisableTip)
|
||||
end
|
||||
function MallFurnitureSetCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit("MallCloseDetail")
|
||||
end
|
||||
return MallFurnitureSetCtrl
|
||||
@@ -65,18 +65,25 @@ function MallPackageCtrl:RefreshData(tbList)
|
||||
end
|
||||
end
|
||||
self.nPageCount = #self.tbPages
|
||||
local nTab
|
||||
if self._panel.nDefaultId then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self._panel.nDefaultId then
|
||||
self.nCurTab = k
|
||||
nTab = 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
|
||||
if nTab == nil and self.nSelectPage then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self.nSelectPage then
|
||||
nTab = k
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self.nCurTab = nTab or 1
|
||||
self.nSelectPage = self.tbPages[self.nCurTab].Id
|
||||
end
|
||||
function MallPackageCtrl:RefreshList(bResetPos)
|
||||
@@ -168,8 +175,12 @@ function MallPackageCtrl:ResetTab(nTab)
|
||||
self.nCurTab = 1
|
||||
end
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(true, 1)
|
||||
self.nSelectPage = self.tbPages[self.nCurTab] and self.tbPages[self.nCurTab].Id or nil
|
||||
end
|
||||
function MallPackageCtrl:GetCurTab()
|
||||
function MallPackageCtrl:GetCurSort()
|
||||
if not self.tbPages or not self.tbPages[self.nCurTab] then
|
||||
return 0
|
||||
end
|
||||
return self.tbPages[self.nCurTab].Sort
|
||||
end
|
||||
function MallPackageCtrl:Awake()
|
||||
@@ -199,7 +210,8 @@ function MallPackageCtrl:OnBtnClick_ChangeSheet(btn, nIndex)
|
||||
if nIndex == self.nCurTab then
|
||||
return
|
||||
end
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Package, self.tbPages[self.nCurTab].Sort)
|
||||
local nSort = self:GetCurSort()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Package, nSort)
|
||||
local nState = self:GetTabState(self.nCurTab)
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(false, nState)
|
||||
if self.nCurTab > 1 then
|
||||
|
||||
@@ -23,6 +23,14 @@ MallPopupCtrl._mapNodeConfig = {
|
||||
ShopDetail = {
|
||||
sNodeName = "---ShopDetail---",
|
||||
sCtrlName = "Game.UI.Mall.MallShopDetailCtrl"
|
||||
},
|
||||
FurnitureDetail = {
|
||||
sNodeName = "---FurnitureDetail---",
|
||||
sCtrlName = "Game.UI.Mall.MallFurnitureDetailCtrl"
|
||||
},
|
||||
FurnitureSet = {
|
||||
sNodeName = "---FurnitureSet---",
|
||||
sCtrlName = "Game.UI.Mall.MallFurnitureSetCtrl"
|
||||
}
|
||||
}
|
||||
MallPopupCtrl._mapEventConfig = {
|
||||
@@ -37,6 +45,13 @@ function MallPopupCtrl:Open()
|
||||
elseif self.nType == AllEnum.MallToggle.Shop then
|
||||
self._mapNode.ShopDetail:Refresh(self.mapData, self._mapNode.TopBar)
|
||||
self._mapNode.TopBar:CreateCoin(self.tbCoin, true)
|
||||
elseif self.nType == AllEnum.MallToggle.Furniture then
|
||||
if self.nSubType == GameEnum.MallItemSubType.FurnitureSet then
|
||||
self._mapNode.FurnitureSet:Refresh(self.mapData)
|
||||
else
|
||||
self._mapNode.FurnitureDetail:Refresh(self.mapData)
|
||||
end
|
||||
self._mapNode.TopBar:CreateCoin(self.tbCoin, true)
|
||||
end
|
||||
end
|
||||
function MallPopupCtrl:ClosePackageDetail()
|
||||
@@ -53,6 +68,20 @@ function MallPopupCtrl:CloseShopDetail()
|
||||
self._mapNode.ShopDetail:PlayOutAni()
|
||||
self:CloseOther()
|
||||
end
|
||||
function MallPopupCtrl:CloseFurnitureDetail()
|
||||
if self._mapNode.FurnitureDetail.gameObject.activeSelf == false then
|
||||
return
|
||||
end
|
||||
self._mapNode.FurnitureDetail:PlayOutAni()
|
||||
self:CloseOther()
|
||||
end
|
||||
function MallPopupCtrl:CloseFurnitureSet()
|
||||
if self._mapNode.FurnitureSet.gameObject.activeSelf == false then
|
||||
return
|
||||
end
|
||||
self._mapNode.FurnitureSet:PlayOutAni()
|
||||
self:CloseOther()
|
||||
end
|
||||
function MallPopupCtrl:CloseOther()
|
||||
self._mapNode.TopBar.gameObject:SetActive(false)
|
||||
self._mapNode.aniBlur:SetTrigger("tOut")
|
||||
@@ -64,12 +93,17 @@ end
|
||||
function MallPopupCtrl:Awake()
|
||||
self._mapNode.PackageDetail.gameObject:SetActive(false)
|
||||
self._mapNode.ShopDetail.gameObject:SetActive(false)
|
||||
self._mapNode.FurnitureDetail.gameObject:SetActive(false)
|
||||
self._mapNode.FurnitureSet.gameObject:SetActive(false)
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.nType = tbParam[1]
|
||||
self.mapData = tbParam[2]
|
||||
self.tbCoin = tbParam[3]
|
||||
end
|
||||
if self.nType == AllEnum.MallToggle.Furniture and self.mapData ~= nil then
|
||||
self.nSubType = PlayerData.Mall:GetPackageSubType(self.mapData.sId)
|
||||
end
|
||||
end
|
||||
function MallPopupCtrl:OnEnable()
|
||||
self:Open()
|
||||
@@ -83,6 +117,12 @@ function MallPopupCtrl:OnBtnClick_CloseDetail()
|
||||
self:ClosePackageDetail()
|
||||
elseif self.nType == AllEnum.MallToggle.Shop then
|
||||
self:CloseShopDetail()
|
||||
elseif self.nType == AllEnum.MallToggle.Furniture then
|
||||
if self.nSubType == GameEnum.MallItemSubType.FurnitureSet then
|
||||
self:CloseFurnitureSet()
|
||||
else
|
||||
self:CloseFurnitureDetail()
|
||||
end
|
||||
end
|
||||
end
|
||||
return MallPopupCtrl
|
||||
|
||||
@@ -400,9 +400,17 @@ function MallRecommendCtrl:OnBtnClick_Banner()
|
||||
elseif bannerData.nType == GameEnum.MallAdvRecommendItemType.MonthlyCard then
|
||||
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.MonthlyCard)
|
||||
elseif bannerData.nType == GameEnum.MallAdvRecommendItemType.Package then
|
||||
local nItemId = bannerData.nItemId
|
||||
local mapData = ConfigTable.GetData("MallPackage", nItemId)
|
||||
if mapData == nil then
|
||||
return
|
||||
end
|
||||
self._panel.nDefaultId = mapData.GroupId
|
||||
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.Package)
|
||||
elseif bannerData.nType == GameEnum.MallAdvRecommendItemType.Skin then
|
||||
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.Skin)
|
||||
elseif bannerData.nType == GameEnum.MallAdvRecommendItemType.Furniture then
|
||||
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.Furniture)
|
||||
end
|
||||
end
|
||||
function MallRecommendCtrl:Awake()
|
||||
|
||||
@@ -182,8 +182,14 @@ function MallRecommendItemCtrl:OnBtnClick_Package(btn)
|
||||
if mapData == nil then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.MallPopup, AllEnum.MallToggle.Package, mapData, {
|
||||
AllEnum.CoinItemId.FREESTONE
|
||||
})
|
||||
if mapCfg.Tag == GameEnum.MallItemType.Furniture then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.MallPopup, AllEnum.MallToggle.Furniture, mapData, {
|
||||
AllEnum.CoinItemId.Furniture
|
||||
})
|
||||
else
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.MallPopup, AllEnum.MallToggle.Package, mapData, {
|
||||
AllEnum.CoinItemId.FREESTONE
|
||||
})
|
||||
end
|
||||
end
|
||||
return MallRecommendItemCtrl
|
||||
|
||||
@@ -54,18 +54,25 @@ function MallShopCtrl:RefreshData(tbList)
|
||||
end
|
||||
end
|
||||
self.nPageCount = #self.tbPages
|
||||
local nTab
|
||||
if self._panel.nDefaultId then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self._panel.nDefaultId then
|
||||
self.nCurTab = k
|
||||
nTab = 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
|
||||
if nTab == nil and self.nSelectPage then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self.nSelectPage then
|
||||
nTab = k
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self.nCurTab = nTab or 1
|
||||
self.nSelectPage = self.tbPages[self.nCurTab].Id
|
||||
end
|
||||
function MallShopCtrl:RefreshTab()
|
||||
@@ -203,6 +210,7 @@ function MallShopCtrl:ResetTab()
|
||||
end
|
||||
self.nCurTab = 1
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(true, 1)
|
||||
self.nSelectPage = self.tbPages[self.nCurTab] and self.tbPages[self.nCurTab].Id or nil
|
||||
end
|
||||
function MallShopCtrl:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
|
||||
@@ -71,7 +71,7 @@ function MallShopDetailCtrl:RefreshInfo()
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapCfg.Name)
|
||||
self._mapNode.goItem:SetItem(self.mapCfg.ItemId, nil, self.mapCfg.ItemQty, nil, nil, nil, nil, true)
|
||||
if mapItemCfg.Type == GameEnum.itemType.Disc or mapItemCfg.Type == GameEnum.itemType.Char or mapItemCfg.Type == GameEnum.itemType.CharacterSkin then
|
||||
if mapItemCfg.Type == GameEnum.itemType.Disc or mapItemCfg.Type == GameEnum.itemType.Char or mapItemCfg.Type == GameEnum.itemType.CharacterSkin or mapItemCfg.Stype == GameEnum.itemStype.DormFurniture then
|
||||
self._mapNode.txtHas.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.txtHas.gameObject:SetActive(true)
|
||||
|
||||
@@ -50,7 +50,8 @@ function MallSkinCtrl:RefreshData(tbList)
|
||||
table.insert(self.tbPackagePage, tbAllList)
|
||||
self.tbPages[1] = {
|
||||
Id = 0,
|
||||
Name = ConfigTable.GetUIText("Mall_Package_TabAll")
|
||||
Name = ConfigTable.GetUIText("Mall_Package_TabAll"),
|
||||
Sort = 0
|
||||
}
|
||||
for _, v in pairs(tbPage) do
|
||||
if tbPackageToPage[v.Id] then
|
||||
@@ -59,18 +60,25 @@ function MallSkinCtrl:RefreshData(tbList)
|
||||
end
|
||||
end
|
||||
self.nPageCount = #self.tbPages
|
||||
local nTab
|
||||
if self._panel.nDefaultId then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self._panel.nDefaultId then
|
||||
self.nCurTab = k
|
||||
nTab = 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
|
||||
if nTab == nil and self.nSelectPage then
|
||||
for k, v in ipairs(self.tbPages) do
|
||||
if v.Id == self.nSelectPage then
|
||||
nTab = k
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self.nCurTab = nTab or 1
|
||||
self.nSelectPage = self.tbPages[self.nCurTab].Id
|
||||
end
|
||||
function MallSkinCtrl:RefreshList(bResetPos)
|
||||
@@ -182,13 +190,13 @@ function MallSkinCtrl:ResetTab()
|
||||
end
|
||||
self.nCurTab = 1
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(true, 1)
|
||||
self.nSelectPage = self.tbPages[self.nCurTab] and self.tbPages[self.nCurTab].Id or nil
|
||||
end
|
||||
function MallSkinCtrl:GetCurTab()
|
||||
if self.tbPages[self.nCurTab].Sort == nil then
|
||||
return nil
|
||||
else
|
||||
return self.tbPages[self.nCurTab].Sort
|
||||
function MallSkinCtrl:GetCurSort()
|
||||
if not self.tbPages or not self.tbPages[self.nCurTab] then
|
||||
return 0
|
||||
end
|
||||
return self.tbPages[self.nCurTab].Sort
|
||||
end
|
||||
function MallSkinCtrl:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
@@ -218,8 +226,8 @@ function MallSkinCtrl:OnBtnClick_ChangeSheet(btn, nIndex)
|
||||
if nIndex == self.nCurTab then
|
||||
return
|
||||
end
|
||||
local nTab = self:GetCurTab()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Skin, nTab)
|
||||
local nSort = self:GetCurSort()
|
||||
PlayerData.Mall:RemovePackageNew(GameEnum.MallItemType.Skin, nSort)
|
||||
local nState = self:GetTabState(self.nCurTab)
|
||||
self.ctrlTab[self.nCurTab]:SetSelect(false, nState)
|
||||
if self.nCurTab > 1 then
|
||||
|
||||
@@ -312,7 +312,7 @@ function MallSkinPreviewCtrl:LoadCharacter()
|
||||
self.nModelDragRot = v.transform.localEulerAngles.y
|
||||
self.curShowModel = v
|
||||
self:WaitReadyClipFinish()
|
||||
NovaAPI.BindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0, v.gameObject)
|
||||
NovaAPI.BindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0, v.gameObject, true)
|
||||
GameUIUtils.SetCustomModelMaterialVariant(v.gameObject, CS.CustomModelMaterialVariantComponent.VariantNames.FormationView)
|
||||
else
|
||||
v.gameObject:SetActive(false)
|
||||
@@ -326,7 +326,7 @@ function MallSkinPreviewCtrl:LoadCharacter()
|
||||
self.tbModelList[self.nSkinId] = go
|
||||
self.curShowModel = go
|
||||
self:WaitReadyClipFinish()
|
||||
NovaAPI.BindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0, go)
|
||||
NovaAPI.BindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0, go, true)
|
||||
GameUIUtils.SetCustomModelMaterialVariant(go, CS.CustomModelMaterialVariantComponent.VariantNames.FormationView)
|
||||
if self.rtSceneOriginPos ~= nil then
|
||||
go.transform.position = self.rtSceneOriginPos.position
|
||||
@@ -449,7 +449,11 @@ function MallSkinPreviewCtrl:OnEnable()
|
||||
self.nSelectIndex = 1
|
||||
end
|
||||
self._mapNode.sv:Init(#self.tbSkinList, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
self._mapNode.sv:SetScrollGridPos(self.nSelectIndex - 1, 0)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.sv:SetScrollGridPos(self.nSelectIndex - 1, 0, 0)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
self._mapNode.goPreview.gameObject:SetActive(true)
|
||||
self._mapNode.btnSkin.gameObject:SetActive(false)
|
||||
self._mapNode.go3D.gameObject:SetActive(self.nShowMode == show_mode_3d)
|
||||
|
||||
Reference in New Issue
Block a user