extends Node3D
+@onready var _screen: SplitScreenContainer = $SplitScreenContainer
+
+var _player_wall_tscn = preload("res://player/player_wall.tscn")
+var _player_wall_map = {}
+
+var _input_map = [
+ {
+ "left": "player1_left",
+ "right": "player1_right",
+ "restart": "player1_restart"
+ },
+ {
+ "left": "player2_left",
+ "right": "player2_right",
+ "restart": "player2_restart"
+ }
+]
+
+func _ready() -> void:
+ var players: Array[Player] = [$Player1, $Player2]
+
+ _screen.set_splitscreen(players)
+
+ for player in players:
+ _player_add_wall(player)
+ player.set_input_map(_input_map.pop_front())
+
+
func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
get_tree().quit()
+
+
+func _process(_delta: float) -> void:
+ for player: Player in _player_wall_map.keys():
+ var wall: PlayerWall = _player_wall_map[player]
+ wall.scale = Vector3(1, 1, (player.global_position - wall.global_position).length())
+
+
+func _player_add_wall(player: Player) -> void:
+ var wall: PlayerWall = _player_wall_tscn.instantiate()
+
+ # start new wall from origin position
+ add_child(wall)
+ wall.global_position = player.global_position
+ wall.global_rotation = player.global_rotation
+
+ _player_wall_map[player] = wall
+
+
+func _on_player_destroyed(player: Player) -> void:
+ print("Player \"" + player.name + "\" destroyed")
+
+
+func _on_player_player_restart(player: Player) -> void:
+ print("Player \"" + player.name + "\" wants to restart")
+ get_tree().reload_current_scene()