sk-client/Assets/ManagedResources/~Lua/Modules/EnergyBase/EnergyDetails.lua

242 lines
8.5 KiB
Lua

require("Base/BasePanel")
EnergyDetails = Inherit(BasePanel)
local this = EnergyDetails
local BaseResourceConfig = ConfigManager.GetConfig(ConfigName.BaseResourceConfig)
local ItemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local selectNum = 0
local timer = nil
local selectPos, curData, curPlayerId, changeData
function this:InitComponent()
this.mask = Util.GetGameObject(this.gameObject, "mask")
this.btnBack = Util.GetGameObject(this.gameObject, "btnBack")
this.btnReduce = Util.GetGameObject(this.gameObject, "btnReduce")
this.btnAdd = Util.GetGameObject(this.gameObject, "btnAdd")
this.btnMax = Util.GetGameObject(this.gameObject, "btnMax")
this.fight = Util.GetGameObject(this.gameObject, "fight")
this.limit = Util.GetGameObject(this.gameObject, "limit"):GetComponent("Text")
this.obtain = Util.GetGameObject(this.gameObject, "obtain"):GetComponent("Text")
this.reward = Util.GetGameObject(this.gameObject, "reward"):GetComponent("Image")
this.btnDispatch = Util.GetGameObject(this.gameObject, "btnDispatch")
this.changeTime = Util.GetGameObject(this.gameObject, "time"):GetComponent("Text")
this.time = Util.GetGameObject(this.fight, "obtain/time"):GetComponent("Text")
end
function this:BindEvent()
Util.AddClick(this.mask, function()
self:ClosePanel()
end)
Util.AddClick(this.btnBack, function()
self:ClosePanel()
end)
Util.AddClick(this.btnDispatch, function()
EnergyBaseManager.BaseCoolieDispatch(selectPos, curPlayerId, selectNum, function ()
self:ClosePanel()
end, {itemID = this.itemID, itemNum = this.itemNum, itemTime = this.itemTime})
end)
Util.AddClick(this.btnReduce, function()
selectNum = selectNum - 1
if selectNum < 0 then
selectNum = 0
end
this.SetTime()
this.SetCount()
end)
Util.AddClick(this.btnAdd, function()
selectNum = selectNum + 1
local baseInfo = EnergyBaseManager.GetBaseInfo()
local config = BaseResourceConfig[curData.resourceId]
local num = 0
if curPlayerId == PlayerManager.uid then
num = curData.collieCount
else
num = curData.snatchCollieCount
end
if selectNum > baseInfo.freeCoolieCount + num then
selectNum = baseInfo.freeCoolieCount + num
end
if selectNum > config.DispatchMax then
selectNum = config.DispatchMax
end
this.SetTime()
this.SetCount()
end)
Util.AddClick(this.btnMax, function()
local baseInfo = EnergyBaseManager.GetBaseInfo()
local num = 0
if curPlayerId == PlayerManager.uid then
num = curData.collieCount
else
num = curData.snatchCollieCount
end
selectNum = baseInfo.freeCoolieCount + num
local config = BaseResourceConfig[curData.resourceId]
if selectNum > config.DispatchMax then
selectNum = config.DispatchMax
end
this.SetTime()
this.SetCount()
end)
end
function this:AddListener()
end
function this:RemoveListener()
end
function this:OnOpen(args)
selectPos, curData, curPlayerId = args.pos, args.resource, args.playerId
if curPlayerId == PlayerManager.uid then
selectNum = curData.collieCount
else
selectNum = curData.snatchCollieCount
end
if selectNum == 0 then
local baseInfo = EnergyBaseManager.GetBaseInfo()
if baseInfo.freeCoolieCount > 0 then
selectNum = 1
end
end
local config = BaseResourceConfig[curData.resourceId]
this.limit.text = GetLanguageStrById(50476)..config.DispatchMax
this.reward.sprite = Util.LoadSprite(GetResourcePath(ItemConfig[config.Reward[1]].ResourceID))
this.obtain.text = config.Reward[2]
Util.GetGameObject(this.fight, "obtain/icon"):GetComponent("Image").sprite = Util.LoadSprite(GetResourcePath(ItemConfig[config.Reward[1]].ResourceID))
Util.GetGameObject(this.fight, "obtain/lv"):GetComponent("Text").text = "Lv.<size=30>"..config.Level.."</size>"
Util.GetGameObject(this.fight, "left/num"):GetComponent("Text").text = curData.collieCount
Util.GetGameObject(this.fight, "right/num"):GetComponent("Text").text = curData.snatchCollieCount
Util.GetGameObject(this.fight, "left/arrow"):SetActive(curData.collieCount >= curData.snatchCollieCount)
Util.GetGameObject(this.fight, "right/arrow"):SetActive(curData.collieCount < curData.snatchCollieCount)
Util.GetGameObject(this.fight, "left"):SetActive(not not curData and curData.collieCount > 0)
Util.GetGameObject(this.fight, "right"):SetActive(not not curData and curData.snatchCollieCount > 0)
this.noCompetitionTime = 0
if curPlayerId == PlayerManager.uid then
this.noCompetitionTime = BaseResourceConfig[curData.resourceId].CollectTime*(1-curData.progress)
else
this.noCompetitionTime = BaseResourceConfig[curData.resourceId].CollectTime*(1+curData.progress)
end
this.time.text = TimeToHMS(this.noCompetitionTime)
this.SetTime()
this.SetCount()
this.TimeDown()
--数据上报用
this.itemID = config.Reward[1]
this.itemNum = config.Reward[2]
end
function this:OnShow()
end
function this:OnSortingOrderChange()
-- local sortingOrder = self.sortingOrder
-- Util.GetGameObject(this.fight, "obtain/GameObject/RobotEffect"):GetComponent("SortingGroup").sortingOrder = sortingOrder + 10
end
function this:OnClose()
if timer then
timer:Stop()
timer = nil
end
end
function this:OnDestroy()
selectPos = 0
if timer then
timer:Stop()
timer = nil
end
end
function this.SetTime()
local fatigue = EnergyBaseManager.GetFatigue()
changeData = {}
if curPlayerId == PlayerManager.uid then
changeData = {
collieCount = selectNum,
snatchCollieCount = curData.snatchCollieCount,
progress = curData.progress,
redSpeed = fatigue[2].CollectSpeed,
blueSpeed = curData.blueSpeed,
resourceId = curData.resourceId,
startTime = curData.startTime or 0
}
else
changeData = {
collieCount = curData.collieCount,
snatchCollieCount = selectNum,
progress = curData.progress,
redSpeed = curData.redSpeed,
blueSpeed = fatigue[2].CollectSpeed,
resourceId = curData.resourceId,
startTime = curData.startTime or 0
}
end
local finalTime = EnergyBaseManager.ComputingTime(changeData)
if curData.startTime > 0 then
finalTime = finalTime - GetTimeStamp()
end
if changeData.collieCount == 0 and changeData.snatchCollieCount == 0 then
finalTime = this.noCompetitionTime
end
this.changeTime.text = TimeToHMS(finalTime)
--数据上报用
this.itemTime = finalTime
end
function this.SetCount()
local baseInfo = EnergyBaseManager.GetBaseInfo()
local num = 0
if curPlayerId == PlayerManager.uid then
num = curData.collieCount
else
num = curData.snatchCollieCount
end
local max = BaseResourceConfig[curData.resourceId].DispatchMax
if baseInfo.freeCoolieCount+num > max then
num = max
else
num = baseInfo.freeCoolieCount+num
end
Util.GetGameObject(this.gameObject, "count"):GetComponent("Text").text = selectNum.." / "..num
end
function this.TimeDown()
if timer then
timer:Stop()
timer = nil
end
timer = Timer.New(function()
if curData.collieCount > 0 or curData.snatchCollieCount > 0 then
local finalTime = EnergyBaseManager.ComputingTime(curData)
finalTime = finalTime - GetTimeStamp()
if finalTime < 0 then
finalTime = 0
end
if finalTime >= 0 then
this.time.text = TimeToHMS(finalTime)
end
end
if selectNum > 0 then
if changeData.collieCount > 0 or changeData.snatchCollieCount > 0 then
local finalTime = EnergyBaseManager.ComputingTime(changeData)
if curData.startTime > 0 then
finalTime = finalTime - GetTimeStamp()
end
if finalTime < 0 then
finalTime = 0
end
if finalTime >= 0 then
this.changeTime.text = TimeToHMS(finalTime)
--数据上报用
this.itemTime = finalTime
end
end
end
end, 1, -1, true)
timer:Start()
end
return EnergyDetails