Files
tbd-station-14/Content.Shared/Spawning/EntitySystemExtensions.cs
Tayrtahn f4cb02fb0c Code cleanup: Purge calls to obsolete EntityCoordinates methods (#26292)
* Purge calls to obsolete EntityCoordinates methods

* Pizza defruited; rerun those tests!
2024-03-21 12:59:56 +11:00

83 lines
2.9 KiB
C#

using System.Diagnostics.CodeAnalysis;
using Content.Shared.Physics;
using Robust.Shared.Map;
using Robust.Shared.Physics.Systems;
namespace Content.Shared.Spawning
{
public static class EntitySystemExtensions
{
public static EntityUid? SpawnIfUnobstructed(
this IEntityManager entityManager,
string? prototypeName,
EntityCoordinates coordinates,
CollisionGroup collisionLayer,
in Box2? box = null,
SharedPhysicsSystem? physicsManager = null)
{
physicsManager ??= entityManager.System<SharedPhysicsSystem>();
var mapCoordinates = coordinates.ToMap(entityManager, entityManager.System<SharedTransformSystem>());
return entityManager.SpawnIfUnobstructed(prototypeName, mapCoordinates, collisionLayer, box, physicsManager);
}
public static EntityUid? SpawnIfUnobstructed(
this IEntityManager entityManager,
string? prototypeName,
MapCoordinates coordinates,
CollisionGroup collisionLayer,
in Box2? box = null,
SharedPhysicsSystem? collision = null)
{
var boxOrDefault = box.GetValueOrDefault(Box2.UnitCentered).Translated(coordinates.Position);
collision ??= entityManager.System<SharedPhysicsSystem>();
foreach (var body in collision.GetCollidingEntities(coordinates.MapId, in boxOrDefault))
{
if (!body.Hard)
{
continue;
}
// TODO: wtf fix this
if (collisionLayer == 0 || (body.CollisionMask & (int) collisionLayer) == 0)
{
continue;
}
return null;
}
return entityManager.SpawnEntity(prototypeName, coordinates);
}
public static bool TrySpawnIfUnobstructed(
this IEntityManager entityManager,
string? prototypeName,
EntityCoordinates coordinates,
CollisionGroup collisionLayer,
[NotNullWhen(true)] out EntityUid? entity,
Box2? box = null,
SharedPhysicsSystem? physicsManager = null)
{
entity = entityManager.SpawnIfUnobstructed(prototypeName, coordinates, collisionLayer, box, physicsManager);
return entity != null;
}
public static bool TrySpawnIfUnobstructed(
this IEntityManager entityManager,
string? prototypeName,
MapCoordinates coordinates,
CollisionGroup collisionLayer,
[NotNullWhen(true)] out EntityUid? entity,
in Box2? box = null,
SharedPhysicsSystem? physicsManager = null)
{
entity = entityManager.SpawnIfUnobstructed(prototypeName, coordinates, collisionLayer, box, physicsManager);
return entity != null;
}
}
}