extends Node3D ## World-space main menu: hosts the 2D join_panel on an XRToolsViewport2DIn3D so ## the player can point at it with a controller laser. Re-emits the panel's ## intents; main.gd drives the actual networking. signal host_pressed() signal join_pressed(ip: String) signal solo_pressed() @onready var _vp: XRToolsViewport2DIn3D = $Viewport2Din3D func _ready() -> void: # The viewport instantiates its 2D scene during its own _ready; connect once # that has happened. _connect_scene.call_deferred() func _connect_scene() -> void: _vp.connect_scene_signal("host_pressed", func(): host_pressed.emit()) _vp.connect_scene_signal("join_pressed", func(ip): join_pressed.emit(ip)) _vp.connect_scene_signal("solo_pressed", func(): solo_pressed.emit()) func show_menu() -> void: visible = true func hide_menu() -> void: visible = false func set_status(text: String) -> void: var scene := _vp.get_scene_instance() if scene and scene.has_method("set_status"): scene.set_status(text)