30 lines
812 B
GDScript
30 lines
812 B
GDScript
extends TextureProgressBar
|
|
|
|
@export var threshold: float = 0.5
|
|
@export var shake_intensity: float = 5.0
|
|
|
|
var original_x: float
|
|
|
|
func _ready() -> void:
|
|
EventBus.mask_time_changed.connect(_on_time_changed)
|
|
original_x = position.x
|
|
|
|
func _process(_delta: float) -> void:
|
|
if value / max_value <= threshold:
|
|
apply_effects()
|
|
else:
|
|
position.x = original_x
|
|
modulate = Color.WHITE
|
|
|
|
func _on_time_changed(new: float) -> void:
|
|
value = new
|
|
|
|
func apply_effects() -> void:
|
|
var danger_factor = 1.0 - (value / (max_value * threshold))
|
|
danger_factor = clamp(danger_factor, 0.0, 1.0)
|
|
|
|
var flash = (sin(Time.get_ticks_msec() * 0.02) + 1.0) / 2.0
|
|
modulate = Color.WHITE * (1 + flash * danger_factor)
|
|
|
|
var shake = sin(Time.get_ticks_msec() * 0.05) * shake_intensity * danger_factor
|
|
position.x = original_x + shake
|