[gd_scene load_steps=5 format=3 uid="uid://ma1if3sjox6i"] [ext_resource type="PackedScene" uid="uid://boviiugcnfyrj" path="res://modes/demo.tscn" id="1_50a80"] [ext_resource type="PackedScene" uid="uid://bjctlqvs33nqy" path="res://interfaces/menus/boot/boot.tscn" id="1_acy5o"] [ext_resource type="PackedScene" uid="uid://bvwxfgygm2xb8" path="res://modes/multiplayer.tscn" id="2_g8xeb"] [sub_resource type="GDScript" id="GDScript_e61dq"] script/source = "class_name Game extends Node3D @export_category(\"Modes\") @export var SINGLEPLAYER : PackedScene @export var MULTIPLAYER : PackedScene var mode : Node: set(new_mode): # clean up previous mode if mode != null: mode.queue_free() # keep reference to new mode mode = new_mode # setup new mode if new_mode != null: add_child(new_mode) Input.mouse_mode = Input.MOUSE_MODE_CAPTURED else: Input.mouse_mode = Input.MOUSE_MODE_VISIBLE func _ready() -> void: $BootMenu.start_demo.connect(_start_demo) $BootMenu/Multiplayer.start_server.connect(_start_server) $BootMenu/Multiplayer.join_server.connect(_join_server) func _unhandled_input(event : InputEvent) -> void: # escape key pressed if event.is_action_pressed(\"exit\"): # game modes cleanup if mode is Multiplayer: multiplayer.multiplayer_peer.close() # reset game mode mode = null # check for debug build if not OS.is_debug_build(): # exit with success get_tree().quit(0) else: # show boot menu $BootMenu.show() # switch window mode if event.is_action_pressed(\"window_mode\"): if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) else: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) # switch mouse mode if OS.is_debug_build() and Input.is_action_just_pressed(\"toggle_mouse_capture\"): if Input.mouse_mode == Input.MOUSE_MODE_VISIBLE: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED elif Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: Input.mouse_mode = Input.MOUSE_MODE_VISIBLE func _start_demo() -> void: mode = SINGLEPLAYER.instantiate() $BootMenu.hide() func _start_server(port : int, nickname : String) -> void: mode = MULTIPLAYER.instantiate() mode.start_server(port, nickname) $BootMenu.hide() func _join_server(host : String, port : int, nickname : String) -> void: mode = MULTIPLAYER.instantiate() mode.connected_to_server.connect($BootMenu/Multiplayer._on_connected_to_server) mode.connection_failed.connect($BootMenu/Multiplayer._on_connection_failed) mode.join_server(host, port, nickname) " [node name="Game" type="Node3D"] script = SubResource("GDScript_e61dq") SINGLEPLAYER = ExtResource("1_50a80") MULTIPLAYER = ExtResource("2_g8xeb") [node name="BootMenu" parent="." instance=ExtResource("1_acy5o")]