private const int DockRoundingDigits = 2;
public Angle GetAngle(EntityUid uid, TransformComponent xform, EntityUid targetUid, TransformComponent targetXform, EntityQuery<TransformComponent> xformQuery)
- {
- var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform);
- var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform);
-
- var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot),
- _physicsQuery.GetComponent(uid).LocalCenter);
- var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot),
- _physicsQuery.GetComponent(targetUid).LocalCenter);
-
- var mapDiff = shuttleCOM - targetCOM;
- var angle = mapDiff.ToWorldAngle();
- angle -= targetRot;
- return angle;
- }
-
- /// <summary>
- /// Checks if 2 docks can be connected by moving the shuttle directly onto docks.
- /// </summary>
- private bool CanDock(
- DockingComponent shuttleDock,
- TransformComponent shuttleDockXform,
- DockingComponent gridDock,
- TransformComponent gridDockXform,
- Box2 shuttleAABB,
- Angle targetGridRotation,
- FixturesComponent shuttleFixtures,
- MapGridComponent grid,
- bool isMap,
- out Matrix3x2 matty,
- out Box2 shuttleDockedAABB,
- out Angle gridRotation)
- {
- shuttleDockedAABB = Box2.UnitCentered;
- gridRotation = Angle.Zero;
- matty = Matrix3x2.Identity;
-
- if (shuttleDock.Docked ||
- gridDock.Docked ||
- !shuttleDockXform.Anchored ||
- !gridDockXform.Anchored)
- {
- return false;
- }
-
- // First, get the station dock's position relative to the shuttle, this is where we rotate it around
- var stationDockPos = shuttleDockXform.LocalPosition +
- shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f));
-
- // Need to invert the grid's angle.
- var shuttleDockAngle = shuttleDockXform.LocalRotation;
- var gridDockAngle = gridDockXform.LocalRotation.Opposite();
- var offsetAngle = gridDockAngle - shuttleDockAngle;
-
- var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle);
- var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle);
- matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix);
-
- if (!ValidSpawn(grid, matty, offsetAngle, shuttleFixtures, isMap))
- return false;
-
- shuttleDockedAABB = matty.TransformBox(shuttleAABB);
- gridRotation = (targetGridRotation + offsetAngle).Reduced();
- return true;
- }
-
- /// <summary>
- /// Gets docking config between 2 specific docks.
- /// </summary>
- public DockingConfig? GetDockingConfig(
- EntityUid shuttleUid,
- EntityUid targetGrid,
- EntityUid shuttleDockUid,
- DockingComponent shuttleDock,
- EntityUid gridDockUid,
- DockingComponent gridDock)
- {
- var shuttleDocks = new List<Entity<DockingComponent>>(1)
+ {
+ var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform);
+ var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform);
+
+ var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot),
+ _physicsQuery.GetComponent(uid).LocalCenter);
+ var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot),
+ _physicsQuery.GetComponent(targetUid).LocalCenter);
+
+ var mapDiff = shuttleCOM - targetCOM;
+ var angle = mapDiff.ToWorldAngle();
+ angle -= targetRot;
+ return angle;
+ }
+
+ /// <summary>
+ /// Checks if 2 docks can be connected by moving the shuttle directly onto docks.
+ /// </summary>
+ private bool CanDock(
+ DockingComponent shuttleDock,
+ TransformComponent shuttleDockXform,
+ DockingComponent gridDock,
+ TransformComponent gridDockXform,
+ Box2 shuttleAABB,
+ Angle targetGridRotation,
+ FixturesComponent shuttleFixtures,
+ Entity<MapGridComponent> gridEntity,
+ bool isMap,
+ out Matrix3x2 matty,
+ out Box2 shuttleDockedAABB,
+ out Angle gridRotation)
+ {
+ shuttleDockedAABB = Box2.UnitCentered;
+ gridRotation = Angle.Zero;
+ matty = Matrix3x2.Identity;
+
+ if (shuttleDock.Docked ||
+ gridDock.Docked ||
+ !shuttleDockXform.Anchored ||
+ !gridDockXform.Anchored)
+ {
+ return false;
+ }
+
+ // First, get the station dock's position relative to the shuttle, this is where we rotate it around
+ var stationDockPos = shuttleDockXform.LocalPosition +
+ shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f));
+
+ // Need to invert the grid's angle.
+ var shuttleDockAngle = shuttleDockXform.LocalRotation;
+ var gridDockAngle = gridDockXform.LocalRotation.Opposite();
+ var offsetAngle = gridDockAngle - shuttleDockAngle;
+
+ var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle);
+ var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle);
+ matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix);
+
+ if (!ValidSpawn(gridEntity, matty, offsetAngle, shuttleFixtures, isMap))
+ return false;
+
+ shuttleDockedAABB = matty.TransformBox(shuttleAABB);
+ gridRotation = (targetGridRotation + offsetAngle).Reduced();
+ return true;
+ }
+
+ /// <summary>
+ /// Gets docking config between 2 specific docks.
+ /// </summary>
+ public DockingConfig? GetDockingConfig(
+ EntityUid shuttleUid,
+ EntityUid targetGrid,
+ EntityUid shuttleDockUid,
+ DockingComponent shuttleDock,
+ EntityUid gridDockUid,
+ DockingComponent gridDock)
+ {
+ var shuttleDocks = new List<Entity<DockingComponent>>(1)
{
(shuttleDockUid, shuttleDock)
};
- var gridDocks = new List<Entity<DockingComponent>>(1)
+ var gridDocks = new List<Entity<DockingComponent>>(1)
{
(gridDockUid, gridDock)
};
- return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks);
- }
-
- /// <summary>
- /// Tries to get a valid docking configuration for the shuttle to the target grid.
- /// </summary>
- /// <param name="priorityTag">Priority docking tag to prefer, e.g. for emergency shuttle</param>
- public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null)
- {
- var gridDocks = GetDocks(targetGrid);
- var shuttleDocks = GetDocks(shuttleUid);
-
- return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag);
- }
-
- /// <summary>
- /// Tries to get a docking config at the specified coordinates and angle.
- /// </summary>
- public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid,
- EntityUid targetGrid,
- EntityCoordinates coordinates,
- Angle angle)
- {
- var gridDocks = GetDocks(targetGrid);
- var shuttleDocks = GetDocks(shuttleUid);
-
- var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks);
-
- foreach (var config in configs)
- {
- if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15))
- {
- return config;
- }
- }
-
- return null;
- }
-
- /// <summary>
- /// Gets all docking configs between the 2 grids.
- /// </summary>
- private List<DockingConfig> GetDockingConfigs(
- EntityUid shuttleUid,
- EntityUid targetGrid,
- List<Entity<DockingComponent>> shuttleDocks,
- List<Entity<DockingComponent>> gridDocks)
- {
- var validDockConfigs = new List<DockingConfig>();
-
- if (gridDocks.Count <= 0)
+ return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks);
+ }
+
+ /// <summary>
+ /// Tries to get a valid docking configuration for the shuttle to the target grid.
+ /// </summary>
+ /// <param name="priorityTag">Priority docking tag to prefer, e.g. for emergency shuttle</param>
+ public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null)
+ {
+ var gridDocks = GetDocks(targetGrid);
+ var shuttleDocks = GetDocks(shuttleUid);
+
+ return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag);
+ }
+
+ /// <summary>
+ /// Tries to get a docking config at the specified coordinates and angle.
+ /// </summary>
+ public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid,
+ EntityUid targetGrid,
+ EntityCoordinates coordinates,
+ Angle angle)
+ {
+ var gridDocks = GetDocks(targetGrid);
+ var shuttleDocks = GetDocks(shuttleUid);
+
+ var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks);
+
+ foreach (var config in configs)
+ {
+ if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15))
+ {
+ return config;
+ }
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Gets all docking configs between the 2 grids.
+ /// </summary>
+ private List<DockingConfig> GetDockingConfigs(
+ EntityUid shuttleUid,
+ EntityUid targetGrid,
+ List<Entity<DockingComponent>> shuttleDocks,
+ List<Entity<DockingComponent>> gridDocks)
+ {
+ var validDockConfigs = new List<DockingConfig>();
+
+ if (gridDocks.Count <= 0)
return validDockConfigs;
var targetGridGrid = _gridQuery.GetComponent(targetGrid);
var grids = new List<Entity<MapGridComponent>>();
if (shuttleDocks.Count > 0)
{
- // We'll try all combinations of shuttle docks and see which one is most suitable
- foreach (var (dockUid, shuttleDock) in shuttleDocks)
- {
- var shuttleDockXform = _xformQuery.GetComponent(dockUid);
-
- foreach (var (gridDockUid, gridDock) in gridDocks)
- {
- var gridXform = _xformQuery.GetComponent(gridDockUid);
-
- if (!CanDock(
- shuttleDock, shuttleDockXform,
- gridDock, gridXform,
- shuttleAABB,
- targetGridAngle,
- shuttleFixturesComp,
- targetGridGrid,
- isMap,
- out var matty,
- out var dockedAABB,
- out var targetAngle))
- {
- continue;
- }
-
- // Can't just use the AABB as we want to get bounds as tight as possible.
- var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty));
- var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, gridPosition.ToMapPos(EntityManager, _transform));
-
- // TODO: use tight bounds
- var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position);
-
- // Check if there's no intersecting grids (AKA oh god it's docking at cargo).
- grids.Clear();
- _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false);
- if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid))
- {
- continue;
- }
-
- // Alright well the spawn is valid now to check how many we can connect
- // Get the matrix for each shuttle dock and test it against the grid docks to see
- // if the connected position / direction matches.
-
- var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>()
+ // We'll try all combinations of shuttle docks and see which one is most suitable
+ foreach (var (dockUid, shuttleDock) in shuttleDocks)
+ {
+ var shuttleDockXform = _xformQuery.GetComponent(dockUid);
+
+ foreach (var (gridDockUid, gridDock) in gridDocks)
+ {
+ var gridXform = _xformQuery.GetComponent(gridDockUid);
+
+ if (!CanDock(
+ shuttleDock, shuttleDockXform,
+ gridDock, gridXform,
+ shuttleAABB,
+ targetGridAngle,
+ shuttleFixturesComp,
+ (targetGrid, targetGridGrid),
+ isMap,
+ out var matty,
+ out var dockedAABB,
+ out var targetAngle))
+ {
+ continue;
+ }
+
+ // Can't just use the AABB as we want to get bounds as tight as possible.
+ var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty));
+ var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, _transform.ToMapCoordinates(gridPosition).Position);
+
+ // TODO: use tight bounds
+ var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position);
+
+ // Check if there's no intersecting grids (AKA oh god it's docking at cargo).
+ grids.Clear();
+ _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false);
+ if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid))
+ {
+ continue;
+ }
+
+ // Alright well the spawn is valid now to check how many we can connect
+ // Get the matrix for each shuttle dock and test it against the grid docks to see
+ // if the connected position / direction matches.
+
+ var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>()
{
(dockUid, gridDockUid, shuttleDock, gridDock),
};
- dockedAABB = dockedAABB.Rounded(DockRoundingDigits);
-
- foreach (var (otherUid, other) in shuttleDocks)
- {
- if (other == shuttleDock)
- continue;
-
- foreach (var (otherGridUid, otherGrid) in gridDocks)
- {
- if (otherGrid == gridDock)
- continue;
-
- if (!CanDock(
- other,
- _xformQuery.GetComponent(otherUid),
- otherGrid,
- _xformQuery.GetComponent(otherGridUid),
- shuttleAABB,
- targetGridAngle,
- shuttleFixturesComp, targetGridGrid,
- isMap,
- out _,
- out var otherdockedAABB,
- out var otherTargetAngle))
- {
- continue;
- }
-
- otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits);
-
- // Different setup.
- if (!targetAngle.Equals(otherTargetAngle) ||
- !dockedAABB.Equals(otherdockedAABB))
- {
- continue;
- }
-
- dockedPorts.Add((otherUid, otherGridUid, other, otherGrid));
- }
- }
-
- validDockConfigs.Add(new DockingConfig()
- {
- Docks = dockedPorts,
- Coordinates = gridPosition,
- Area = dockedAABB,
- Angle = targetAngle,
- });
- }
- }
+ dockedAABB = dockedAABB.Rounded(DockRoundingDigits);
+
+ foreach (var (otherUid, other) in shuttleDocks)
+ {
+ if (other == shuttleDock)
+ continue;
+
+ foreach (var (otherGridUid, otherGrid) in gridDocks)
+ {
+ if (otherGrid == gridDock)
+ continue;
+
+ if (!CanDock(
+ other,
+ _xformQuery.GetComponent(otherUid),
+ otherGrid,
+ _xformQuery.GetComponent(otherGridUid),
+ shuttleAABB,
+ targetGridAngle,
+ shuttleFixturesComp,
+ (targetGrid, targetGridGrid),
+ isMap,
+ out _,
+ out var otherdockedAABB,
+ out var otherTargetAngle))
+ {
+ continue;
+ }
+
+ otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits);
+
+ // Different setup.
+ if (!targetAngle.Equals(otherTargetAngle) ||
+ !dockedAABB.Equals(otherdockedAABB))
+ {
+ continue;
+ }
+
+ dockedPorts.Add((otherUid, otherGridUid, other, otherGrid));
+ }
+ }
+
+ validDockConfigs.Add(new DockingConfig()
+ {
+ Docks = dockedPorts,
+ Coordinates = gridPosition,
+ Area = dockedAABB,
+ Angle = targetAngle,
+ });
+ }
+ }
}
return validDockConfigs;
- }
+ }
- private DockingConfig? GetDockingConfigPrivate(
- EntityUid shuttleUid,
- EntityUid targetGrid,
- List<Entity<DockingComponent>> shuttleDocks,
- List<Entity<DockingComponent>> gridDocks,
- string? priorityTag = null)
- {
- var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks);
+ private DockingConfig? GetDockingConfigPrivate(
+ EntityUid shuttleUid,
+ EntityUid targetGrid,
+ List<Entity<DockingComponent>> shuttleDocks,
+ List<Entity<DockingComponent>> gridDocks,
+ string? priorityTag = null)
+ {
+ var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks);
if (validDockConfigs.Count <= 0)
return null;
return location;
}
- /// <summary>
- /// Checks whether the shuttle can warp to the specified position.
- /// </summary>
- private bool ValidSpawn(MapGridComponent grid, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap)
- {
- var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle);
+ /// <summary>
+ /// Checks whether the shuttle can warp to the specified position.
+ /// </summary>
+ private bool ValidSpawn(Entity<MapGridComponent> gridEntity, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap)
+ {
+ var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle);
- // Because some docking bounds are tight af need to check each chunk individually
- foreach (var fix in shuttleFixturesComp.Fixtures.Values)
- {
- var polyShape = (PolygonShape) fix.Shape;
- var aabb = polyShape.ComputeAABB(transform, 0);
- aabb = aabb.Enlarged(-0.01f);
-
- // If it's a map check no hard collidable anchored entities overlap
- if (isMap)
- {
- foreach (var tile in grid.GetLocalTilesIntersecting(aabb))
- {
- var anchoredEnumerator = grid.GetAnchoredEntitiesEnumerator(tile.GridIndices);
-
- while (anchoredEnumerator.MoveNext(out var anc))
- {
- if (!_physicsQuery.TryGetComponent(anc, out var physics) ||
- !physics.CanCollide ||
- !physics.Hard)
- {
- continue;
- }
-
- return false;
- }
- }
- }
- // If it's not a map check it doesn't overlap the grid.
- else
- {
- if (grid.GetLocalTilesIntersecting(aabb).Any())
- return false;
- }
- }
-
- return true;
- }
-
- public List<Entity<DockingComponent>> GetDocks(EntityUid uid)
- {
- _dockingSet.Clear();
- _lookup.GetChildEntities(uid, _dockingSet);
-
- return _dockingSet.ToList();
- }
+ // Because some docking bounds are tight af need to check each chunk individually
+ foreach (var fix in shuttleFixturesComp.Fixtures.Values)
+ {
+ var polyShape = (PolygonShape)fix.Shape;
+ var aabb = polyShape.ComputeAABB(transform, 0);
+ aabb = aabb.Enlarged(-0.01f);
+
+ // If it's a map check no hard collidable anchored entities overlap
+ if (isMap)
+ {
+ foreach (var tile in _mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb))
+ {
+ var anchoredEnumerator = _mapSystem.GetAnchoredEntitiesEnumerator(gridEntity.Owner, gridEntity.Comp, tile.GridIndices);
+
+ while (anchoredEnumerator.MoveNext(out var anc))
+ {
+ if (!_physicsQuery.TryGetComponent(anc, out var physics) ||
+ !physics.CanCollide ||
+ !physics.Hard)
+ {
+ continue;
+ }
+
+ return false;
+ }
+ }
+ }
+ // If it's not a map check it doesn't overlap the grid.
+ else
+ {
+ if (_mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb).Any())
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public List<Entity<DockingComponent>> GetDocks(EntityUid uid)
+ {
+ _dockingSet.Clear();
+ _lookup.GetChildEntities(uid, _dockingSet);
+
+ return _dockingSet.ToList();
+ }
}
return uid;
}
- var mapId = _mapManager.CreateMap();
- var mapUid = _mapManager.GetMapEntityId(mapId);
+ var mapUid = _mapSystem.CreateMap(out var mapId);
var ftlMap = AddComp<FTLMapComponent>(mapUid);
_metadata.SetEntityName(mapUid, "FTL");
Log.Debug($"Setup hyperspace map at {mapUid}");
- DebugTools.Assert(!_mapManager.IsMapPaused(mapId));
+ DebugTools.Assert(!_mapSystem.IsPaused(mapId));
var parallax = EnsureComp<ParallaxComponent>(mapUid);
parallax.Parallax = ftlMap.Parallax;
/// </summary>
public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] out FTLDestinationComponent? component)
{
- var mapUid = _mapManager.GetMapEntityId(mapId);
+ var mapUid = _mapSystem.GetMapOrInvalid(mapId);
component = null;
if (!Exists(mapUid))
_console.RefreshShuttleConsoles(shuttleUid);
- var mapId = coordinates.GetMapId(EntityManager);
- var mapUid = _mapManager.GetMapEntityId(mapId);
+ var mapId = _transform.GetMapId(coordinates);
+ var mapUid = _mapSystem.GetMap(mapId);
var ev = new FTLRequestEvent(mapUid);
RaiseLocalEvent(shuttleUid, ref ev, true);
}
if (fromMapUid != null && TryComp(comp.StartupStream, out AudioComponent? startupAudio))
{
var clippedAudio = _audio.PlayStatic(_startupSound, Filter.Broadcast(),
- new EntityCoordinates(fromMapUid.Value, _maps.GetGridPosition(entity.Owner)), true, startupAudio.Params);
+ new EntityCoordinates(fromMapUid.Value, _mapSystem.GetGridPosition(entity.Owner)), true, startupAudio.Params);
_audio.SetPlaybackPosition(clippedAudio, entity.Comp1.StartupTime);
clippedAudio.Value.Component.Flags |= AudioFlags.NoOcclusion;
var map = maps.Min(o => o.GetHashCode());
mapId = new MapId(map);
- TryFTLProximity(uid, _mapManager.GetMapEntityId(mapId));
+ TryFTLProximity(uid, _mapSystem.GetMap(mapId));
}
// Docking FTL
else if (HasComp<MapGridComponent>(target.EntityId) &&
else
{
// TODO: This should now use tryftlproximity
- mapId = target.GetMapId(EntityManager);
+ mapId = _transform.GetMapId(target);
_transform.SetCoordinates(uid, xform, target, rotation: entity.Comp1.TargetAngle);
}
_mapManager.SetMapPaused(mapId, false);
Smimsh(uid, xform: xform);
- var ftlEvent = new FTLCompletedEvent(uid, _mapManager.GetMapEntityId(mapId));
+ var ftlEvent = new FTLCompletedEvent(uid, _mapSystem.GetMap(mapId));
RaiseLocalEvent(uid, ref ftlEvent, true);
}
// If the guy we knocked down is on a spaced tile, throw them too
if (grid != null)
- TossIfSpaced(grid, shuttleBody, child);
+ TossIfSpaced((xform.GridUid.Value, grid, shuttleBody), child);
}
}
}
/// <summary>
/// Throws people who are standing on a spaced tile, tries to throw them towards a neighbouring space tile
/// </summary>
- private void TossIfSpaced(MapGridComponent shuttleGrid, PhysicsComponent shuttleBody, EntityUid tossed)
+ private void TossIfSpaced(Entity<MapGridComponent, PhysicsComponent> shuttleEntity, EntityUid tossed)
{
- if (!_xformQuery.TryGetComponent(tossed, out var childXform) )
+ var shuttleGrid = shuttleEntity.Comp1;
+ var shuttleBody = shuttleEntity.Comp2;
+ if (!_xformQuery.TryGetComponent(tossed, out var childXform))
return;
// only toss if its on lattice/space
- var tile = shuttleGrid.GetTileRef(childXform.Coordinates);
+ var tile = _mapSystem.GetTileRef(shuttleEntity, shuttleGrid, childXform.Coordinates);
if (!tile.IsSpace(_tileDefManager))
return;
{
// Set position
var mapCoordinates = _transform.ToMapCoordinates(config.Coordinates);
- var mapUid = _mapManager.GetMapEntityId(mapCoordinates.MapId);
+ var mapUid = _mapSystem.GetMap(mapCoordinates.MapId);
_transform.SetCoordinates(shuttle.Owner, shuttle.Comp, new EntityCoordinates(mapUid, mapCoordinates.Position), rotation: config.Angle);
// Connect everything