extends Node3D @onready var _screen: SplitScreenContainer = $SplitScreenContainer @onready var _topdown_camera: Camera3D = $topdown_camera var _player_wall_tscn = preload("res://player/player_wall.tscn") var _player_wall_map = {} var _player_color_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) _screen.set_map(_topdown_camera) for player in players: player.set_input_map(_input_map.pop_front()) _player_color_map[player] = player.color _player_add_wall(player) 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.set_color(_player_color_map[player]) 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()