private void HandleCameraKick(CameraKickEvent args) { if (!EntityManager.TryGetComponent(args.Euid, out CameraRecoilComponent recoil)) { _log.Warning($"Received a kick for euid {args.Euid}, but it is missing required components."); return; } if (!float.IsFinite(args.Recoil.X) || !float.IsFinite(args.Recoil.Y)) { _log.Error($"CameraRecoilComponent on entity {recoil.Owner} passed a NaN recoil value. Ignoring."); return; } // Use really bad math to "dampen" kicks when we're already kicked. var existing = recoil.CurrentKick.Length; var dampen = existing / KickMagnitudeMax; recoil.CurrentKick += args.Recoil * (1 - dampen); if (recoil.CurrentKick.Length > KickMagnitudeMax) { recoil.CurrentKick = recoil.CurrentKick.Normalized * KickMagnitudeMax; } recoil.LastKickTime = 0; }
private void OnCameraKick(CameraKickEvent ev) { KickCamera(ev.Euid, ev.Recoil); }