59 lines
1.3 KiB
GDScript
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")
|