mirror of
https://github.com/FOSS-Supremacy/OpenLiberty.git
synced 2025-04-28 11:57:58 +03:00
Vehicle steering control
This commit is contained in:
parent
e508a68c2f
commit
c432b35a80
1 changed files with 56 additions and 15 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue