credit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
extends Camera3D
|
||||
|
||||
## Fait légèrement trembler la caméra pour simuler les secousses d'une voiture.
|
||||
## Attache ce script directement sur chaque Camera3D du groupe "cinematic_cams"
|
||||
|
||||
@export_group("Intensité")
|
||||
@export var position_amplitude: float = 0.01 # amplitude du déplacement (en mètres)
|
||||
@export var rotation_amplitude: float = 0.2 # amplitude de la rotation (en degrés)
|
||||
@export var frequency: float = 0.5 # vitesse du tremblement (plus haut = plus nerveux)
|
||||
|
||||
var _noise: FastNoiseLite
|
||||
var _time: float = 0.0
|
||||
var _last_offset_pos: Vector3 = Vector3.ZERO
|
||||
var _last_offset_rot: Vector3 = Vector3.ZERO
|
||||
var _shaking: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_noise = FastNoiseLite.new()
|
||||
_noise.seed = randi()
|
||||
_noise.frequency = 1.0
|
||||
|
||||
start_shake()
|
||||
|
||||
|
||||
func start_shake() -> void:
|
||||
_shaking = true
|
||||
|
||||
|
||||
func stop_shake() -> void:
|
||||
_shaking = false
|
||||
# retire proprement le dernier offset appliqué pour ne pas laisser la caméra décalée
|
||||
position -= _last_offset_pos
|
||||
rotation -= _last_offset_rot
|
||||
_last_offset_pos = Vector3.ZERO
|
||||
_last_offset_rot = Vector3.ZERO
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not _shaking:
|
||||
return
|
||||
|
||||
_time += delta * frequency
|
||||
|
||||
# retire l'offset de la frame précédente avant d'en calculer un nouveau
|
||||
position -= _last_offset_pos
|
||||
rotation -= _last_offset_rot
|
||||
|
||||
var offset_pos := Vector3(
|
||||
_noise.get_noise_2d(_time, 0.0),
|
||||
_noise.get_noise_2d(0.0, _time),
|
||||
_noise.get_noise_2d(_time, _time)
|
||||
) * position_amplitude
|
||||
|
||||
var offset_rot := Vector3(
|
||||
_noise.get_noise_2d(_time, 100.0),
|
||||
_noise.get_noise_2d(100.0, _time),
|
||||
_noise.get_noise_2d(_time, -_time)
|
||||
) * deg_to_rad(rotation_amplitude)
|
||||
|
||||
position += offset_pos
|
||||
rotation += offset_rot
|
||||
|
||||
_last_offset_pos = offset_pos
|
||||
_last_offset_rot = offset_rot
|
||||
Reference in New Issue
Block a user