|
@@ -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:
|