extends Camera

const TRANSLATION_SPEED : float = 0.1
const ROTATION_SPEED : float = 0.025

var players = []
var index : int = 0
var locked : bool = false

func register_player(player):
	players.append(player)

func clear_register():
	players.clear()
	locked = false
	index = 0

func _physics_process(delta : float) -> void:
	if Input.is_action_pressed("camera_forward"):
		translate(TRANSLATION_SPEED * Vector3(0, 0, -1)); locked = false
	if Input.is_action_pressed("camera_backward"):
		translate(TRANSLATION_SPEED * Vector3(0, 0, 1)); locked = false
	if Input.is_action_pressed("camera_strafe_up"):
		translate(TRANSLATION_SPEED * Vector3(0, 1, 0)); locked = false
	if Input.is_action_pressed("camera_strafe_down"):
		translate(TRANSLATION_SPEED * Vector3(0, -1, 0)); locked = false
	if Input.is_action_pressed("camera_strafe_right"):
		translate(TRANSLATION_SPEED * Vector3(1, 0, 0)); locked = false
	if Input.is_action_pressed("camera_strafe_left"):
		translate(TRANSLATION_SPEED * Vector3(-1, 0, 0)); locked = false
	if Input.is_action_pressed("camera_pitch_down"):
		rotate_object_local(Vector3(1,0,0), -ROTATION_SPEED); locked = false
	if Input.is_action_pressed("camera_pitch_up"):
		rotate_object_local(Vector3(1,0,0), ROTATION_SPEED); locked = false
	if Input.is_action_pressed("camera_roll_left"):
		rotate_object_local(Vector3(0,0,1), ROTATION_SPEED); locked = false
	if Input.is_action_pressed("camera_roll_right"):
		rotate_object_local(Vector3(0,0,1), -ROTATION_SPEED); locked = false
	if Input.is_action_pressed("camera_yaw_left"):
		rotate_object_local(Vector3(0,1,0), ROTATION_SPEED); locked = false
	if Input.is_action_pressed("camera_yaw_right"):
		rotate_object_local(Vector3(0,1,0), -ROTATION_SPEED); locked = false
	if Input.is_action_just_pressed("camera_switch_player"):
		move_to_player(index % len(players))
		index += 1
		locked = true
	if locked:
		move_to_player(index % len(players))

func move_to_player(index : int):
	translation = players[index].translation
	rotation = players[index].rotation
	translate(Vector3(0, -0.8, -2))
	rotate_object_local(Vector3(1,0,0), PI-0.3)









