small racing game im working on
Diffstat (limited to 'cam.gd')
-rw-r--r--cam.gd30
1 files changed, 30 insertions, 0 deletions
diff --git a/cam.gd b/cam.gd
new file mode 100644
index 0000000..6840b56
--- /dev/null
+++ b/cam.gd
@@ -0,0 +1,30 @@
+extends Camera3D
+
+@export 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
+
+func _physics_process(delta):
+ var delta_v = global_transform.origin - follow_this.global_transform.origin
+ var target_pos = global_transform.origin
+
+ # ignore y
+ delta_v.y = 0.0
+
+ 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
+ else:
+ target_pos.y = follow_this.global_transform.origin.y + target_height
+
+ global_transform.origin = global_transform.origin.lerp(target_pos, delta * 20.0)
+
+ last_lookat = last_lookat.lerp(follow_this.global_transform.origin, delta * 20.0)
+
+ look_at(last_lookat, Vector3(0.0, 1.0, 0.0))