Files
Endfield-Data/LuaScripts/UI/Widgets/SpaceshipClueCollectNode.lua
2026-01-31 21:42:01 +07:00

177 lines
5.8 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
SpaceshipClueCollectNode = HL.Class('SpaceshipClueCollectNode', UIWidgetBase)
SpaceshipClueCollectNode.m_spaceship = HL.Field(HL.Userdata)
SpaceshipClueCollectNode.m_isOpen = HL.Field(HL.Boolean) << false
SpaceshipClueCollectNode._OnFirstTimeInit = HL.Override() << function(self)
SpaceshipUtils.InitMoneyLimitCell(self.view.moneyCell, Tables.spaceshipConst.creditItemId)
self.view.operator.stateController:SetState("Operator")
self.view.operator.rewardText.text = Tables.spaceshipConst.generateClueCreditRewardCount
self.m_spaceship = GameInstance.player.spaceship
local nowProgress = self.m_spaceship:GetNextStationClueNowProgress()
self.view.operator.slider.value = nowProgress / Tables.spaceshipConst.clueCollectPointMaxValue
self.view.operator.txtImg.text = UIUtils.getLeftTimeToSecond(self.m_spaceship:GetNextStationClueLeftTime())
self.view.btnClose.onClick:AddListener(function()
Notify(MessageConst.ON_POP_SPACESHIP_GUEST_ROOM_MAIN_PANEL)
end)
self.view.hotArea.onClick:AddListener(function()
Notify(MessageConst.ON_POP_SPACESHIP_GUEST_ROOM_MAIN_PANEL)
end)
self:_TickProgress(nowProgress)
self:_StartCoroutine(function()
while true do
coroutine.wait(UIConst.COMMON_UI_TIME_UPDATE_INTERVAL)
nowProgress = self.m_spaceship:GetNextStationClueNowProgress()
self:_TickProgress(nowProgress)
end
end)
self.view.guestroom.stateController:SetState("Guestroom")
self.view.guestroom.rewardText.text = Tables.spaceshipConst.generateClueCreditRewardCount
self.view.guestroom.btnReceive.onClick:AddListener(function()
self.m_spaceship:GuestRoomRecvClue()
end)
self:RegisterMessage(MessageConst.ON_SPACESHIP_RECV_CLUE, function(args)
local instId, isBase = unpack(args)
if isBase then
self:RefreshState()
end
end)
self:RegisterMessage(MessageConst.ON_SPACESHIP_CLUE_FULL, function(args)
self:RefreshState()
end)
self:RegisterMessage(MessageConst.ON_SPACESHIP_CLUE_INFO_CHANGE, function()
self:RefreshState()
end)
self:RegisterMessage(MessageConst.ON_SPACESHIP_GUEST_ROOM_CLUE_REWARD_ITEM, function(args)
local items, sources = unpack(args)
SpaceshipUtils.ShowClueOutcomePopup(items, sources, self.view.moneyCell, nil)
end)
end
SpaceshipClueCollectNode.InitSpaceshipClueCollectNode = HL.Method() << function(self)
self:_FirstTimeInit()
self:FadeIn()
self:RefreshState()
end
SpaceshipClueCollectNode.RefreshState = HL.Method() << function(self)
local clueData = self.m_spaceship:GetClueData()
if not clueData then
return
end
local operatorText
if self.m_spaceship:IsClueSelfLimitBeenReached() and self.m_spaceship:GetNextStationClueNowProgress() >= Tables.spaceshipConst.clueCollectPointMaxValue then
operatorText = Language.LUA_SPACESHIP_CLUE_STORAGE_LIMIT
elseif self.m_spaceship:IsGuestRoomClueShutDown() then
operatorText = Language.LUA_SPACESHIP_CLUE_ROLE_IS_NOT_WORKING
elseif self.m_spaceship:IsGuestRoomClueIdle() then
operatorText = Language.LUA_SPACESHIP_CLUE_NEED_ROLE_WORKING
else
operatorText = Language.LUA_SPACESHIP_CLUE_IS_COLLECTING
end
self.view.operator.txtContent.text = operatorText
local guestRoomText
if self.m_spaceship:IsClueSelfLimitBeenReached() then
guestRoomText = Language.LUA_SPACESHIP_CLUE_STORAGE_LIMIT
elseif clueData.dailyClueIndex ~= 0 then
guestRoomText = Language.LUA_SPACESHIP_CLUE_CAN_COLLECT
elseif self.m_spaceship:IsGuestRoomClueIdle() then
guestRoomText = Language.LUA_SPACESHIP_CLUE_NEED_ROLE_WORKING
else
guestRoomText = Language.LUA_SPACESHIP_CLUE_FIXED_TIME_OUTPUT
end
self.view.guestroom.txtContent.text = guestRoomText
local canNotReceive = clueData.dailyClueIndex == 0 or self.m_spaceship:IsClueSelfLimitBeenReached()
self.view.guestroom.btnReceive.gameObject:SetActive(not canNotReceive)
self.view.guestroom.disableState.gameObject:SetActive(canNotReceive)
if clueData.dailyClueIndex ~= 0 then
self.view.guestroom.clueCellStateController:SetState(clueData.dailyClueIndex)
self.view.guestroom.clueCellStateController:SetState("NewClue")
else
self.view.guestroom.clueCellStateController:SetState("NoClue")
end
self.view.guestroom.txtImg.text = ""
local format = "%s/%s"
local clueCount = self.m_spaceship:GetClueSelfClueCount()
if clueCount == Tables.spaceshipConst.selfClueStorageMaxCount then
format = "<color=#e54545>%s</color>/%s"
end
self.view.txtCapacity.text = string.format(format, clueCount, Tables.spaceshipConst.selfClueStorageMaxCount)
end
SpaceshipClueCollectNode._TickProgress = HL.Method(HL.Number) << function(self, nowProgress)
self.view.operator.slider.value = nowProgress / Tables.spaceshipConst.clueCollectPointMaxValue
local time = self.m_spaceship:GetNextStationClueLeftTime()
if time == -1 then
time = Language.LUA_SPACESHIP_CLUE_EMPTY_TIME
self.view.operator.txtImg.text = time
else
self.view.operator.txtImg.text = UIUtils.getLeftTimeToSecond(time)
end
end
SpaceshipClueCollectNode.FadeIn = HL.Method() << function(self)
if self.m_isOpen then
return
end
self.m_isOpen = true
self.view.animationWrapper:ClearTween()
self.view.animationWrapper:PlayInAnimation()
end
SpaceshipClueCollectNode.FadeOut = HL.Method() << function(self)
if not self.m_isOpen then
return
end
self.m_isOpen = false
self.view.animationWrapper:PlayOutAnimation(function()
if self.m_isOpen then
return
end
self.view.gameObject:SetActive(false)
end)
end
HL.Commit(SpaceshipClueCollectNode)
return SpaceshipClueCollectNode