diff options
| author | Anson Bridges <bridges.anson@gmail.com> | 2022-10-19 14:14:08 -0400 |
|---|---|---|
| committer | Anson Bridges <bridges.anson@gmail.com> | 2022-10-19 14:19:10 -0400 |
| commit | 6dd265a0aee5fa0ed21b3d272fa3bc07d5d483d9 (patch) | |
| tree | bcf11172270686825efaeb0c86703f72cd4dade3 /godot/scripts/cameras/PlayerCamGDS.gd | |
| parent | 5100ec45264ff36a2558757e76198b8b25866992 (diff) | |
modelling, server stability, screen shake
Diffstat (limited to 'godot/scripts/cameras/PlayerCamGDS.gd')
| -rw-r--r-- | godot/scripts/cameras/PlayerCamGDS.gd | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/godot/scripts/cameras/PlayerCamGDS.gd b/godot/scripts/cameras/PlayerCamGDS.gd index 382ec06..77ca552 100644 --- a/godot/scripts/cameras/PlayerCamGDS.gd +++ b/godot/scripts/cameras/PlayerCamGDS.gd @@ -14,10 +14,41 @@ var arm: SpringArm = null var mouse_axis: Vector2 var mouse_sensitivity: float = 12.0 +var shake_amount:float = 0.0 +const shake_limit:float = 0.2 +onready var shake_timer:Timer = Timer.new() +onready var shake_tween: Tween = Tween.new() + func _ready(): + add_child(shake_timer) + add_child(shake_tween) Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + shake_timer.connect("timeout", self, "_on_shake_timer_timeout") current = true +func _process(_delta): + if mode == "STATIC": + transform.origin = Vector3(rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount)) + if mode == "FIRSTPERSON": + head.transform.origin = Vector3(rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount)) + +func shake(new_shake, shake_time=0.4): + shake_amount += new_shake + if shake_amount > shake_limit: + shake_amount = shake_limit + + shake_tween.stop_all() + set_process(true) + shake_timer.start(shake_time) + + +func _on_shake_timer_timeout(): + shake_amount = 0 + set_process(false) + shake_tween.interpolate_property(head, "translation", head.transform.origin, Vector3.ZERO, + 0.1, Tween.TRANS_QUAD, Tween.EASE_IN_OUT) + shake_tween.start() + func _input(event: InputEvent): if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: mouse_axis = event.relative |
