38 lines
1006 B
GDScript
38 lines
1006 B
GDScript
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)
|