It doesn't matter if it's camera or anything else. It's the same whatever properties you animate.
If you insist on doing it manually for learning then just lerp the position between two points and animate the lerping parameter in 0-1 range. This funky approach of lerping to achieve geometric progression will just additionally confuse you.
extends Spatial
var positions = [...] # array of vectors for any number of wanted positions
var position_index = 0
var can_interrupt = true
var start = positions[0]
var end = positions[0]
var parameter = 1.0
var transition_speed = .5
func _process(delta):
translation = lerp(start, end, parameter)
parameter = clamp(parameter + delta * transition_speed, 0.0, 1.0)
func _input(event):
if event is InputEventMouseButton and event.is_pressed():
if is_equal_approx(parameter, 1.0) or can_interrupt:
start = translation
position_index = wrapi(position_index+1, 0, positions.size())
end = positions[position_index]
parameter = 0.0
Target switching logic is exactly the same as with a tween. Just need to reset the interpolation parameter at every switch. If you want to have easing, call ease() on the parameter prior to using it in lerp():
translation = lerp(start, end, ease(parameter, .4))