Init
This commit is contained in:
61
scripts/camera_controller.gd
Normal file
61
scripts/camera_controller.gd
Normal file
@@ -0,0 +1,61 @@
|
||||
extends Camera3D
|
||||
@export var height := 1.7
|
||||
@export var move_duration := 1
|
||||
var tween: Tween
|
||||
var _history: Array[Transform3D] = []
|
||||
var _is_moving := false
|
||||
|
||||
func _ready() -> void:
|
||||
ClickManager.camera_move_requested.connect(_move_to)
|
||||
|
||||
func _set_position(pos: Vector3) -> void:
|
||||
var t := global_transform
|
||||
t.origin = pos
|
||||
global_transform = t
|
||||
|
||||
func _move_to(target: Transform3D) -> void:
|
||||
# Save current position before moving
|
||||
_history.append(global_transform)
|
||||
|
||||
var start_transform := global_transform
|
||||
var end_transform := target
|
||||
#end_transform.origin.y = height
|
||||
|
||||
if tween:
|
||||
tween.kill()
|
||||
tween = create_tween().set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
||||
tween.tween_method(_set_position, start_transform.origin, end_transform.origin, move_duration)
|
||||
tween.parallel().tween_method(
|
||||
_set_rotation,
|
||||
Quaternion(start_transform.basis),
|
||||
Quaternion(end_transform.basis),
|
||||
move_duration
|
||||
)
|
||||
|
||||
func go_back() -> void:
|
||||
if _history.is_empty() or _is_moving:
|
||||
return
|
||||
var previous: Transform3D = _history.pop_back()
|
||||
var start_transform := global_transform
|
||||
var end_transform := previous
|
||||
|
||||
if tween:
|
||||
tween.kill()
|
||||
_is_moving = true
|
||||
tween = create_tween().set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
||||
tween.tween_method(_set_position, start_transform.origin, end_transform.origin, move_duration)
|
||||
tween.parallel().tween_method(
|
||||
_set_rotation,
|
||||
Quaternion(start_transform.basis),
|
||||
Quaternion(end_transform.basis),
|
||||
move_duration
|
||||
)
|
||||
tween.tween_callback(func(): _is_moving = false)
|
||||
|
||||
func _set_rotation(q: Quaternion) -> void:
|
||||
var t := global_transform
|
||||
t.basis = Basis(q.normalized())
|
||||
global_transform = t
|
||||
|
||||
func has_history() -> bool:
|
||||
return not _history.is_empty()
|
||||
Reference in New Issue
Block a user