35c8d87e86
EN: 1.4.0.73 CN: 1.4.0.74 JP: 1.4.0.77 KR: 1.4.0.80
227 lines
8.6 KiB
Lua
227 lines
8.6 KiB
Lua
local EnergyBuyCtrl = class("EnergyBuyCtrl", BaseCtrl)
|
|
local TimerManager = require("GameCore.Timer.TimerManager")
|
|
EnergyBuyCtrl._mapNodeConfig = {
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
imgBlurredBg = {},
|
|
safeAreaRoot = {
|
|
sNodeName = "----SafeAreaRoot----"
|
|
},
|
|
MainRoot = {
|
|
sNodeName = "---Main---",
|
|
sCtrlName = "Game.UI.EnergyBuy.EnergyBuyMainCtrl"
|
|
},
|
|
ConfirmRoot = {
|
|
sNodeName = "---Confirm---",
|
|
sCtrlName = "Game.UI.EnergyBuy.EnergyBuyConfirmCtrl"
|
|
},
|
|
ItemUseRoot = {
|
|
sNodeName = "---ItemUse---",
|
|
sCtrlName = "Game.UI.EnergyBuy.EnergyItemUseCtrl"
|
|
},
|
|
BatteryUseRoot = {
|
|
sNodeName = "---BatteryUse---",
|
|
sCtrlName = "Game.UI.EnergyBuy.EnergyBatteryUseCtrl"
|
|
},
|
|
goEnergy = {},
|
|
animEnergy = {sNodeName = "goEnergy", sComponentName = "Animator"},
|
|
goResBarAnimRoot = {},
|
|
animResBar = {
|
|
sNodeName = "goResBarAnimRoot",
|
|
sComponentName = "Animator"
|
|
},
|
|
goRecoverTime = {},
|
|
txtRecoverTime = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Energy_Recover_Time"
|
|
},
|
|
rtRecoverTime = {
|
|
sNodeName = "txtRecoverTime",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
txtEnergyRecover = {sComponentName = "TMP_Text"},
|
|
btnBg = {
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_Close"
|
|
}
|
|
}
|
|
EnergyBuyCtrl._mapEventConfig = {
|
|
[EventId.UpdateEnergy] = "RefreshEnergyRecover",
|
|
[EventId.UpdateEnergyBattery] = "RefreshEnergyRecover",
|
|
ChangeEnergyBuyPanel = "OnEvent_ChangeEnergyBuyPanel",
|
|
CloseEnergyBuyPanel = "OnEvent_CloseEnergyBuyPanel",
|
|
ShowEnergyTopRes = "OnEvent_ShowEnergyTopRes",
|
|
[EventId.IsNewDay] = "OnEvent_NewDay"
|
|
}
|
|
function EnergyBuyCtrl:Awake()
|
|
self.tbWindowStack = {}
|
|
self.nTopBarId = self._mapNode.TopBar.gameObject:GetInstanceID()
|
|
if self._panel.nPanelType ~= AllEnum.EnergyPanelType.Main then
|
|
self.nDirectPanelType = self._panel.nPanelType
|
|
end
|
|
end
|
|
function EnergyBuyCtrl:OnEnable()
|
|
self.animRoot = self.gameObject:GetComponent("Animator")
|
|
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
|
|
self._mapNode.btnBg.gameObject:SetActive(false)
|
|
self._mapNode.imgBlurredBg.gameObject:SetActive(true)
|
|
self._mapNode.goResBarAnimRoot.gameObject:SetActive(false)
|
|
self._mapNode.goRecoverTime.gameObject:SetActive(false)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.safeAreaRoot.gameObject:SetActive(true)
|
|
self._mapNode.btnBg.gameObject:SetActive(true)
|
|
table.insert(self.tbWindowStack, self._panel.nPanelType)
|
|
self:ChangePanelType()
|
|
end
|
|
cs_coroutine.start(wait)
|
|
self:StartRecoverTimer()
|
|
end
|
|
function EnergyBuyCtrl:StartRecoverTimer()
|
|
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
|
|
local nCurEnergyBattery = PlayerData.Base:GetCurEnergyBattery().nEnergyBattery
|
|
local nWorldClassMax = ConfigTable.GetConfigNumber("EnergyMaxLimit")
|
|
local nWorldClassBatteryMax = ConfigTable.GetConfigNumber("EnergyBatteryMax")
|
|
if nCurEnergy < nWorldClassMax then
|
|
self.nNextRestore = PlayerData.Base:GetCurEnergy().nEnergyTime
|
|
self._mapNode.goRecoverTime.gameObject:SetActive(true)
|
|
NovaAPI.SetTMPText(self._mapNode.txtRecoverTime, ConfigTable.GetUIText("Energy_Recover_Time"))
|
|
self:RefreshRecoverTime()
|
|
if nil == self.recoverTimer then
|
|
self.recoverTimer = self:AddTimer(0, 1, "RefreshRecoverTime", true, true, false)
|
|
end
|
|
elseif nCurEnergy >= nWorldClassMax and nCurEnergyBattery < nWorldClassBatteryMax then
|
|
self.nNextRestore = PlayerData.Base:GetCurEnergyBattery().nEnergyBatteryTime
|
|
self._mapNode.goRecoverTime.gameObject:SetActive(true)
|
|
NovaAPI.SetTMPText(self._mapNode.txtRecoverTime, ConfigTable.GetUIText("EnergyBattery_Recover_Time"))
|
|
self:RefreshRecoverTime()
|
|
if nil == self.recoverTimer then
|
|
self.recoverTimer = self:AddTimer(0, 1, "RefreshRecoverTime", true, true, false)
|
|
end
|
|
else
|
|
if nil ~= self.recoverTimer then
|
|
TimerManager.Remove(self.recoverTimer)
|
|
self.recoverTimer = nil
|
|
end
|
|
self._mapNode.goRecoverTime.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
function EnergyBuyCtrl:RefreshRecoverTime()
|
|
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
|
local remainTime = self.nNextRestore - curTime
|
|
local sTimeStr = ""
|
|
if 0 < remainTime then
|
|
if 60 < remainTime then
|
|
local min = math.floor(remainTime / 60)
|
|
local sec = math.floor(remainTime - min * 60)
|
|
sec = string.format("%02d", sec)
|
|
sTimeStr = orderedFormat(ConfigTable.GetUIText("Energy_Recover_Time_Min"), min, sec)
|
|
else
|
|
local sec = string.format("%02d", math.floor(remainTime))
|
|
sTimeStr = orderedFormat(ConfigTable.GetUIText("Energy_Recover_Time_Sec"), sec)
|
|
end
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.txtEnergyRecover, sTimeStr)
|
|
end
|
|
function EnergyBuyCtrl:RefreshEnergyRecover()
|
|
self:StartRecoverTimer()
|
|
end
|
|
function EnergyBuyCtrl:ChangePanelType()
|
|
self._mapNode.MainRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.EnergyPanelType.Main)
|
|
self._mapNode.ConfirmRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.EnergyPanelType.BuyConfirm)
|
|
self._mapNode.ItemUseRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.EnergyPanelType.ItemUse)
|
|
self._mapNode.BatteryUseRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.EnergyPanelType.BatteryUse)
|
|
if self.nDirectPanelType ~= nil then
|
|
local bShowEnergy = self.nDirectPanelType == AllEnum.EnergyPanelType.ItemUse
|
|
self._mapNode.goEnergy.gameObject:SetActive(bShowEnergy)
|
|
self._mapNode.goResBarAnimRoot.gameObject:SetActive(not bShowEnergy)
|
|
local sAnim = bShowEnergy and "tc_top_bar_02_t_in" or "tc_top_bar_01_t_in"
|
|
self._mapNode.animResBar:Play(sAnim)
|
|
self.nDirectPanelType = nil
|
|
else
|
|
local bShowRecover = self._panel.nPanelType == AllEnum.EnergyPanelType.Main or self._panel.nPanelType == AllEnum.EnergyPanelType.ItemUse
|
|
local sRecoverAnim = bShowRecover and "EnergyBuy_Time_in" or "EnergyBuy_Time_out"
|
|
local sEnergyAnim = bShowRecover and "tc_top_bar_02_t_in" or "tc_top_bar_02_t_out"
|
|
local sResBarAnim = not bShowRecover and "tc_top_bar_01_t_in" or "tc_top_bar_01_t_out"
|
|
self._mapNode.goResBarAnimRoot.gameObject:SetActive(not bShowRecover)
|
|
self._mapNode.goEnergy.gameObject:SetActive(bShowRecover)
|
|
self._mapNode.animEnergy:Play(sEnergyAnim)
|
|
self.animRoot:Play(sRecoverAnim)
|
|
self._mapNode.animResBar:Play(sResBarAnim)
|
|
end
|
|
if self._panel.nPanelType == AllEnum.EnergyPanelType.Main then
|
|
self._mapNode.MainRoot:ShowPanel()
|
|
elseif self._panel.nPanelType == AllEnum.EnergyPanelType.BuyConfirm then
|
|
self._mapNode.ConfirmRoot:ShowPanel()
|
|
elseif self._panel.nPanelType == AllEnum.EnergyPanelType.ItemUse then
|
|
self._mapNode.ItemUseRoot:ShowPanel()
|
|
elseif self._panel.nPanelType == AllEnum.EnergyPanelType.BatteryUse then
|
|
self._mapNode.BatteryUseRoot:ShowPanel()
|
|
end
|
|
end
|
|
function EnergyBuyCtrl:ClosePanel(nPanelType)
|
|
self._mapNode.animEnergy:Play("tc_top_bar_02_t_out")
|
|
self._mapNode.animResBar:Play("tc_top_bar_01_t_out")
|
|
self.animRoot:Play("EnergyBuy_Time_out")
|
|
if nPanelType == AllEnum.EnergyPanelType.Main then
|
|
self._mapNode.MainRoot:Close()
|
|
elseif nPanelType == AllEnum.EnergyPanelType.BuyConfirm then
|
|
self._mapNode.ConfirmRoot:Close()
|
|
elseif nPanelType == AllEnum.EnergyPanelType.ItemUse then
|
|
self._mapNode.ItemUseRoot:Close()
|
|
elseif nPanelType == AllEnum.EnergyPanelType.BatteryUse then
|
|
self._mapNode.BatteryUseRoot:Close()
|
|
end
|
|
end
|
|
function EnergyBuyCtrl:OnDisable()
|
|
end
|
|
function EnergyBuyCtrl:OnDestroy()
|
|
end
|
|
function EnergyBuyCtrl:OnEvent_ChangeEnergyBuyPanel(nPanelType)
|
|
self:ClosePanel(self._panel.nPanelType)
|
|
self._panel.nPanelType = nPanelType
|
|
table.insert(self.tbWindowStack, self._panel.nPanelType)
|
|
self:AddTimer(1, 0.3, function()
|
|
self:ChangePanelType()
|
|
end, true, true, true)
|
|
end
|
|
function EnergyBuyCtrl:OnEvent_CloseEnergyBuyPanel(bCloseAll)
|
|
local nPanelType = table.remove(self.tbWindowStack, #self.tbWindowStack)
|
|
if nPanelType ~= self._panel.nPanelType or bCloseAll then
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.EnergyBuy)
|
|
else
|
|
self:ClosePanel(self._panel.nPanelType)
|
|
self:AddTimer(1, 0.3, function()
|
|
if #self.tbWindowStack > 0 then
|
|
self:RefreshEnergyRecover()
|
|
self._panel.nPanelType = self.tbWindowStack[#self.tbWindowStack]
|
|
self:ChangePanelType()
|
|
else
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.EnergyBuy)
|
|
end
|
|
end, true, true, true)
|
|
end
|
|
end
|
|
function EnergyBuyCtrl:OnEvent_ShowEnergyTopRes(bShow)
|
|
self._mapNode.goResBarAnimRoot.gameObject:SetActive(bShow)
|
|
end
|
|
function EnergyBuyCtrl:OnBtnClick_Close()
|
|
self:OnEvent_CloseEnergyBuyPanel()
|
|
end
|
|
function EnergyBuyCtrl:OnEvent_NewDay()
|
|
if PanelManager.GetCurPanelId() == PanelId.MainView then
|
|
EventManager.Hit("NewDay_Clear_Guide")
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Alert,
|
|
sContent = ConfigTable.GetUIText("Alert_NextDay"),
|
|
callbackConfirm = function()
|
|
PanelManager.Home()
|
|
end
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
end
|
|
return EnergyBuyCtrl
|