28 lines
698 B
GDScript
28 lines
698 B
GDScript
extends Camera2D
|
|
|
|
var shake_tween: Tween
|
|
|
|
func shake(duration: float, intensity: float, constant: bool = false) -> void:
|
|
if shake_tween and shake_tween.is_valid():
|
|
shake_tween.kill()
|
|
|
|
offset = Vector2.ZERO
|
|
shake_tween = create_tween()
|
|
shake_tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
|
|
|
|
var step_duration := 0.05
|
|
var steps := maxi(1, int(duration / step_duration))
|
|
|
|
for i in steps:
|
|
var t := float(i) / float(steps)
|
|
var si := intensity
|
|
if not constant:
|
|
si *= 1.0 - t
|
|
var target := Vector2(
|
|
randf_range(-si, si),
|
|
randf_range(-si, si)
|
|
)
|
|
shake_tween.tween_property(self, "offset", target, step_duration)
|
|
|
|
shake_tween.tween_property(self, "offset", Vector2.ZERO, 0.05)
|