Add scene-authored FX library and bull ability effects
An Fx autoload + one_shot_effect base so every effect is an inspector-editable .tscn (the systems/fx/ authoring dir): blood/slam/spark/flash primitives and the bull's kick/dash/slam/roll + movement effects (bull_*.tscn), fired via Fx.spawn() / Fx.attach(). Plus a preview gallery + smoke test, and bull_impact_fx.gd for the coded, non-particle slam rings + kick flash-pop. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCyaJPTHCH9EDthpf4A5Sj
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
extends Node3D
|
||||
## Live preview stage for the FX library. Cycles through every registered effect on a loop against
|
||||
## arena-ish lighting so Siim sees each one as it reads in-game. Open fx/effect_gallery.tscn and
|
||||
## press Play, then edit any effect .tscn in the inspector and re-run to compare. See fx/README.md.
|
||||
|
||||
const _CYCLE_SEC := 1.6
|
||||
const _EFFECTS: Array[StringName] = [
|
||||
&"blood_burst", &"slam_dust", &"spark", &"hit_flash",
|
||||
&"bull_slam", &"bull_kick", &"bull_dash",
|
||||
]
|
||||
|
||||
@onready var _label: Label = $UI/Label
|
||||
# Reached by path rather than the Fx global so the placeholder-seeder can compile and attach this
|
||||
# script headless (autoload globals aren't resolvable during an on-demand compile in a --script run).
|
||||
@onready var _fx: Node = get_node("/root/Fx")
|
||||
|
||||
var _index := 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var timer := Timer.new()
|
||||
timer.wait_time = _CYCLE_SEC
|
||||
timer.autostart = true
|
||||
add_child(timer)
|
||||
timer.timeout.connect(_fire_next)
|
||||
_fire_next()
|
||||
|
||||
|
||||
func _fire_next() -> void:
|
||||
var effect := _EFFECTS[_index % _EFFECTS.size()]
|
||||
_index += 1
|
||||
_label.text = "%s (%d/%d)" % [effect, (_index - 1) % _EFFECTS.size() + 1, _EFFECTS.size()]
|
||||
_fx.call("spawn", effect, global_transform.translated_local(Vector3(0.0, 0.25, 0.0)))
|
||||
Reference in New Issue
Block a user