27 lines
889 B
GDScript
27 lines
889 B
GDScript
class_name FlashEffect
|
|
extends BaseEffect
|
|
|
|
@export var flash_color: Color = Color.WHITE
|
|
@export var flash_speed: float = 10.0
|
|
|
|
var _timer: float = 0.0
|
|
var _original_material: Material
|
|
|
|
func start(target: Node) -> void:
|
|
_timer = 0.0
|
|
if target is CanvasItem:
|
|
_original_material = target.material
|
|
# Apply a ShaderMaterial that handles the flash
|
|
var flash_material = ShaderMaterial.new()
|
|
flash_material.shader = preload("res://shaders/flash.gdshader")
|
|
target.material = flash_material
|
|
|
|
func process(delta: float, target: Node) -> void:
|
|
_timer += delta
|
|
if target.material is ShaderMaterial:
|
|
var intensity = (sin(_timer * flash_speed) + 1.0) / 2.0
|
|
target.material.set_shader_parameter("flash_intensity", intensity)
|
|
|
|
func stop(target: Node) -> void:
|
|
if target is CanvasItem:
|
|
target.material = _original_material
|