diff options
Diffstat (limited to 'client/scripts/follow_camera.gd')
-rw-r--r-- | client/scripts/follow_camera.gd | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/client/scripts/follow_camera.gd b/client/scripts/follow_camera.gd deleted file mode 100644 index 74355688..00000000 --- a/client/scripts/follow_camera.gd +++ /dev/null @@ -1,65 +0,0 @@ -# Undercooked - a game about cooking -# Copyright 2024 nokoe -# Copyright 2024 metamuffin -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, version 3 of the License only. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <https://www.gnu.org/licenses/>. -# -class_name FollowCamera -extends Camera3D - -const ROTATE_SPEED: float = 1.5 -const ROTATE_WEIGHT: float = 8.0 -const ROTATE_UP_SPEED: float = 0.7 -const ROTATE_UP_WEIGHT: float = 4.0 -const ANGLE_UP_MIN: float = 0.5 -const ANGLE_UP_MAX: float = 1.2 -const LOOK_WEIGHT: float = 8.0 -const MOVE_WEIGHT: float = 2.0 -const CAMERA_DISTANCE: float = 10 - -@export var target: Node3D - -var angle_target: float = 0 -var angle: float = 0 -var angle_up_target: float = 1 -var angle_up: float = 1 -var ground: Vector3 - -func _ready(): - if target == null: - push_warning("target is not set") - else: - ground = target.position - -func _process(delta): - if target != null: - follow(delta) - -func follow(delta): - var new_transform = transform.looking_at(target.position) - - transform.basis = Basis.from_euler(Vector3( - lerp_angle(transform.basis.get_euler().x, new_transform.basis.get_euler().x, delta * LOOK_WEIGHT), - lerp_angle(transform.basis.get_euler().y, new_transform.basis.get_euler().y, delta * LOOK_WEIGHT), - lerp_angle(transform.basis.get_euler().z, new_transform.basis.get_euler().z, delta * LOOK_WEIGHT) - )) - - angle_target += Input.get_axis("rotate_left", "rotate_right") * ROTATE_SPEED * delta - angle = lerp_angle(angle, angle_target, delta * ROTATE_WEIGHT) - - angle_up_target += Input.get_axis("rotate_down", "rotate_up") * ROTATE_UP_SPEED * delta - angle_up_target = clamp(angle_up_target, ANGLE_UP_MIN, ANGLE_UP_MAX) - angle_up = lerp_angle(angle_up, angle_up_target, delta * ROTATE_UP_WEIGHT) - - ground = ground.lerp(target.position, delta * MOVE_WEIGHT) - position = ground + Vector3(0, sin(angle_up) * CAMERA_DISTANCE, cos(angle_up) * CAMERA_DISTANCE).rotated(Vector3.UP, angle) |