if (entManager.HasComponent<StationJobsComponent>(station))
{
- // Test that the map has valid latejoin spawn points
+ // Test that the map has valid latejoin spawn points or container spawn points
if (!NoSpawnMaps.Contains(mapProto))
{
var lateSpawns = 0;
- var query = entManager.AllEntityQueryEnumerator<SpawnPointComponent>();
- while (query.MoveNext(out var uid, out var comp))
- {
- if (comp.SpawnType != SpawnPointType.LateJoin
- || !xformQuery.TryGetComponent(uid, out var xform)
- || xform.GridUid == null
- || !gridUids.Contains(xform.GridUid.Value))
- {
- continue;
- }
-
- lateSpawns++;
- break;
- }
+ lateSpawns += GetCountLateSpawn<SpawnPointComponent>(gridUids, entManager);
+ lateSpawns += GetCountLateSpawn<ContainerSpawnPointComponent>(gridUids, entManager);
Assert.That(lateSpawns, Is.GreaterThan(0), $"Found no latejoin spawn points on {mapProto}");
}
await pair.CleanReturnAsync();
}
+
+
+ private static int GetCountLateSpawn<T>(List<EntityUid> gridUids, IEntityManager entManager)
+ where T : ISpawnPoint, IComponent
+ {
+ var resultCount = 0;
+ var queryPoint = entManager.AllEntityQueryEnumerator<T, TransformComponent>();
+#nullable enable
+ while (queryPoint.MoveNext(out T? comp, out var xform))
+ {
+ var spawner = (ISpawnPoint) comp;
+
+ if (spawner.SpawnType is not SpawnPointType.LateJoin
+ || xform.GridUid == null
+ || !gridUids.Contains(xform.GridUid.Value))
+ {
+ continue;
+ }
+#nullable disable
+ resultCount++;
+ break;
+ }
+
+ return resultCount;
+ }
+
[Test]
public async Task AllMapsTested()
{
/// </summary>
[RegisterComponent]
[Access(typeof(ContainerSpawnPointSystem))]
-public sealed partial class ContainerSpawnPointComponent : Component
+public sealed partial class ContainerSpawnPointComponent : Component, ISpawnPoint
{
/// <summary>
/// The ID of the container that this entity will spawn players into
/// The type of spawn point
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
- public SpawnPointType SpawnType = SpawnPointType.Unset;
+ public SpawnPointType SpawnType { get; set; } = SpawnPointType.Unset;
}
namespace Content.Server.Spawners.Components;
[RegisterComponent]
-public sealed partial class SpawnPointComponent : Component
+public sealed partial class SpawnPointComponent : Component, ISpawnPoint
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[DataField("job_id")]
private string? _jobId;
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("spawn_type")]
- public SpawnPointType SpawnType { get; private set; } = SpawnPointType.Unset;
+ /// <summary>
+ /// The type of spawn point
+ /// </summary>
+ [DataField("spawn_type"), ViewVariables(VVAccess.ReadWrite)]
+ public SpawnPointType SpawnType { get; set; } = SpawnPointType.Unset;
public JobPrototype? Job => string.IsNullOrEmpty(_jobId) ? null : _prototypeManager.Index<JobPrototype>(_jobId);