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)