CatStation/Content.Client/Gravity/GravitySystem.Shake.cs
Stanislav b22d38f9c0
Yaml audio params are often ignored (#36259)
* Replace WithVolume() with AddVolume(),
Remove AudioHelpers.WithVariation(),
Use specifier options for audio params

* Undo switching to AudioParams.AddVariation()

* Replace AudioHelpers.WithVariation with AudioParams.AddVariation()

* Test AudioParams.AddVariation() and change input parameters to sound like previous AudioHelpers.WithVariation()

* Fix build error

* Fix build error v2

* Remove DoAfter

* fixes

---------

Co-authored-by: AJCM-git <ajcm_mail@disroot.org>
2026-07-25 16:16:23 +00:00

63 lines
2 KiB
C#

using System.Numerics;
using Content.Shared.Camera;
using Content.Shared.Gravity;
using Robust.Client.Player;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Player;
using Robust.Shared.Random;
namespace Content.Client.Gravity;
public sealed partial class GravitySystem
{
[Dependency] private IPlayerManager _playerManager = default!;
[Dependency] private IRobustRandom _random = default!;
[Dependency] private SharedAudioSystem _audio = default!;
[Dependency] private SharedCameraRecoilSystem _sharedCameraRecoil = default!;
private void InitializeShake()
{
SubscribeLocalEvent<GravityShakeComponent, ComponentInit>(OnShakeInit);
}
private void OnShakeInit(EntityUid uid, GravityShakeComponent component, ComponentInit args)
{
var localPlayer = _playerManager.LocalEntity;
if (!TryComp(localPlayer, out TransformComponent? xform) ||
xform.GridUid != uid && xform.MapUid != uid)
{
return;
}
if (Timing.IsFirstTimePredicted && TryComp<GravityComponent>(uid, out var gravity))
{
var audioParams = gravity.GravityShakeSound?.Params ?? AudioParams.Default;
audioParams = audioParams.AddVolume(-2f);
_audio.PlayGlobal(gravity.GravityShakeSound, Filter.Local(), true, audioParams);
}
}
protected override void ShakeGrid(EntityUid uid, GravityComponent? gravity = null)
{
base.ShakeGrid(uid, gravity);
if (!Resolve(uid, ref gravity) || !Timing.IsFirstTimePredicted)
return;
var localPlayer = _playerManager.LocalEntity;
if (!TryComp(localPlayer, out TransformComponent? xform))
return;
if (xform.GridUid != uid ||
xform.GridUid == null && xform.MapUid != uid)
{
return;
}
var kick = new Vector2(_random.NextFloat(), _random.NextFloat()) * GravityKick;
_sharedCameraRecoil.KickCamera(localPlayer.Value, kick);
}
}