GodotComponentTest/Components/MovableComponent.gd

33 lines
830 B
GDScript

extends Node2D
var SpringDamper = preload("res://Utils/SpringDamper.gd")
export var target = Vector2 (0, 0)
export var pos = Vector2 (0, 0)
export var vel = Vector2 (0, 0)
export var max_speed = 50
export var spring_k = 10
export var spring_b = 0.5
onready var spring_damper = SpringDamper.new(4, .99, 0.5)
var velocity = Vector2(0, 0)
const pos_error_eps = 0.01
signal position_updated
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if (target - pos).length_squared() > pos_error_eps * pos_error_eps:
var spring_res = spring_damper.calc(pos, vel, target, delta)
pos = spring_res[0]
vel = spring_res[1]
emit_signal("position_updated", pos)