extends EditorNode3DGizmoPlugin func _init(): print("[gizmo] _init") create_material("main", Color(1,0,1), false, true, false) func _get_gizmo_name() -> String: return "PortalGizmo" func _has_gizmo(for_node_3d: Node3D) -> bool: var result: bool = for_node_3d is Portal if result: print("[gizmo] _has_gizmo: " + for_node_3d.name) return result func _redraw(gizmo): var node3d = gizmo.get_node_3d() as Portal print("[gizmo] _redraw: " + node3d.name) gizmo.clear() # Always clear the gizmo if node3d not in EditorInterface.get_selection().get_selected_nodes(): return # If not selected, don't draw anything var lines = PackedVector3Array() lines.push_back(Vector3(0, 0, 0)) if node3d.exit_portal != null: lines.push_back(node3d.to_local(node3d.exit_portal.global_position)) else: lines.push_back(Vector3(5, 5, 5)) #var handles = PackedVector3Array() #handles.push_back(Vector3(0, 1, 0)) #handles.push_back(Vector3(0, 2, 0)) gizmo.add_lines(lines, get_material("main", gizmo), false) #gizmo.add_handles(handles, get_material("handles", gizmo), [])