extends Line2D


export var max_length : int = 100 setget _set_max_length
export var distance_between_points : float = 10
export var decay_time : float = 0.1 setget _set_decay_time

var last_point = null
onready var parent = get_parent()
onready var timer = $Timer

func _set_max_length(l : int) -> void:
	if l > 0:
		max_length = l

func _set_decay_time(d : float) -> void:
	if d >= 0:
		decay_time = 0


func _ready():
	set_as_toplevel(true)
	show_behind_parent = true
	_reset_timer()

func _process(delta):
	rotation = parent.rotation
	if points.size() < max_length:
		var point = _get_point()
		if point != null:
			add_point(point)
	if points.size() >= max_length:
		remove_point(0)

func _get_point():
	var point = parent.global_position
	if last_point != null and point.distance_to(last_point) < distance_between_points:
		return null
	last_point = point
	return point

func _reset_timer():
	if decay_time > 0:
		timer.stop()
		timer.start(decay_time)


func _on_decay_timeout():
	if points.size() > 0:
		remove_point(0)
	_reset_timer()