gamejam-march-28/player_manager.gd
2025-03-30 18:43:56 -06:00

59 lines
1.3 KiB
GDScript

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")