You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
extends Camera3D
|
|
|
|
@export var target : Node3D
|
|
@export var delay : float
|
|
@export var easing : float
|
|
@export var waypoints : Array[Node3D]
|
|
|
|
var target_pos
|
|
var max_time
|
|
var t
|
|
var factor
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
t = $Timer
|
|
t.autostart = false
|
|
t.wait_time = delay
|
|
target_pos = target.position
|
|
t.start()
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
if len(waypoints) == 0:
|
|
pass
|
|
else:
|
|
|
|
var wp1 = waypoints[0].position
|
|
var wp2 = waypoints[1].position
|
|
#var ratio = wp2.distance_to( target.position )/wp1.distance_to(wp2)
|
|
var ratio = target.position.distance_to(wp2) / ( target.position.distance_to(wp1) + target.position.distance_to(wp2) )
|
|
position = lerp( wp2 , wp1 , ratio )
|
|
|
|
#if len(waypoints)<2:
|
|
#pass
|
|
#elif len(waypoints) == 1:
|
|
#pass
|
|
#else:
|
|
#var wp1 = waypoints[0].position
|
|
#var wp2 = waypoints[1].position
|
|
##var ratio = wp2.distance_to( target.position )/wp1.distance_to(wp2)
|
|
#var ratio = target.position.distance_to(wp2) / ( target.position.distance_to(wp1) + target.position.distance_to(wp2) )
|
|
#position = lerp( wp2 , wp1 , ratio )
|
|
|
|
|
|
for i in waypoints:
|
|
pass
|
|
#print( i , " name:" + i.name , " pos:" + str(target.position.distance_to(i.position)) )
|
|
|
|
if target_pos != target.position:
|
|
factor = t.time_left / t.wait_time
|
|
print( t.wait_time, factor )
|
|
|
|
look_at( lerp( target.position , target_pos , pow( factor, easing ) ) + Vector3(0.0,0.70,0.0) )
|
|
|
|
|
|
func _on_timer_timeout():
|
|
target_pos = target.position
|
|
t.start()
|