33 lines
1.3 KiB
GDScript
33 lines
1.3 KiB
GDScript
extends Spatial
|
|
|
|
export var target: NodePath
|
|
onready var target_node: Spatial = get_node(target)
|
|
export var camera_lerp := 1.0
|
|
|
|
var tracking_cameras = []
|
|
onready var prev_camera: Camera = $camera_room_bedroom/camera
|
|
onready var current_camera: Camera = $camera_room_bedroom/camera setget set_current_camera
|
|
|
|
func set_current_camera(new_value: Camera):
|
|
prev_camera = current_camera
|
|
current_camera = new_value
|
|
camera_lerp = 0.0
|
|
$AnimationPlayer.play("switch_camera")
|
|
|
|
func _on_camera_room_player_entered(player, camera):
|
|
assert(tracking_cameras.find(camera) == -1)
|
|
tracking_cameras.append(camera)
|
|
if tracking_cameras.size() == 1:
|
|
self.current_camera = tracking_cameras.back()
|
|
|
|
func _on_camera_room_player_exited(player, camera):
|
|
tracking_cameras.erase(camera)
|
|
assert(tracking_cameras.find(camera) == -1)
|
|
if tracking_cameras.size() == 1:
|
|
self.current_camera = tracking_cameras.back()
|
|
|
|
func _physics_process(delta):
|
|
$main_camera.global_transform.basis = Basis(prev_camera.global_transform.basis.get_rotation_quat().slerp(current_camera.global_transform.basis.get_rotation_quat(), camera_lerp))
|
|
$main_camera.global_transform.origin = lerp(prev_camera.global_transform.origin, current_camera.global_transform.origin, camera_lerp)
|
|
$main_camera.fov = lerp(prev_camera.fov, current_camera.fov, camera_lerp)
|