class_name Car extends CharacterBody2D @export var debugLabel: Label @export var speed = 750 # How fast the car will move (pixels/sec). @export var timeToChangeVelocity = 0.5 # How long to break to a full stop var targetedVelocity = 0 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 last_facing_direction = Vector2(0,-1) # facing north var targetGlobalPosition = null var direction = Vector2(0,0) func moveTo(position: Vector2) -> void: targetGlobalPosition = 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) func _ready() -> void: $AudioStreamPlayer2D.play() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: var pitch = current_speed / speed if is_zero_approx(pitch): pitch = 0.01 $AudioStreamPlayer2D.pitch_scale = pitch $ZIndexControler/ShapeCast2D.enabled = !$CollisionHorizontal.disabled var accelerationStep = (speed * delta / timeToChangeVelocity) if brakePedal: current_speed = max(targetedVelocity, current_speed - accelerationStep) else: current_speed = min(current_speed + accelerationStep, speed) if (targetGlobalPosition != null): direction = (targetGlobalPosition - global_position).normalized() velocity = direction * current_speed move_and_slide() if velocity: last_facing_direction = velocity.normalized() updateFacingDirectionInAnimationTree() func brake(wantedVelocity : int): brakePedal = true; targetedVelocity = wantedVelocity; func accelerate(): brakePedal = false;