generated from krampus/template-godot4
27 lines
776 B
GDScript3
27 lines
776 B
GDScript3
|
class_name GameViewportContainer extends SubViewportContainer
|
||
|
## SubViewportContainer with game-specific special effects
|
||
|
|
||
|
var _screen_shake_intensity: float = 0.0
|
||
|
|
||
|
@onready var root_control: Control = %RootControl
|
||
|
|
||
|
|
||
|
## Start playing a screen shake effect.
|
||
|
func screen_shake(intensity: float, duration: float = 0.2) -> void:
|
||
|
var tween := get_tree().create_tween()
|
||
|
_screen_shake_intensity = intensity
|
||
|
tween.tween_property(self, "_screen_shake_intensity", 0.0, duration).set_trans(
|
||
|
Tween.TRANS_CUBIC
|
||
|
)
|
||
|
tween.tween_callback(_reset_position)
|
||
|
|
||
|
|
||
|
func _reset_position() -> void:
|
||
|
position = Vector2.ZERO
|
||
|
|
||
|
|
||
|
func _process(_delta: float) -> void:
|
||
|
if _screen_shake_intensity > 0:
|
||
|
position.x = randfn(0, _screen_shake_intensity)
|
||
|
position.y = randfn(0, _screen_shake_intensity)
|