296 lines
9.4 KiB
Lua
296 lines
9.4 KiB
Lua
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.SettlementTokenInstruction
|
|
|
|
local settlementSystem = GameInstance.player.settlementSystem
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl = HL.Class('SettlementTokenInstructionCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
[MessageConst.ON_SETTLEMENT_REMAIN_MONEY_MODIFY] = '_OnRemainMoneyModify',
|
|
}
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl.m_stlId = HL.Field(HL.String) << ""
|
|
|
|
|
|
SettlementTokenInstructionCtrl.m_curLevel = HL.Field(HL.Number) << 0
|
|
|
|
|
|
SettlementTokenInstructionCtrl.m_info = HL.Field(HL.Table)
|
|
|
|
|
|
SettlementTokenInstructionCtrl.m_tickTimeKey = HL.Field(HL.Number) << -1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self:_InitUI()
|
|
if arg == nil or type(arg) ~= "string" then
|
|
logger.error(ELogChannel.UI, "据点代币说明界面参数错误")
|
|
return
|
|
end
|
|
self:_InitData(arg)
|
|
self:_RefreshAllUI()
|
|
end
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl.OnShow = HL.Override() << function(self)
|
|
self.m_tickTimeKey = LuaUpdate:Add("Tick", function(deltaTime)
|
|
self:_RefreshTimeText()
|
|
end)
|
|
settlementSystem:AddSettlementSyncRequest(self.view.transform.name)
|
|
end
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl.OnClose = HL.Override() << function(self)
|
|
LuaUpdate:Remove(self.m_tickTimeKey)
|
|
settlementSystem:RemoveSettlementSyncRequest(self.view.transform.name)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._InitData = HL.Method(HL.Any) << function(self, arg)
|
|
|
|
self.m_stlId = arg
|
|
self.m_curLevel = settlementSystem:GetSettlementLevel(self.m_stlId)
|
|
local stlData = Tables.settlementBasicDataTable[self.m_stlId]
|
|
local stlLevelData = stlData.settlementLevelMap[self.m_curLevel]
|
|
local domainCfg = Tables.domainDataTable[stlData.domainId]
|
|
local moneyId = domainCfg.domainGoldItemId
|
|
local moneyItemData = Tables.itemTable[moneyId]
|
|
local basicProduceSpeed = stlLevelData.moneyPeriod * 3600 / Tables.settlementConst.produceMoneyDurationPerLoop
|
|
|
|
|
|
local officerId = settlementSystem:GetSettlementOfficerId(self.m_stlId)
|
|
local officerEnhanceRate = 0
|
|
if not string.isEmpty(officerId) then
|
|
for _, stlTagId in pairs(stlData.wantTagIdGroup) do
|
|
if settlementSystem:IsCharMatchSettlementTag(officerId, stlTagId) then
|
|
local stlTagData = Tables.settlementTagTable[stlTagId]
|
|
officerEnhanceRate = officerEnhanceRate + stlTagData.enhanceMoneyProduceSpeedRate
|
|
end
|
|
end
|
|
end
|
|
|
|
self.m_info = {
|
|
curMoney = settlementSystem:GetSettlementCurMoney(self.m_stlId),
|
|
maxMoney = stlLevelData.moneyMax,
|
|
moneyIcon = moneyItemData.iconId,
|
|
filledMoneyTime = 0,
|
|
basicProduceSpeed = basicProduceSpeed,
|
|
totalProduceSpeed = math.floor(basicProduceSpeed * (100 + officerEnhanceRate) / 100),
|
|
|
|
speedHasEnhance = false,
|
|
totalEnhance = 0,
|
|
|
|
officerEnhanceRate = officerEnhanceRate,
|
|
|
|
hasTimeLimitTdGainEffect = false,
|
|
timeLimitTdEffectLevelName = "",
|
|
timeLimitTdGainEffect = 0,
|
|
tdGainEffectExpirationTs = 0,
|
|
|
|
tdGainEffectLevelName = "",
|
|
tdGainEffect = 0,
|
|
}
|
|
|
|
self:_UpdateDefenseGainEffect()
|
|
|
|
self.m_info.speedHasEnhance = self.m_info.officerEnhanceRate > 0 or
|
|
self.m_info.hasTimeLimitTdGainEffect or
|
|
self.m_info.tdGainEffect > 0
|
|
self.m_info.totalEnhance = self.m_info.officerEnhanceRate + self.m_info.tdGainEffect + self.m_info.timeLimitTdGainEffect
|
|
self.m_info.totalProduceSpeed = math.floor(basicProduceSpeed * (100 + self.m_info.totalEnhance) / 100)
|
|
|
|
self.m_info.filledMoneyTime = self:_GetFilledMoneyTime()
|
|
end
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._UpdateDefenseGainEffect = HL.Method() << function(self)
|
|
local settlementData = settlementSystem:GetUnlockSettlementData(self.m_stlId)
|
|
if settlementData == nil then
|
|
return
|
|
end
|
|
if settlementData ~= nil and DateTimeUtils.GetCurrentTimestampBySeconds() < settlementData.tdGainEffectExpirationTs then
|
|
self.m_info.hasTimeLimitTdGainEffect = true
|
|
self.m_info.timeLimitTdEffectLevelName = self:_GetLevelGroupName(settlementData.timeLimitTdGainEffectByTdId)
|
|
self.m_info.timeLimitTdGainEffect = settlementData.timeLimitTdGainEffect
|
|
self.m_info.tdGainEffectExpirationTs = settlementData.tdGainEffectExpirationTs
|
|
end
|
|
|
|
if settlementData.tdGainEffect > 0 then
|
|
self.m_info.tdGainEffect = settlementData.tdGainEffect
|
|
self.m_info.tdGainEffectLevelName = self:_GetLevelGroupName(settlementData.tdGainEffectByTdId)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._InitUI = HL.Method() << function(self)
|
|
self.view.closeBtn.onClick:AddListener(function()
|
|
self:PlayAnimationOutAndClose()
|
|
end)
|
|
self.view.fullScreenCloseBtn.onClick:AddListener(function()
|
|
self:PlayAnimationOutAndClose()
|
|
end)
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
|
|
end
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._RefreshAllUI = HL.Method() << function(self)
|
|
self.view.curOwnMoneyTxt.text = self.m_info.curMoney
|
|
self.view.maxOwnMoneyTxt.text = "/" .. self.m_info.maxMoney
|
|
self.view.moneyIconImg1:LoadSprite(UIConst.UI_SPRITE_WALLET, self.m_info.moneyIcon)
|
|
self.view.moneyIconImg2:LoadSprite(UIConst.UI_SPRITE_WALLET, self.m_info.moneyIcon)
|
|
|
|
self.view.moneyProduceSpeedTxt.text = self.m_info.totalProduceSpeed
|
|
self.view.moneyProduceStateCtrl:SetState(self.m_info.speedHasEnhance and "HasEnhance" or "Normal")
|
|
self.view.basicSpeedTxt.text = string.format(Language.LUA_SETTLEMENT_BASIC_MONEY_PRODUCE_SPEED, self.m_info.basicProduceSpeed)
|
|
|
|
if self.m_info.speedHasEnhance then
|
|
self.view.improveNode.gameObject:SetActive(true)
|
|
local totalEnhance = self.m_info.totalEnhance
|
|
self.view.improvePercentTxt.text = string.format("%d%%", totalEnhance)
|
|
self.view.improveDescTxt:SetAndResolveTextStyle(string.format(Language.LUA_SETTLEMENT_MONEY_EXTRA_ENHANCE_TEXT, totalEnhance))
|
|
if self.m_info.officerEnhanceRate ~= 0 then
|
|
self.view.officerNode.gameObject:SetActive(true)
|
|
self.view.officerEffectNumTxt.text = string.format("%d%%", self.m_info.officerEnhanceRate)
|
|
else
|
|
self.view.officerNode.gameObject:SetActive(false)
|
|
end
|
|
self:_RefreshGainEffect()
|
|
else
|
|
self.view.improveNode.gameObject:SetActive(false)
|
|
end
|
|
self:_RefreshTimeText()
|
|
end
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._RefreshTimeText = HL.Method() << function(self)
|
|
local curTime = DateTimeUtils.GetCurrentTimestampBySeconds()
|
|
local leftSec = self:_GetFilledMoneyTime() - curTime
|
|
if leftSec <= 0 then
|
|
self.view.timeNode.gameObject:SetActive(false)
|
|
return
|
|
end
|
|
|
|
self.view.timeNode.gameObject:SetActive(true)
|
|
local showTimeStr = UIUtils.getFullLeftTime(leftSec)
|
|
self.view.timeTxt.text = string.format(Language.LUA_SETTLEMENT_FILLED_MONEY_TIME, showTimeStr)
|
|
end
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._GetFilledMoneyTime = HL.Method().Return(HL.Number) << function(self)
|
|
local curTime = DateTimeUtils.GetCurrentTimestampBySeconds()
|
|
local leftMoney = self.m_info.maxMoney - self.m_info.curMoney
|
|
if leftMoney <= 0 then
|
|
return curTime
|
|
end
|
|
|
|
local leftTime = leftMoney * 3600 / self.m_info.totalProduceSpeed
|
|
return curTime + leftTime
|
|
end
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._RefreshGainEffect = HL.Method() << function(self)
|
|
self.view.manualDefenseNode.gameObject:SetActive(false)
|
|
self.view.defensivePlanNode.gameObject:SetActive(false)
|
|
|
|
if self.m_info.hasTimeLimitTdGainEffect then
|
|
self.view.manualDefenseNode.gameObject:SetActive(true)
|
|
self.view.manualDefenseNode.gainSpeedTxt.text = string.format(Language.LUA_TD_LEVEL_COMPLETED_FORMAT, self.m_info.timeLimitTdEffectLevelName)
|
|
self.view.manualDefenseNode.buffManNumTxt.text = string.format("%d%%", math.floor(self.m_info.timeLimitTdGainEffect))
|
|
self.view.manualDefenseNode.durationNode:InitCountDownText(self.m_info.tdGainEffectExpirationTs, function()
|
|
self:_UpdateDefenseGainEffect()
|
|
self:_RefreshGainEffect()
|
|
end, UIUtils.getLeftTimeToSecond)
|
|
end
|
|
|
|
|
|
if self.m_info.tdGainEffect > 0 then
|
|
self.view.defensivePlanNode.gameObject:SetActive(true)
|
|
self.view.defensivePlanNode.defensivePlanTxt.text = string.format(Language.LUA_TD_LEVEL_COMPLETED_FORMAT, self.m_info.tdGainEffectLevelName)
|
|
self.view.defensivePlanNode.buffNumTxt.text = string.format("%d%%", math.floor(self.m_info.tdGainEffect))
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._OnRemainMoneyModify = HL.Method(HL.Any) << function(self, arg)
|
|
local stlId, curMoney = unpack(arg)
|
|
if self.m_stlId ~= stlId or self.m_info == nil then
|
|
return
|
|
end
|
|
|
|
self.m_info.curMoney = curMoney
|
|
self.m_info.filledMoneyTime = self:_GetFilledMoneyTime()
|
|
self.view.curOwnMoneyTxt.text = curMoney
|
|
end
|
|
|
|
|
|
|
|
|
|
SettlementTokenInstructionCtrl._GetLevelGroupName = HL.Method(HL.String).Return(HL.String) << function(self, tdId)
|
|
local levelName = ""
|
|
local _, tdLevelData = Tables.towerDefenseTable:TryGetValue(tdId)
|
|
if tdLevelData then
|
|
local _, groupTableData = Tables.towerDefenseGroupTable:TryGetValue(tdLevelData.tdGroup)
|
|
if groupTableData then
|
|
levelName = groupTableData.name
|
|
end
|
|
end
|
|
return levelName
|
|
end
|
|
|
|
|
|
|
|
HL.Commit(SettlementTokenInstructionCtrl)
|