Assets/_MolcaDT/Code/Scripts/POI/POIManager.csAssets/_MolcaDT/Code/Scripts/POI/POIFollowTarget.csAssets/_MolcaDT/Code/Scripts/Handler/Panel Handler/*
When to use
Use this page when wiring machine selection UX: screen/world POI indicators, camera follow behavior, and right/side panel detail presentation.POI layer
POIManager is a central runtime controller:
- Spawns/updates
POIHandlerUI items - Tracks follow targets and offscreen behavior
- Applies overlap/stacking rules and layout padding
poiHandlerParent, poiHandlerPrefab, offscreen mode, stacking/padding parameters.
Panel handler layer
Handlers underHandler/Panel Handler/ split machine detail concerns:
- Overview/Data panels (
OverviewPanelHandler,DataPanelHandler) - Working order flows (
WorkingOrder*) - Documentation/info/config children panel handlers
Code
Singleton + layout —POIManager (execution order 2000) expects CameraController.instance for world→screen projection and poiHandlerParent as a RectTransform canvas area. InstantiatePOIButton spawns from poiHandlerPrefab (or an override prefab) and optional Action<POIHandler> after creation; ChangePOIButton(POIType) hides all managed cards then drives PlantManager machines’ POI mode; SelectPOIButton(List<MachineInfo>) filters selectable machines, derives POIType from LevelData, and invokes FactoryMenuManager.InvokePOIButton.
Handler — Each POIHandler pairs with POIFollowTarget on the same object, resolves MachineInfo, and toggles label/overview panels. POIFollowTarget drives world anchor position; POIManager.LateUpdate runs overlap resolution when allowStacking is false.
Troubleshooting
- Null ref in
POIManager.Awake—CameraController.instanceandpoiHandlerParentmust exist in the loaded scene; POI manager typically lives under the same UI hierarchy as the twin camera rig. - POIs not visible — Confirm
POIFollowTargetcomponents are active,MachineInfo/ObjectReferencewiring matches selection flow, and canvas render mode works withCameraController’s camera. - Heavy overlap or jitter — Increase
itemPadding,resolveIterations, or enableallowStacking; switchcardOffscreenModebetween ClampToCanvasEdges and HideWhenOffscreen per UX. - Overview empty — Same as mapping: network layer must deliver
ParameterDatumlists intoOverviewPanelHandler/DataPanelHandlerafterMachineInfoselection. - Duplicate
POIManager— Second instance **Destroy**s itself; keep a single manager in the DT bootstrap scene.