35 lines
970 B
GDScript
35 lines
970 B
GDScript
extends Spatial
|
|
|
|
export var target_path: NodePath
|
|
|
|
var target: Node
|
|
var dist = 0.0
|
|
func _ready():
|
|
target = get_node(target_path)
|
|
|
|
var speed_slow = 4.5
|
|
var speed_fast = 8.5
|
|
var speed_cur = 3.5
|
|
|
|
func _process(delta):
|
|
if !target:
|
|
return
|
|
var p1 = global_transform.origin
|
|
var p2 = target.global_transform.origin
|
|
dist = p1.distance_to(p2)
|
|
if dist < 20.0:
|
|
speed_cur -= delta * 0.2
|
|
elif dist >= 25.0:
|
|
speed_cur += delta * 0.1
|
|
speed_cur = clamp(speed_cur, speed_slow, speed_fast)
|
|
if dist < 10.0 && dist > 3.5:
|
|
p1 = p1.linear_interpolate(p2, clamp(speed_cur * delta * (dist / 6.0 - 2.0 / 3.0), 0.0, 1.0))
|
|
elif dist >= 10.0:
|
|
p1 = p1.linear_interpolate(p2, clamp(speed_cur * delta, 0.0, 1.0))
|
|
p1.y = 1.4
|
|
global_transform.origin = p1
|
|
# elif dist >= 30.0:
|
|
# global_transform.origin = p1 + (p2 - p1).normalized() * ((p2 - p1).length() - 3.0)
|
|
global_transform = global_transform.looking_at(p2, Vector3.UP)
|
|
global_transform = global_transform.orthonormalized()
|