Refactor stations to properly use entity prototypes. (stationsv3) (#16570)

* Update StationSpawningSystem.cs

Web-edit to allow feeding in an existing entity.

* Update StationSpawningSystem.cs

value type moment

* Update StationSpawningSystem.cs

* Oh goddamnit this is a refactor now.

* awawawa

* aaaaaaaaaaa

* ee

* forgot records.

* no records? no records.

* What's in a name?

* Sloth forcing me to do the refactor properly smh.

* e

* optional evac in test.

* tests pls work

* awa

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
This commit is contained in:
Moony
2023-05-19 15:45:09 -05:00
committed by GitHub
parent 0d9b9e113e
commit e92a8fedab
77 changed files with 1176 additions and 987 deletions

View File

@@ -227,51 +227,61 @@ 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 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(shuttle.Value, entManager.GetComponent<ShuttleComponent>(shuttle.Value), targetGrid.Value), $"Unable to dock {shuttlePath} to {mapProto}");
if (entManager.TryGetComponent<StationEmergencyShuttleComponent>(station, out var stationEvac))
{
var shuttlePath = stationEvac.EmergencyShuttlePath;
var shuttle = mapLoader.LoadGrid(shuttleMap, shuttlePath.ToString());
Assert.That(
shuttle != null && shuttleSystem.TryFTLDock(shuttle.Value,
entManager.GetComponent<ShuttleComponent>(shuttle.Value), targetGrid.Value),
$"Unable to dock {shuttlePath} to {mapProto}");
}
mapManager.DeleteMap(shuttleMap);
// Test that the map has valid latejoin spawn points
if (!NoSpawnMaps.Contains(mapProto))
if (entManager.HasComponent<StationJobsComponent>(station))
{
var lateSpawns = 0;
foreach (var comp in entManager.EntityQuery<SpawnPointComponent>(true))
// Test that the map has valid latejoin spawn points
if (!NoSpawnMaps.Contains(mapProto))
{
if (comp.SpawnType != SpawnPointType.LateJoin ||
!xformQuery.TryGetComponent(comp.Owner, out var xform) ||
xform.GridUid == null ||
!gridUids.Contains(xform.GridUid.Value))
var lateSpawns = 0;
foreach (var comp in entManager.EntityQuery<SpawnPointComponent>(true))
{
continue;
if (comp.SpawnType != SpawnPointType.LateJoin ||
!xformQuery.TryGetComponent(comp.Owner, out var xform) ||
xform.GridUid == null ||
!gridUids.Contains(xform.GridUid.Value))
{
continue;
}
lateSpawns++;
break;
}
lateSpawns++;
break;
Assert.That(lateSpawns, Is.GreaterThan(0), $"Found no latejoin spawn points on {mapProto}");
}
Assert.That(lateSpawns, Is.GreaterThan(0), $"Found no latejoin spawn points on {mapProto}");
// Test all availableJobs have spawnPoints
// This is done inside gamemap test because loading the map takes ages and we already have it.
var jobList = entManager.GetComponent<StationJobsComponent>(station).RoundStartJobList
.Where(x => x.Value != 0)
.Select(x => x.Key);
var spawnPoints = entManager.EntityQuery<SpawnPointComponent>()
.Where(spawnpoint => spawnpoint.SpawnType == SpawnPointType.Job)
.Select(spawnpoint => spawnpoint.Job.ID)
.Distinct();
List<string> missingSpawnPoints = new();
foreach (var spawnpoint in jobList.Except(spawnPoints))
{
if (protoManager.Index<JobPrototype>(spawnpoint).SetPreference)
missingSpawnPoints.Add(spawnpoint);
}
Assert.That(missingSpawnPoints.Count() == 0,
$"There is no spawnpoint for {String.Join(", ", missingSpawnPoints)} on {mapProto}.");
}
// Test all availableJobs have spawnPoints
// This is done inside gamemap test because loading the map takes ages and we already have it.
var jobList = entManager.GetComponent<StationJobsComponent>(station).RoundStartJobList
.Where(x => x.Value != 0)
.Select(x => x.Key);
var spawnPoints = entManager.EntityQuery<SpawnPointComponent>()
.Where(spawnpoint => spawnpoint.SpawnType == SpawnPointType.Job)
.Select(spawnpoint => spawnpoint.Job.ID)
.Distinct();
List<string> missingSpawnPoints = new();
foreach (var spawnpoint in jobList.Except(spawnPoints))
{
if (protoManager.Index<JobPrototype>(spawnpoint).SetPreference)
missingSpawnPoints.Add(spawnpoint);
}
Assert.That(missingSpawnPoints.Count() == 0, $"There is no spawnpoint for {String.Join(", ", missingSpawnPoints)} on {mapProto}.");
try
{