Files
chaussette.sale/vehicules/car.gd
Thomas afcfa60804 voitures: freinage en fonction du time delta
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.
2025-02-26 16:20:58 +01:00

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;