small racing game im working on
Diffstat (limited to 'classes/ghost.gd')
-rw-r--r--classes/ghost.gd43
1 files changed, 38 insertions, 5 deletions
diff --git a/classes/ghost.gd b/classes/ghost.gd
index 1b65c87..eb376f1 100644
--- a/classes/ghost.gd
+++ b/classes/ghost.gd
@@ -1,22 +1,50 @@
extends Node3D
class_name GhostCar
-@onready var wheels: Array[Node3D] = [$bl as Node3D, $br as Node3D, $fl as Node3D, $fr as Node3D]
+@onready var wheels: Array[Node3D] = [$bl as Node3D, $br as Node3D, $fr as Node3D, $fl as Node3D]
+@onready var body_mesh: MeshInstance3D = $body
+@onready var engine: AudioStreamPlayer3D = $Engine
const trail_scene = preload("res://scenes/trail.tscn")
const inactive = {active = false};
var skids: Array[Array] = [[inactive], [inactive], [inactive], [inactive]]
var particles: Array[GPUParticles3D] = []
+var v: Dictionary # [CarVars]
+var current_gear := 0
+var engine_rpm := 800.0
func _ready() -> void:
for whl in wheels:
particles.append(whl.get_node(^"particles"))
-func update(v: Dictionary) -> void:
+func clear_skids() -> void:
+ for wheel in skids:
+ if wheel:
+ for skid in wheel:
+ if skid is Trail3D:
+ skid.queue_free()
+ wheel.clear()
+ skids = [[inactive], [inactive], [inactive], [inactive]]
+
+func reset(clear_skids := true) -> void:
+ engine_rpm = 800
+ current_gear = 0
+ for p in particles:
+ p.emitting = false
+ if clear_skids:
+ clear_skids()
+
+func update(car_vars: Dictionary, delta: float) -> void:
+ v = car_vars
+ engine_rpm = maxf(800, v.engine_rpm)
+ current_gear = v.current_gear
wheels[2].rotation.y = v.steering * .75
wheels[3].rotation.y = v.steering * .75
global_rotation = v.rotation
- global_position = v.position
+ if delta > 0:
+ global_position = lerp(global_position, v.position, 10 * delta)
+ else:
+ global_position = v.position
for i in 4:
particles[i].emitting = v.wheel_skidinfo[i] < (.2 if i > 2 else .99) and v.wheel_contact[i] and v.kph > 30
@@ -26,8 +54,13 @@ func update(v: Dictionary) -> void:
if !skids[i][-1].active:
skids[i].append(trail_scene.instantiate() as Trail3D)
get_parent().add_child(skids[i][-1])
- (skids[i][-1] as Trail3D).add(v.wheel_position[i] - Vector3(0, .661, 0))
+ (skids[i][-1] as Trail3D).add(to_global(v.wheel_position[i]) - Vector3(0, .661, 0))
elif skids[i][-1].active:
skids[i][-1].active = false
- wheels[i].global_position = v.wheel_position[i]
+ wheels[i].position = v.wheel_position[i]
+
+ body_mesh.rotation.z = lerp(body_mesh.rotation.z, clampf(((-v.steering * .001) * v.wheel_rpm) + randf_range(-0.05,0.05), -.4, .4), 5 * delta)
+
+func kph() -> float:
+ return v.kph