small racing game im working on
Diffstat (limited to 'cam.gd')
-rw-r--r--cam.gd33
1 files changed, 20 insertions, 13 deletions
diff --git a/cam.gd b/cam.gd
index b53ad19..88ffdb9 100644
--- a/cam.gd
+++ b/cam.gd
@@ -1,20 +1,18 @@
extends Camera3D
-@export var follow_this: Node3D
+var follow_this: Node3D
@export var target_distance = 3.0
@export var target_height = 2.0
var last_lookat
func _ready():
- last_lookat = follow_this.global_transform.origin
- if follow_this is Car:
- await follow_this.ready
- follow_this = follow_this.car_mesh
+ set_physics_process(false)
-func _physics_process(delta):
- var delta_v = global_transform.origin - follow_this.global_transform.origin
- var target_pos = global_transform.origin
+
+func target() -> Vector3:
+ var delta_v := global_position - follow_this.global_position
+ var target_pos := global_position
# ignore y
delta_v.y = 0.0
@@ -22,12 +20,21 @@ func _physics_process(delta):
if (delta_v.length() > target_distance):
delta_v = delta_v.normalized() * target_distance
delta_v.y = target_height
- target_pos = follow_this.global_transform.origin + delta_v
+ target_pos = follow_this.global_position + delta_v
else:
- target_pos.y = follow_this.global_transform.origin.y + target_height
-
- global_transform.origin = global_transform.origin.lerp(target_pos, delta * 20.0)
+ target_pos.y = follow_this.global_position.y + target_height
+ return target_pos
- last_lookat = last_lookat.lerp(follow_this.global_transform.origin, delta * 20.0)
+func _physics_process(delta):
+ global_position = global_position.lerp(target(), delta * 20.0)
+ last_lookat = last_lookat.lerp(follow_this.global_position, delta * 20.0)
look_at(last_lookat, Vector3(0.0, 1.0, 0.0))
+
+
+func _on_race_created_car(car: Car) -> void:
+ follow_this = car.car_mesh
+ global_position = follow_this.global_position + (follow_this.global_transform.basis.z * target_distance)
+ look_at(follow_this.global_position)
+ last_lookat = follow_this.global_position
+ set_physics_process(true)