122 lines
3.7 KiB
Lua
122 lines
3.7 KiB
Lua
|
|
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.FacPowerPoleAutoConnectHint
|
|
|
|
FacPowerPoleAutoConnectHintCtrl = HL.Class('FacPowerPoleAutoConnectHintCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.m_trackerPool = HL.Field(HL.Table)
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.m_inBuildingMode = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
|
|
}
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.m_trackerPool = {}
|
|
self.view.tracker.gameObject:SetActive(false)
|
|
end
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnEnterBuildingMode = HL.StaticMethod(HL.Opt(HL.Any)) << function()
|
|
local ctrl = FacPowerPoleAutoConnectHintCtrl.AutoOpen(PANEL_ID, nil, false)
|
|
ctrl.m_inBuildingMode = true
|
|
end
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnExitBuildingMode = HL.StaticMethod() << function()
|
|
local ctrl = FacPowerPoleAutoConnectHintCtrl.AutoOpen(PANEL_ID, nil, false)
|
|
ctrl.m_inBuildingMode = false
|
|
ctrl:ClearAllHints()
|
|
end
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnBuild = HL.StaticMethod(HL.Table) << function(args)
|
|
local ctrl = FacPowerPoleAutoConnectHintCtrl.AutoOpen(PANEL_ID, nil, false)
|
|
ctrl:OnBuildModeUpdated(args.buildingTypeId, args.position)
|
|
end
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnMove = HL.StaticMethod(HL.Table) << function(args)
|
|
local ctrl = FacPowerPoleAutoConnectHintCtrl.AutoOpen(PANEL_ID, nil, false)
|
|
ctrl:OnMoveModeUpdated(args.buildingTypeId, args.position, args.nodeId)
|
|
end
|
|
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl._UpdateTrackers = HL.Method() << function(self)
|
|
local buildingMode = GameInstance.remoteFactoryManager.interact.currentBuildingMode
|
|
if not buildingMode then
|
|
return
|
|
end
|
|
local infos = buildingMode.autoConnectCandidateList
|
|
if not infos then
|
|
return
|
|
end
|
|
for i = 0, infos.Count - 1 do
|
|
local info = infos[i]
|
|
local screenPos, isInside = UIUtils.objectPosToUI(info.Item3, self.uiCamera)
|
|
local uiPos, uiAngle, isOutBound = UIUtils.mapScreenPosToEllipseEdge(screenPos, self.view.config.ELLIPSE_X_RADIUS, self.view.config.ELLIPSE_Y_RADIUS)
|
|
local trackKey = i + 1
|
|
if not self.m_trackerPool[trackKey] then
|
|
self.m_trackerPool[trackKey] = self:_CreateNewTracker()
|
|
end
|
|
local item = self.m_trackerPool[trackKey]
|
|
item.obj:SetActive(true)
|
|
item.tracker:UpdatePosition(uiPos, uiAngle, isOutBound)
|
|
item.tracker:UpdateDistance(info.Item4)
|
|
item.tracker:UpdateNodeType(info.Item1.nodeType)
|
|
item.tracker:UpdateStatus(info.Item5)
|
|
end
|
|
for i = infos.Count + 1, #self.m_trackerPool do
|
|
self.m_trackerPool[i].obj:SetActive(false)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnBuildModeUpdated = HL.Method(HL.String, Vector3) << function(self, buildingTypeId, position)
|
|
if not self.m_inBuildingMode then
|
|
return
|
|
end
|
|
self:_UpdateTrackers()
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.OnMoveModeUpdated = HL.Method(HL.String, Vector3, HL.Any) << function(self, buildingTypeId, position, nodeId)
|
|
if not self.m_inBuildingMode then
|
|
return
|
|
end
|
|
self:_UpdateTrackers()
|
|
end
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl.ClearAllHints = HL.Method() << function(self)
|
|
for i, v in ipairs(self.m_trackerPool) do
|
|
v.obj:SetActive(false)
|
|
end
|
|
end
|
|
|
|
|
|
FacPowerPoleAutoConnectHintCtrl._CreateNewTracker = HL.Method().Return(HL.Table) << function(self)
|
|
local obj = CSUtils.CreateObject(self.view.tracker.gameObject, self.view.main.transform)
|
|
obj:SetActive(true)
|
|
local item = {}
|
|
item.obj = obj
|
|
item.tracker = obj:GetComponent(typeof(CS.Beyond.UI.UIPowerPoleAutoConnectTracker))
|
|
return item
|
|
end
|
|
|
|
HL.Commit(FacPowerPoleAutoConnectHintCtrl) |