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:
@@ -221,9 +221,10 @@ namespace Content.IntegrationTests.Tests
|
|||||||
// Test shuttle can dock.
|
// Test shuttle can dock.
|
||||||
// This is done inside gamemap test because loading the map takes ages and we already have it.
|
// 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 station = entManager.GetComponent<StationMemberComponent>(targetGrid!.Value).Station;
|
||||||
var shuttlePath = entManager.GetComponent<StationDataComponent>(station).EmergencyShuttlePath
|
var stationConfig = entManager.GetComponent<StationDataComponent>(station).StationConfig;
|
||||||
.ToString();
|
Assert.IsNotNull(stationConfig, $"{entManager.ToPrettyString(station)} had null StationConfig.");
|
||||||
var shuttle = mapLoader.LoadGrid(shuttleMap, entManager.GetComponent<StationDataComponent>(station).EmergencyShuttlePath.ToString());
|
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}");
|
Assert.That(shuttle != null && shuttleSystem.TryFTLDock(entManager.GetComponent<ShuttleComponent>(shuttle.Value), targetGrid.Value), $"Unable to dock {shuttlePath} to {mapProto}");
|
||||||
|
|
||||||
mapManager.DeleteMap(shuttleMap);
|
mapManager.DeleteMap(shuttleMap);
|
||||||
|
|||||||
@@ -426,10 +426,17 @@ public sealed partial class ShuttleSystem
|
|||||||
|
|
||||||
private void AddEmergencyShuttle(StationDataComponent component)
|
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
|
// 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.
|
// Should be far enough... right? I'm too lazy to bounds check CentCom rn.
|
||||||
Offset = new Vector2(500f + _shuttleIndex, 0f)
|
Offset = new Vector2(500f + _shuttleIndex, 0f)
|
||||||
@@ -437,7 +444,7 @@ public sealed partial class ShuttleSystem
|
|||||||
|
|
||||||
if (shuttle == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using Content.Server.Shuttles.Systems;
|
using Content.Server.Shuttles.Systems;
|
||||||
using Content.Server.Station.Systems;
|
using Content.Server.Station.Systems;
|
||||||
using Robust.Shared.Utility;
|
|
||||||
|
|
||||||
namespace Content.Server.Station.Components;
|
namespace Content.Server.Station.Components;
|
||||||
|
|
||||||
@@ -31,10 +30,4 @@ public sealed class StationDataComponent : Component
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables, Access(typeof(ShuttleSystem), Friend = AccessPermissions.ReadWrite)]
|
[ViewVariables, Access(typeof(ShuttleSystem), Friend = AccessPermissions.ReadWrite)]
|
||||||
public EntityUid? EmergencyShuttle;
|
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");
|
|
||||||
}
|
}
|
||||||
|
|||||||
13
Content.Server/Station/StationConfig.Shuttles.cs
Normal file
13
Content.Server/Station/StationConfig.Shuttles.cs
Normal 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");
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user