extends Node3D class_name PlayerManager @export var fox: Player func _ready() -> void: PlayerInput.player_join.connect(player_join) func assign_unassigned(data: PlayerInputData) -> bool: for child in get_children(): if child.input == null: child.input = data return true return false func is_assigned(data: PlayerInputData) -> bool: for child in get_children(): if child.input == data: return true return false func switch_player(data: PlayerInputData): if fox.input == null: data.drop.emit() fox.input = data return if not is_assigned(data): assign_unassigned(data) else: var children = get_children() var i := 0 while i < children.size(): if children[i].input == data: break i += 1 if i == children.size(): return var j := 0 while j < children.size() - 1: var ii := (i + 1 + j) % children.size() if children[ii].input == null: children[i].input = null children[ii].input = data return j += 1 func player_join(data: PlayerInputData): if fox.input == null: fox.input = data return assign_unassigned(data) func _process(_delta: float) -> void: var count := get_children().size() if count == 0: get_tree().change_scene_to_file("res://fox_win_text.tscn") elif count >= 20: get_tree().change_scene_to_file("res://vole_win_text.tscn")