Files
tbd-station-14/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs
metalgearsloth 269c93245d Unrevert audio (#21330)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2023-11-27 22:12:34 +11:00

60 lines
2.0 KiB
C#

using Content.Server.Shuttles.Components;
using Content.Shared.Audio;
using Robust.Shared.Audio;
using Robust.Shared.Map;
using Robust.Shared.Physics.Dynamics;
using Robust.Shared.Physics.Events;
using Robust.Shared.Player;
namespace Content.Server.Shuttles.Systems;
public sealed partial class ShuttleSystem
{
/// <summary>
/// Minimum velocity difference between 2 bodies for a shuttle "impact" to occur.
/// </summary>
private const int MinimumImpactVelocity = 10;
private readonly SoundCollectionSpecifier _shuttleImpactSound = new("ShuttleImpactSound");
private void InitializeImpact()
{
SubscribeLocalEvent<ShuttleComponent, StartCollideEvent>(OnShuttleCollide);
}
private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref StartCollideEvent args)
{
if (!HasComp<ShuttleComponent>(args.OtherEntity))
return;
var ourBody = args.OurBody;
var otherBody = args.OtherBody;
// TODO: Would also be nice to have a continuous sound for scraping.
var ourXform = Transform(uid);
if (ourXform.MapUid == null)
return;
var otherXform = Transform(args.OtherEntity);
var ourPoint = ourXform.InvWorldMatrix.Transform(args.WorldPoint);
var otherPoint = otherXform.InvWorldMatrix.Transform(args.WorldPoint);
var ourVelocity = _physics.GetLinearVelocity(uid, ourPoint, ourBody, ourXform);
var otherVelocity = _physics.GetLinearVelocity(args.OtherEntity, otherPoint, otherBody, otherXform);
var jungleDiff = (ourVelocity - otherVelocity).Length();
if (jungleDiff < MinimumImpactVelocity)
{
return;
}
var coordinates = new EntityCoordinates(ourXform.MapUid.Value, args.WorldPoint);
var volume = MathF.Min(10f, 1f * MathF.Pow(jungleDiff, 0.5f) - 5f);
var audioParams = AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation).WithVolume(volume);
_audio.PlayPvs(_shuttleImpactSound, coordinates, audioParams);
}
}