|
- extends Node2D
- # The code in this script was adapted from Game Endeavor on YouTube
- # https://www.youtube.com/watch?v=_DAvzzJMko8
-
- # NOTE: This script and associated scene assumes it's parented to a camera object!
-
- const TRANS = Tween.TRANS_SINE
- const EASE = Tween.EASE_IN_OUT
-
- var _amplitude = 0
- var _priority = 0
- onready var _camera = get_parent()
-
-
- func start(duration = 0.2, frequency = 15, amplitude = 16, priority = 0):
- if priority >= _priority:
- _priority = priority
- _amplitude = amplitude
- $Duration.wait_time = duration
- $Frequency.wait_time = 1/float(frequency)
-
- $Duration.start()
- $Frequency.start()
-
- _shake()
-
- func _interpolate_to(v):
- $Shake.interpolate_property(_camera, "offset", _camera.offset, v, $Frequency.wait_time, TRANS, EASE)
- $Shake.start()
-
- func _shake():
- _interpolate_to(Vector2(
- rand_range(-_amplitude, _amplitude),
- rand_range(-_amplitude, _amplitude)
- ))
-
-
- func _on_Frequency_timeout():
- _shake()
-
-
- func _on_Duration_timeout():
- _interpolate_to(Vector2())
- $Frequency.stop()
- $Duration.stop()
- _priority = 0
|