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

142 lines
3.9 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.MapMarkDetail
local PHASE_ID = PhaseId.MapMarkDetail
local MarkType = GEnums.MarkType
MapMarkDetailCtrl = HL.Class('MapMarkDetailCtrl', uiCtrl.UICtrl)
MapMarkDetailCtrl.m_markInstId = HL.Field(HL.String) << ""
MapMarkDetailCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_TRACKING_MAP_MARK] = '_OnMarkTrackingStateChanged' ,
}
MapMarkDetailCtrl.OnCreate = HL.Override(HL.Any) << function(self, args)
local markInstId = args.markInstId
self.view.closeBtn.onClick:AddListener(function()
self:_CloseDetail(false)
end)
self.view.fullScreenBtn.onClick:AddListener(function()
self:_CloseDetail(true)
end)
self:_SimpleRefreshDetailContent(markInstId)
end
MapMarkDetailCtrl.OnShowLevelMapMarkDetail = HL.StaticMethod(HL.Any) << function(args)
if PhaseManager:IsPhaseRepeated(PHASE_ID) then
local ctrl = UIManager:AutoOpen(PANEL_ID)
ctrl:RefreshDetail(args.markInstId)
else
PhaseManager:OpenPhase(PHASE_ID, args)
end
end
MapMarkDetailCtrl.RefreshDetail = HL.Method(HL.String) << function(self, markInstId)
self:_SimpleRefreshDetailContent(markInstId)
end
MapMarkDetailCtrl._CloseDetail = HL.Method(HL.Boolean) << function(self, fastMode)
Notify(MessageConst.HIDE_LEVEL_MAP_MARK_DETAIL)
end
MapMarkDetailCtrl._OnMarkTrackingStateChanged = HL.Method(HL.Any) << function(self, args)
self:_RefreshTrackButtonText()
end
MapMarkDetailCtrl._SimpleRefreshDetailContent = HL.Method(HL.String) << function(self, markInstId)
local markSuccess, markData = GameInstance.player.mapManager:GetMarkInstRuntimeData(markInstId)
if not markSuccess then
return
end
local templateId = markData.templateId
local tempSuccess, markTemplateData = Tables.mapMarkTempTable:TryGetValue(templateId)
if not tempSuccess then
return
end
self.m_markInstId = markInstId
if markData.missionInfo ~= nil then
self.view.teleportBtn.gameObject:SetActive(false)
self.view.trackBtn.gameObject:SetActive(false)
else
local tpValid = (markTemplateData.markType == MarkType.CampFire or
markTemplateData.markType == MarkType.HUB)
and markData.isActive
if tpValid then
self.view.teleportBtn.gameObject:SetActive(true)
self.view.trackBtn.gameObject:SetActive(false)
self.view.teleportBtn.onClick:AddListener(function()
if markTemplateData.markType == MarkType.CampFire then
Utils.teleportToPosition(markData.levelId, markData.position + Vector3(2, 0 , 0))
else
Utils.teleportToPosition(markData.levelId, markData:GetTeleportPosition())
end
end)
else
self.view.teleportBtn.gameObject:SetActive(false)
self.view.trackBtn.gameObject:SetActive(true)
self.view.trackBtn.onClick:AddListener(function()
GameInstance.player.mapManager:TrackMark(markInstId, markInstId ~= GameInstance.player.mapManager.trackingMarkInstId)
end)
self:_RefreshTrackButtonText()
end
end
local commonNode = self.view.common
commonNode.title.text.text = markTemplateData.name
commonNode.desc.text = markTemplateData.desc
local levelSuccess, levelDesc = Tables.levelDescTable:TryGetValue(markData.levelId)
if levelSuccess then
commonNode.subTitle.text.text = levelDesc.showName
end
end
MapMarkDetailCtrl._RefreshTrackButtonText = HL.Method() << function(self)
local isTracking = self.m_markInstId == GameInstance.player.mapManager.trackingMarkInstId
self.view.trackText.text = isTracking and Language["ui_map_common_tracer_cancel"] or Language["ui_map_common_tracer"]
end
HL.Commit(MapMarkDetailCtrl)