Files
2025-04-14 09:13:22 +02:00

59 lines
1.8 KiB
GDScript

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) * 1.35
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;