le freinage dure un certain temps et ce temps dépends du delta des frames. Sinon les voitures freinent plus ou moins vite en fonction de ce que les pc cibles sont capable d'arriver à faire tourner.
52 lines
1.6 KiB
GDScript
52 lines
1.6 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)
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
$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;
|