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:
SL1900
2026-10-20 13:00:00 +09:00
parent 4bcada6061
commit 08b515afd9
1773 changed files with 1095195 additions and 65670 deletions
@@ -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
+115
View File
@@ -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
View File
@@ -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
+237
View File
@@ -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
+179
View File
@@ -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
+424
View File
@@ -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
+17 -5
View File
@@ -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
+40
View File
@@ -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
+8
View File
@@ -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()
+9 -3
View File
@@ -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
+11 -3
View File
@@ -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 = {}
+1 -1
View File
@@ -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)
+19 -11
View File
@@ -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
+7 -3
View File
@@ -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)