godot-shooter / files / effects / Trails.gd
Trails.gd
c0b42019 2023-11-07 Pavel Safronov | 1 | extends Node2D |
| 2 | class_name Trails | |
| 3 | ||
| 4 | export var trails_length = 400 | |
| 5 | export var gradient: Gradient | |
04130db8 2023-11-07 Pavel Safronov | 6 | export var alpha = 1.0 |
c0b42019 2023-11-07 Pavel Safronov | 7 | onready var trails = $CanvasLayer/Trails |
| 8 | ||
| 9 | func _ready() -> void: | |
| 10 | trails.gradient = gradient | |
04130db8 2023-11-07 Pavel Safronov | 11 | trails.points = PoolVector2Array([]) |
c0b42019 2023-11-07 Pavel Safronov | 12 | |
04130db8 2023-11-07 Pavel Safronov | 13 | func _process(_delta: float) -> void: |
| 14 | trails.modulate = Color(1,1,1,alpha) | |
c0b42019 2023-11-07 Pavel Safronov | 15 | |
| 16 | func add_position(pos: Vector2) -> void: | |
| 17 | var points = trails.points | |
| 18 | var should_add = points.size() == 0 | |
| 19 | if points.size() > 0: | |
| 20 | var last_added = points[-1] | |
| 21 | var dist_to_last_added = pos.distance_to(last_added) | |
| 22 | should_add = dist_to_last_added > 1 | |
| 23 | if should_add: | |
| 24 | points.append(pos) | |
04130db8 2023-11-07 Pavel Safronov | 25 | while points.size() > trails_length: |
| 26 | points.remove(0) | |
| 27 | trails.points = points | |
fc5de8ee 2023-11-09 Pavel Safronov | 28 | |
| 29 | func clear() -> void: | |
| 30 | trails.points = [] |