42 lines
1.1 KiB
GDScript
42 lines
1.1 KiB
GDScript
extends Node
|
|
|
|
@onready var layer = $GonerLayer
|
|
|
|
var layers: Array = []
|
|
var timer: float = 0.0
|
|
const INTERVAL: float = 2
|
|
const START_SCALE: float = 4.5
|
|
const END_SCALE: float = 8.0
|
|
const DURATION: float = 10.0
|
|
|
|
func _ready() -> void:
|
|
layer.visible = false
|
|
|
|
func _process(delta: float) -> void:
|
|
timer += delta
|
|
if timer >= INTERVAL:
|
|
timer -= INTERVAL
|
|
_spawn_layer()
|
|
|
|
var i: int = layers.size() - 1
|
|
while i >= 0:
|
|
var entry = layers[i]
|
|
entry["elapsed"] += delta
|
|
var t: float = clampf(entry["elapsed"] / DURATION, 0.0, 1)
|
|
var node: Node2D = entry["node"]
|
|
node.scale = Vector2(lerpf(START_SCALE, END_SCALE, t), lerpf(START_SCALE, END_SCALE, t))
|
|
node.modulate.a = sin(t * PI) * 0.5
|
|
if t >= 1.0:
|
|
node.queue_free()
|
|
layers.remove_at(i)
|
|
i -= 1
|
|
|
|
func _spawn_layer() -> void:
|
|
var clone: Node2D = layer.duplicate()
|
|
clone.visible = true
|
|
clone.scale = Vector2(START_SCALE, START_SCALE)
|
|
clone.modulate = Color(1, 1, 1, 0)
|
|
layer.get_parent().add_child(clone)
|
|
layer.get_parent().move_child(clone, layer.get_index())
|
|
layers.push_back({"node": clone, "elapsed": 0.0})
|