Allow stations to specify their own custom emergency shuttles. (#12747)

* Allow individual stations to specify a custom emergency shuttle.

* Use better assert message.
This commit is contained in:
Vordenburg
2022-11-24 13:28:03 -05:00
committed by GitHub
parent 14fa25af84
commit 7c4ff1c03d
4 changed files with 27 additions and 13 deletions

View File

@@ -221,9 +221,10 @@ namespace Content.IntegrationTests.Tests
// Test shuttle can dock.
// This is done inside gamemap test because loading the map takes ages and we already have it.
var station = entManager.GetComponent<StationMemberComponent>(targetGrid!.Value).Station;
var shuttlePath = entManager.GetComponent<StationDataComponent>(station).EmergencyShuttlePath
.ToString();
var shuttle = mapLoader.LoadGrid(shuttleMap, entManager.GetComponent<StationDataComponent>(station).EmergencyShuttlePath.ToString());
var stationConfig = entManager.GetComponent<StationDataComponent>(station).StationConfig;
Assert.IsNotNull(stationConfig, $"{entManager.ToPrettyString(station)} had null StationConfig.");
var shuttlePath = stationConfig.EmergencyShuttlePath.ToString();
var shuttle = mapLoader.LoadGrid(shuttleMap, shuttlePath);
Assert.That(shuttle != null && shuttleSystem.TryFTLDock(entManager.GetComponent<ShuttleComponent>(shuttle.Value), targetGrid.Value), $"Unable to dock {shuttlePath} to {mapProto}");
mapManager.DeleteMap(shuttleMap);

View File

@@ -426,10 +426,17 @@ public sealed partial class ShuttleSystem
private void AddEmergencyShuttle(StationDataComponent component)
{
if (!_emergencyShuttleEnabled || CentComMap == null || component.EmergencyShuttle != null) return;
if (!_emergencyShuttleEnabled
|| CentComMap == null
|| component.EmergencyShuttle != null
|| component.StationConfig == null)
{
return;
}
// Load escape shuttle
var shuttle = _map.LoadGrid(CentComMap.Value, component.EmergencyShuttlePath.ToString(), new MapLoadOptions()
var shuttlePath = component.StationConfig.EmergencyShuttlePath;
var shuttle = _map.LoadGrid(CentComMap.Value, shuttlePath.ToString(), new MapLoadOptions()
{
// Should be far enough... right? I'm too lazy to bounds check CentCom rn.
Offset = new Vector2(500f + _shuttleIndex, 0f)
@@ -437,7 +444,7 @@ public sealed partial class ShuttleSystem
if (shuttle == null)
{
_sawmill.Error($"Unable to spawn emergency shuttle {component.EmergencyShuttlePath} for {ToPrettyString(component.Owner)}");
_sawmill.Error($"Unable to spawn emergency shuttle {shuttlePath} for {ToPrettyString(component.Owner)}");
return;
}

View File

@@ -1,6 +1,5 @@
using Content.Server.Shuttles.Systems;
using Content.Server.Station.Systems;
using Robust.Shared.Utility;
namespace Content.Server.Station.Components;
@@ -31,10 +30,4 @@ public sealed class StationDataComponent : Component
/// </summary>
[ViewVariables, Access(typeof(ShuttleSystem), Friend = AccessPermissions.ReadWrite)]
public EntityUid? EmergencyShuttle;
/// <summary>
/// Emergency shuttle map path for this station.
/// </summary>
[ViewVariables(VVAccess.ReadWrite), Access(typeof(ShuttleSystem), Other = AccessPermissions.ReadWriteExecute)]
public ResourcePath EmergencyShuttlePath = new("/Maps/Shuttles/emergency.yml");
}

View File

@@ -0,0 +1,13 @@
using Robust.Shared.Utility;
using Robust.Shared.Serialization.TypeSerializers.Implementations;
namespace Content.Server.Station;
public sealed partial class StationConfig
{
/// <summary>
/// Emergency shuttle map path for this station.
/// </summary>
[DataField("emergencyShuttlePath", customTypeSerializer: typeof(ResourcePathSerializer))]
public ResourcePath EmergencyShuttlePath { get; set; } = new("/Maps/Shuttles/emergency.yml");
}