godot-plateformer/addons/reedfx/vfx/CPUVFXTemplate.gd

81 lines
1.5 KiB
GDScript

class_name CPUVFXTemplate extends CPUParticles2D
## =========================
## 播放模式
## =========================
enum PlayMode {
##播放一次
ONLY_ONCE,
##永久播放
INFINITE,
##播放固定次数
FIXED_TIMES
}
##可选择的播放模式
@export var play_mode: PlayMode = PlayMode.ONLY_ONCE
## 仅在 FIXED_TIMES 模式下生效
@export var fixed_times: int = 1
## =========================
## 内部状态
## =========================
var _played_times: int = 0
var _life_timer: float = 0.0
var _playing: bool = false
## =========================
## 生命周期
## =========================
func _ready() -> void:
_play()
func _process(delta: float) -> void:
if not _playing:
return
match play_mode:
PlayMode.ONLY_ONCE:
_update_only_once(delta)
PlayMode.FIXED_TIMES:
_update_fixed_times(delta)
PlayMode.INFINITE:
pass # 什么都不用做
## =========================
## 播放控制
## =========================
func _play() -> void:
emitting = true
_playing = true
_life_timer = 0.0
_played_times = 0
func stop_and_free() -> void:
emitting = false
queue_free()
## =========================
## 模式逻辑
## =========================
func _update_only_once(delta: float) -> void:
_life_timer += delta
if _life_timer >= lifetime:
stop_and_free()
func _update_fixed_times(delta: float) -> void:
_life_timer += delta
if _life_timer >= lifetime:
_played_times += 1
_life_timer = 0.0
if _played_times >= fixed_times:
stop_and_free()