56 lines
1.8 KiB
GDScript
56 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:
|
|
$AudioStreamPlayer2D.pitch_scale = current_speed / speed
|
|
$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;
|