Godot Version
Godot 4.3
Question
Hello, I have a problem where my car never wants to interact with neither areas nor bodies, can someone help?
extends Node3D
class_name Player
@onready var Ball = $Ball;
@onready var Car = $Car;
#@onready var rightWheel = $"Car/Model/wheel-front-right";
#@onready var leftWheel = $"Car/Model/wheel-front-left";
@onready var carBody = $"Car/Model/body";
var acceleration = 120.0;
var steering = 12.0;
var turn_speed = 10;
var body_tilt = 1.0;
var speed_input = 0;
var rotate_input = 0;
var Drifting = false
var driftDir = 0
var minimumDrift = false
var Boost = 1
var driftBoost = 3.5
@onready var boostTimer = $BoostTimer;
@onready var driftTimer = $DriftTimer;
@onready var Anim = $AnimationPlayer;
var can_stop = true
func _physics_process(delta):
Car.transform.origin = Ball.transform.origin;
Ball.apply_central_force(-Car.global_transform.basis.z * speed_input * Boost);
func _process(delta):
if can_stop:
speed_input = (Input.get_action_strength("accelerate") - Input.get_action_strength("brake")) * acceleration
else:
speed_input = acceleration
rotate_input = deg_to_rad(steering) * (Input.get_action_strength("left") - Input.get_action_strength("right"))
var speed_m_s = Ball.linear_velocity.length()
var speed_km_h = speed_m_s * 3.6
#print("Speed: ", speed_km_h, " km/h")
Global.km_h = speed_km_h;
if Input.is_action_just_pressed("drift") and not Drifting == true and speed_input > 0:
StartDrift();
if Drifting:
var DriftAmount = 0;
DriftAmount += Input.get_action_strength("left") - Input.get_action_strength("right")
DriftAmount *= deg_to_rad(steering*.55)
rotate_input = driftDir + DriftAmount
if Drifting and (Input.is_action_just_released("drift")):
StopDrift()
if Ball.linear_velocity.length() > 0:
RotateCar(delta);
func RotateCar(delta):
var new_basis = Car.global_transform.basis.rotated(Car.global_transform.basis.y, -rotate_input)
Car.global_transform.basis = Car.global_transform.basis.slerp(new_basis, turn_speed * delta).orthonormalized()
Car.global_transform = Car.global_transform.orthonormalized()
var t = 0;
if Drifting:
t = rotate_input * (body_tilt * 1.5)
if not Drifting:
t = rotate_input * body_tilt
carBody.rotation.z = lerp_angle(carBody.rotation.z, t, delta * 10)
func StartDrift():
Drifting = true;
Anim.play("hop");
minimumDrift = false;
driftDir = rotate_input;
driftTimer.start();
func StopDrift():
if minimumDrift:
Boost = driftBoost;
boostTimer.start();
can_stop = false
Anim.play("zoomout");
Drifting = false;
minimumDrift = false
func BoostFunc(speed: int):
Boost = speed;
print("Ohio")
boostTimer.start();
can_stop = false
Anim.play("zoomout");
func _on_drift_timer_timeout() -> void:
if Drifting:
minimumDrift = true
func _on_boost_timer_timeout() -> void:
Boost = 1.0
Anim.play("zoomin");
can_stop = true
**func _on_area_3d_area_entered(area: Area3D) -> void:**
** BoostFunc(4);**


