update
This commit is contained in:
@@ -1,15 +1,24 @@
|
||||
extends Node
|
||||
## Wechselt zwischen Menü und laufender Partie.
|
||||
## Wechselt zwischen Menü und laufenden Partien.
|
||||
##
|
||||
## Mit `-- server <port>` läuft dieselbe Datei als Raum auf dem Spielserver:
|
||||
## kein Menü, kein Bild, nur die Spiellogik.
|
||||
## Mit `-- server <port>` läuft dieselbe Datei als Spielserver: kein Menü, kein
|
||||
## Bild, dafür beliebig viele Räume nebeneinander.
|
||||
##
|
||||
## Ein Raum steckt in einem SubViewport mit eigener World3D. Nur so hat jede
|
||||
## Partie ihren eigenen Physikraum. Die Knotennamen sind auf Server und Client
|
||||
## gleich - daran hängt das RPC-Ziel.
|
||||
|
||||
var menu: CanvasLayer
|
||||
var game: Node3D
|
||||
var raeume: Node
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Net.game_started.connect(_start_game)
|
||||
raeume = Node.new()
|
||||
raeume.name = "Raeume"
|
||||
add_child(raeume)
|
||||
|
||||
Net.game_started.connect(_raum_bauen)
|
||||
Net.room_closed.connect(_raum_abbauen)
|
||||
Net.server_closed.connect(_back_to_menu)
|
||||
|
||||
var args := OS.get_cmdline_user_args()
|
||||
@@ -31,19 +40,40 @@ func _unhandled_key_input(event: InputEvent) -> void:
|
||||
get_viewport().set_input_as_handled()
|
||||
|
||||
|
||||
func _start_game(cfg: Dictionary) -> void:
|
||||
if game != null:
|
||||
func _raum_bauen(code: String, cfg: Dictionary) -> void:
|
||||
if raeume.has_node(code):
|
||||
return
|
||||
if menu != null:
|
||||
menu.queue_free()
|
||||
menu = null
|
||||
game = Node3D.new()
|
||||
|
||||
var raum := Node.new()
|
||||
raum.name = code
|
||||
raeume.add_child(raum)
|
||||
|
||||
var behaelter := SubViewportContainer.new()
|
||||
behaelter.name = "Container"
|
||||
behaelter.stretch = true
|
||||
behaelter.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
raum.add_child(behaelter)
|
||||
|
||||
var sicht := SubViewport.new()
|
||||
sicht.name = "Viewport"
|
||||
sicht.own_world_3d = true
|
||||
behaelter.add_child(sicht)
|
||||
|
||||
var game := Node3D.new()
|
||||
game.set_script(preload("res://scripts/game.gd"))
|
||||
game.name = "Game" # fester Pfad, sonst findet das RPC-Routing den Knoten nicht
|
||||
add_child(game)
|
||||
game.name = "Game"
|
||||
sicht.add_child(game)
|
||||
game.setup(cfg)
|
||||
|
||||
|
||||
func _raum_abbauen(code: String) -> void:
|
||||
var raum := raeume.get_node_or_null(NodePath(code))
|
||||
if raum != null:
|
||||
raum.queue_free()
|
||||
|
||||
|
||||
func _back_to_menu() -> void:
|
||||
if game != null:
|
||||
get_tree().change_scene_to_file("res://scenes/main.tscn")
|
||||
get_tree().change_scene_to_file("res://scenes/main.tscn")
|
||||
|
||||
Reference in New Issue
Block a user