class_name Car
extends CharacterBody2D

@export var debugLabel: Label
@export var speed = 750 # How fast the car will move (pixels/sec).
@export var acceleration = speed / 100
@export var slowZoneSpeed = 300
var current_speed = speed;
@onready var animation_tree := $AnimationTree
@onready var state_machine := animation_tree.get("parameters/driving/playback") as AnimationNodeStateMachinePlayback

var brakePedal = false;
var fullStop = false;

var last_facing_direction = Vector2(0,-1) # facing north

var targetPosition = null

func moveTo(position: Vector2) -> void:
	targetPosition = position;

func updateFacingDirectionInAnimationTree():
	animation_tree.set("parameters/CarStates/driving/blend_position", last_facing_direction)
	animation_tree.set("parameters/CarStates/idling/blend_position", last_facing_direction)

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
	if brakePedal:
		if fullStop:
			current_speed = max(0, current_speed - acceleration)
		else:
			current_speed = max(slowZoneSpeed, current_speed - acceleration)
	else:
		current_speed = min(current_speed + acceleration, speed)
	$ZIndexControler/ShapeCast2D.enabled = !$CollisionHorizontal.disabled
	

	if (targetPosition != null):
		velocity = (targetPosition - position) * current_speed * delta
		
	move_and_slide()
	if velocity:
		last_facing_direction = velocity.normalized()
	updateFacingDirectionInAnimationTree()
	
func brake(needsToStop : bool):
	brakePedal = true;
	fullStop = needsToStop;

func accelerate():
	brakePedal = false;
