Initial scaffolding.
This commit is contained in:
parent
8e821ead28
commit
1200ac7e32
8 changed files with 78 additions and 1 deletions
16
scripts/base_effect.gd
Normal file
16
scripts/base_effect.gd
Normal 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
|
||||
1
scripts/base_effect.gd.uid
Normal file
1
scripts/base_effect.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://cs7xpxd1vpl56
|
||||
25
scripts/effects_component.gd
Normal file
25
scripts/effects_component.gd
Normal 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)
|
||||
1
scripts/effects_component.gd.uid
Normal file
1
scripts/effects_component.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://65d3hbrpm21x
|
||||
Loading…
Add table
Add a link
Reference in a new issue