Vehicle steering control

This commit is contained in:
a6xdev 2024-08-24 10:11:08 -03:00
parent e508a68c2f
commit c432b35a80

View file

@ -1,25 +1,66 @@
# Still open for improvements and optimization.
# by: a6xdev, ...
extends Node
class_name VehicleSteering
@export var Vehicle: VehicleBody3D
@export_group("Direction Settings")
@export var max_steering_angle: float = 30.0 ## Ângulo máximo das rodas em graus
@export var steering_speed: float = 10.0 ## Velocidade com a qual o veículo alcança o ângulo máximo
#@export var max_steering_angle: float = 30.0 ## Ângulo máximo das rodas em graus
@export var steering_speed: float = 10.0 ## Speed at which the vehicle reaches the maximum angle
@export_group("Suspension Settings")
@export var suspension_stiffness = 0 ## Define quão rígida ou macia é a suspensão. Valores mais altos resultam em uma suspensão mais rígida.
@export var suspension_damping: float = 2.0 ## Suspension damping
@export var max_suspension_shift: float = 0.05 ## Reduced to soften the effect on the suspension
@export_group("Wheel Settings")
@export var tire_grip = 0 ## Define quanta tração os pneus têm na superfície. Valores mais altos resultam em melhor aderência.
@export var wheel_radius = 0 ## Define o tamanho das rodas, o que afeta a altura do veículo e o comportamento de direção.
@export var wheel_friction_slip = 0 ## Controla a quantidade de derrapagem que ocorre durante a direção. Valores mais baixos permitem mais deslizamento.
@export_group("Braking Settings")
@export var brake_force = 0 ## Define a força aplicada aos freios. Afeta a eficiência da frenagem.
@export var handbrake_force = 0 ## Define a força aplicada pelo freio de mão, geralmente usada para travar as rodas traseiras.
@export_group("Other Settings")
@export var downforce = 0 ## Simula a pressão aerodinâmica que empurra o carro para baixo, aumentando a aderência em altas velocidades.
@export var traction_control:bool = false ## Controle de tração, que impede que as rodas patinem durante a aceleração.
@export var abs:bool = false ## Sistema de freio ABS, que impede que as rodas travem durante a frenagem.
@export var tire_grip = 1.5 ## Sets the tire's grip on the surface. Lower values provide greater traction, improving cornering stability, while higher values result in more slippage and reduced cornering control.
@export var FrontLeftWheel: VehicleWheel3D
@export var FrontRightWheel: VehicleWheel3D
@export var BackLeftWheel: VehicleWheel3D
@export var BackRightWheel: VehicleWheel3D
#@export_group("Other Settings")
#@export var downforce = 0
#@export var traction_control: bool = false
#@export var abs: bool = false
func SteerVehicle(delta):
# Captura a entrada de direção do jogador
Vehicle.steering = move_toward(Vehicle.steering, Input.get_axis("car_right", "car_left") * 1, delta * 2.5)
adjust_suspension(delta)
set_tire_grip()
# Captures player steering input and adjusts vehicle steering
Vehicle.steering = move_toward(Vehicle.steering, Input.get_axis("car_right", "car_left") * 1, delta * steering_speed)
func adjust_suspension(delta):
var target_shift = 0.0
if Vehicle.linear_velocity.length() > 3:
if Input.is_action_pressed("car_right"):
# Suspension adjustment for right turn
target_shift = -max_suspension_shift
elif Input.is_action_pressed("car_left"):
# Suspension adjustment for left turn
target_shift = max_suspension_shift
# Smooth application of suspension change using lerp
FrontLeftWheel.wheel_rest_length = lerp(FrontLeftWheel.wheel_rest_length, 0.15 + target_shift, delta * suspension_damping)
FrontRightWheel.wheel_rest_length = lerp(FrontRightWheel.wheel_rest_length, 0.15 - target_shift, delta * suspension_damping)
BackLeftWheel.wheel_rest_length = lerp(BackLeftWheel.wheel_rest_length, 0.15 + target_shift, delta * suspension_damping)
BackRightWheel.wheel_rest_length = lerp(BackRightWheel.wheel_rest_length, 0.15 - target_shift, delta * suspension_damping)
func reset_suspension(delta):
# Reset wheel positions to original state using lerp
FrontLeftWheel.wheel_rest_length = lerp(FrontLeftWheel.wheel_rest_length, 0.15, delta * suspension_damping)
FrontRightWheel.wheel_rest_length = lerp(FrontRightWheel.wheel_rest_length, 0.15, delta * suspension_damping)
BackLeftWheel.wheel_rest_length = lerp(BackLeftWheel.wheel_rest_length, 0.15, delta * suspension_damping)
BackRightWheel.wheel_rest_length = lerp(BackRightWheel.wheel_rest_length, 0.15, delta * suspension_damping)
func set_tire_grip():
# Applies the value of 'tire_grip' to all wheels
FrontLeftWheel.wheel_friction_slip = tire_grip
FrontRightWheel.wheel_friction_slip = tire_grip
BackLeftWheel.wheel_friction_slip = tire_grip
BackRightWheel.wheel_friction_slip = tire_grip