Initial scaffolding.

This commit is contained in:
Henry Faber 2026-06-23 18:19:28 +01:00
parent 8e821ead28
commit 1200ac7e32
8 changed files with 78 additions and 1 deletions

16
scripts/base_effect.gd Normal file
View file

@ -0,0 +1,16 @@
class_name BaseEffect
extends Resource
@export var duration: float = 0.5
# Called when the effect is applied
func start(target: Node) -> void:
pass
# Called every frame (if needed)
func process(delta: float) -> void:
pass
# Clean up any changes to the target
func stop(target: Node) -> void:
pass

View file

@ -0,0 +1 @@
uid://cs7xpxd1vpl56

View file

@ -0,0 +1,25 @@
class_name EffectComponent
extends Node2D
@export var target_node: Node
var active_effects: Array[BaseEffect] = []
func _process(delta: float) -> void:
# Process all active effects backwards so we can safely remove finished ones
for i in range(active_effects.size() - 1, -1, -1):
var effect = active_effects[i]
effect.process(delta, target_node)
# Example: simple time-based expiration
effect.duration -= delta
if effect.duration <= 0.0:
remove_effect(effect)
func apply_effect(effect: BaseEffect) -> void:
effect.start(target_node)
active_effects.append(effect)
func remove_effect(effect: BaseEffect) -> void:
effect.stop(target_node)
active_effects.erase(effect)

View file

@ -0,0 +1 @@
uid://65d3hbrpm21x