Browse Source

:wrench: Add a parameter to set a minimum height

To prevent the camera to get on the ground.
DricomDragon 1 year ago
parent
commit
24615525e2
1 changed files with 13 additions and 2 deletions
  1. 13 2
      first3d/run/levels/camera_tracker.gd

+ 13 - 2
first3d/run/levels/camera_tracker.gd

@@ -4,6 +4,7 @@ extends Camera3D
 
 
 @export var max_distance: float = 10
+@export var camera_height: float = 1
 
 var _tracked_node: Node3D
 
@@ -23,11 +24,21 @@ func _process(_delta: float) -> void:
 
 func _adjust_distance() -> void:
 	var target: Vector3 = _tracked_node.get_global_position()
+	_adjust_max_distance_from(target)
+	_adjust_min_distance_from(target)
+
+
+func _adjust_max_distance_from(target: Vector3) -> void:
 	var current_distance: float = position.distance_to(target)
-	push_error()
 	if current_distance > max_distance:
 		var diff: float = current_distance - max_distance
-		set_position(position + transform.basis * Vector3.FORWARD * diff)
+		position += transform.basis * Vector3.FORWARD * diff
+
+
+func _adjust_min_distance_from(target: Vector3) -> void:
+	var target_height: float = target.y + camera_height
+	if position.y < target_height:
+		position.y = target_height
 
 
 func _on_focus_required(node: Node3D) -> void: