Files
Endfield-Data/LuaScripts/UI/Panels/PRTSMain/PRTSMainCtrl.lua
2025-12-02 20:37:18 +07:00

222 lines
5.4 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.PRTSMain
local PHASE_ID = PhaseId.PRTS
PRTSMainCtrl = HL.Class('PRTSMainCtrl', uiCtrl.UICtrl)
PRTSMainCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_UNLOCK_PRTS] = '_OnUnlockStoryColl',
[MessageConst.ON_INVESTIGATE_FINISHED] = '_OnInvestigateFinished',
}
PRTSMainCtrl.m_info = HL.Field(HL.Table)
PRTSMainCtrl.m_textPageType = HL.Field(HL.String) << ""
PRTSMainCtrl.m_documentPageType = HL.Field(HL.String) << ""
PRTSMainCtrl.m_multimediaPageType = HL.Field(HL.String) << ""
PRTSMainCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self:_InitUI()
self:_InitData()
self:_UpdateData()
self:_RefreshAllUI()
end
PRTSMainCtrl._OnUnlockStoryColl = HL.Method(HL.Table) << function(self, args)
self:_UpdateData()
self:_RefreshAllUI()
end
PRTSMainCtrl._OnInvestigateFinished = HL.Method(HL.Table) << function(self, args)
self:_UpdateData()
self:_RefreshAllUI()
end
PRTSMainCtrl._InitData = HL.Method() << function(self)
self.m_textPageType = "text"
self.m_documentPageType = "document"
self.m_multimediaPageType = "multi_media"
end
PRTSMainCtrl._UpdateData = HL.Method() << function(self)
self.m_info = {
textCount = GameInstance.player.prts:GetUnlockCountByPageType(self.m_textPageType),
documentCount = GameInstance.player.prts:GetUnlockCountByPageType(self.m_documentPageType),
multimediaCount = GameInstance.player.prts:GetUnlockCountByPageType(self.m_multimediaPageType),
investFinishedCount = 0,
investOnGoingCount = 0,
}
self:_UpdateInvestigateInfo()
end
PRTSMainCtrl._UpdateInvestigateInfo = HL.Method() << function(self)
local count = 0
local ongoingCount = 0
for id, _ in pairs(Tables.prtsInvestigate) do
if (GameInstance.player.prts:IsInvestigateFinished(id)) then
count = count + 1
else
local curCount = GameInstance.player.prts:GetStoryCollUnlockCount(id)
if curCount > 0 then
ongoingCount = ongoingCount + 1
end
end
end
self.m_info.investFinishedCount = count
self.m_info.investOnGoingCount = ongoingCount
end
PRTSMainCtrl._InitUI = HL.Method() << function(self)
self.view.closeBtn.onClick:AddListener(function()
PhaseManager:PopPhase(PhaseId.PRTS)
end)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
self.view.textTab.redDot:InitRedDot("PRTSText")
self.view.textTab.gotoBtn.onClick:AddListener(function()
self:_OnClickStoryCollTab(self.m_textPageType, self.m_info.textCount)
end)
self.view.documentTab.redDot:InitRedDot("PRTSDocument")
self.view.documentTab.gotoBtn.onClick:AddListener(function()
self:_OnClickStoryCollTab(self.m_documentPageType, self.m_info.documentCount)
end)
self.view.multimediaTab.redDot:InitRedDot("PRTSMultimedia")
self.view.multimediaTab.gotoBtn.onClick:AddListener(function()
self:_OnClickStoryCollTab(self.m_multimediaPageType, self.m_info.multimediaCount)
end)
self.view.investigateTab.redDot:InitRedDot("PRTSInvestigateTab")
self.view.investigateTab.gotoBtn.onClick:AddListener(function()
local totalCount = self.m_info.investFinishedCount + self.m_info.investOnGoingCount
if totalCount > 0 then
PhaseManager:OpenPhase(PhaseId.PRTSInvestigateGallery)
else
self:Notify(MessageConst.SHOW_TOAST, Language.LUA_PRTS_INVESTIGATE_NOT_FOUND_COLL_TOAST)
end
end)
end
PRTSMainCtrl._OnClickStoryCollTab = HL.Method(HL.String, HL.Number) << function(self, pageType, count)
if count > 0 then
PhaseManager:OpenPhase(PhaseId.PRTSStoryCollGallery, { pageType = pageType })
else
self:Notify(MessageConst.SHOW_TOAST, Language.LUA_PRTS_INVESTIGATE_NOT_FOUND_COLL_TOAST)
end
end
PRTSMainCtrl._RefreshAllUI = HL.Method() << function(self)
local viewRef = self.view
self:_OnRefreshStoryCollTab(viewRef.textTab, self.m_info.textCount)
self:_OnRefreshStoryCollTab(viewRef.documentTab, self.m_info.documentCount)
self:_OnRefreshStoryCollTab(viewRef.multimediaTab, self.m_info.multimediaCount)
local count = self.m_info.investFinishedCount
local ongoingCount = self.m_info.investOnGoingCount
local hasOngoing = ongoingCount > 0
if hasOngoing then
viewRef.ongoingCountTxt.text = ongoingCount
viewRef.ongoingCountShadowTxt.text = ongoingCount
viewRef.investCountState:SetState("Ongoing")
elseif count > 0 then
viewRef.finishedCountTxt.text = count
viewRef.finishedCountShadowTxt.text = count
viewRef.investCountState:SetState("Finished")
else
viewRef.finishedCountTxt.text = count
viewRef.finishedCountShadowTxt.text = count
viewRef.investCountState:SetState("Finished")
end
end
PRTSMainCtrl._OnRefreshStoryCollTab = HL.Method(HL.Any, HL.Number) << function(self, uiRef, count)
local color = count > 0 and self.view.config.NUM_COLOR_UNLOCK or self.view.config.NUM_COLOR_LOCK
uiRef.countTxt.text = count
uiRef.countTxt.color = color
end
PRTSMainCtrl._CloseWithAnimation = HL.Method() << function(self)
PhaseManager:PopPhase(PHASE_ID)
end
HL.Commit(PRTSMainCtrl)