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