From 90655a55d36e6f95bc851fa66e36fe6d41d559f8 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Tue, 19 Jul 2022 21:26:44 +1000 Subject: [PATCH] Announce shuttle direction on proximity --- .../Systems/ShuttleSystem.EmergencyShuttle.cs | 41 ++++++++++++------- Resources/Locale/en-US/shuttles/emergency.ftl | 2 +- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs index 0f49ad16d42d..4b0cc201eac2 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs @@ -254,24 +254,13 @@ public void CallEmergencyShuttle(EntityUid? stationUid) return; } + var xformQuery = GetEntityQuery(); + if (TryFTLDock(shuttle, targetGrid.Value)) { - var xformQuery = GetEntityQuery(); - if (TryComp(targetGrid.Value, out var targetXform)) { - var (shuttlePos, shuttleRot) = xform.GetWorldPositionRotation(xformQuery); - var (targetPos, targetRot) = targetXform.GetWorldPositionRotation(xformQuery); - - var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), - Comp(shuttle.Owner).LocalCenter); - var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), - Comp(targetGrid.Value).LocalCenter); - - var mapDiff = shuttleCOM - targetCOM; - var targetRotation = targetRot; - var angle = mapDiff.ToWorldAngle(); - angle -= targetRotation; + var angle = GetAngle(xform, targetXform, xformQuery); _chatSystem.DispatchStationAnnouncement(stationUid.Value, Loc.GetString("emergency-shuttle-docked", ("time", $"{_consoleAccumulator:0}"), ("direction", angle.GetDir())), playDefaultSound: false); } @@ -281,13 +270,35 @@ public void CallEmergencyShuttle(EntityUid? stationUid) } else { + if (TryComp(targetGrid.Value, out var targetXform)) + { + var angle = GetAngle(xform, targetXform, xformQuery); + _chatSystem.DispatchStationAnnouncement(stationUid.Value, Loc.GetString("emergency-shuttle-nearby", ("direction", angle.GetDir())), playDefaultSound: false); + } + _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle {ToPrettyString(stationUid.Value)} unable to find a valid docking port for {ToPrettyString(stationUid.Value)}"); - _chatSystem.DispatchStationAnnouncement(stationUid.Value, Loc.GetString("emergency-shuttle-nearby"), playDefaultSound: false); // TODO: Need filter extensions or something don't blame me. SoundSystem.Play("/Audio/Misc/notice1.ogg", Filter.Broadcast()); } } + private Angle GetAngle(TransformComponent xform, TransformComponent targetXform, EntityQuery xformQuery) + { + var (shuttlePos, shuttleRot) = xform.GetWorldPositionRotation(xformQuery); + var (targetPos, targetRot) = targetXform.GetWorldPositionRotation(xformQuery); + + var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), + Comp(xform.Owner).LocalCenter); + var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), + Comp(targetXform.Owner).LocalCenter); + + var mapDiff = shuttleCOM - targetCOM; + var targetRotation = targetRot; + var angle = mapDiff.ToWorldAngle(); + angle -= targetRotation; + return angle; + } + /// /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. /// diff --git a/Resources/Locale/en-US/shuttles/emergency.ftl b/Resources/Locale/en-US/shuttles/emergency.ftl index 17922408116d..4750dc11a4dd 100644 --- a/Resources/Locale/en-US/shuttles/emergency.ftl +++ b/Resources/Locale/en-US/shuttles/emergency.ftl @@ -15,7 +15,7 @@ emergency-shuttle-left = The Emergency Shuttle has left the station. Estimate {$ emergency-shuttle-launch-time = The emergency shuttle will launch in {$consoleAccumulator} seconds. emergency-shuttle-docked = The Emergency Shuttle has docked with the station on the {$direction} side. It will leave in {$time} seconds. emergency-shuttle-good-luck = The Emergency Shuttle is unable to find a station. Good luck. -emergency-shuttle-nearby = The Emergency Shuttle is unable to find a valid docking port. It has warped in nearby. +emergency-shuttle-nearby = The Emergency Shuttle is unable to find a valid docking port. It has warped in {$direction} of the station. # Emergency shuttle console popup / announcement emergency-shuttle-console-auth-left = {$remaining} authorizations needed until shuttle is launched early.