1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
extends Node2D

export var MAX_LENGTH = 20
export var THICKNESS = 2.0

var points = []
var frame = 0


func _physics_process(_delta):
	if frame % 3 == 0:
		points.push_front(global_position)
		if points.size() > MAX_LENGTH:
			points.pop_back()

	frame += 1
	update()


func _draw():
	if points.size() < 2:
		return

	var antialias = false
	var c = modulate
	var s = float(points.size())
	var adjusted = PoolVector2Array()
	var colors = PoolColorArray()

	for i in range(s):
		adjusted.append(points[i] - global_position)
		c.a = lerp(1.0, 0.0, i / s)
		colors.append(c)

	draw_set_transform(Vector2.ZERO, -get_parent().rotation, Vector2(1, 1))
	draw_polyline_colors(adjusted, colors, THICKNESS, antialias)