while (iteration < FTLProximityIterations)
{
grids.Clear();
- // We pass in an expanded offset here so we can safely do a random offset later.
- // We don't include this in the actual targetAABB because then we would be double-expanding it.
- // Once in this loop, then again when placing the shuttle later.
- // Note that targetAABB already has expansionAmount factored in already.
- _mapManager.FindGridsIntersecting(mapId, targetAABB.Enlarged(maxOffset), ref grids);
+ _mapManager.FindGridsIntersecting(mapId, targetAABB, ref grids);
foreach (var grid in grids)
{
if (nearbyGrids.Contains(uid))
continue;
+ // We pass in an expanded offset here so we can safely do a random offset later.
+ // We don't include this in the actual targetAABB because then we would be double-expanding it.
+ // Once in this loop, then again when placing the shuttle later.
+ // Note that targetAABB already has expansionAmount factored in already.
targetAABB = targetAABB.Union(
_transform.GetWorldMatrix(uid)
.TransformBox(Comp<MapGridComponent>(uid).LocalAABB.Enlarged(expansionAmount)));
// TODO: This should prefer the position's angle instead.
// TODO: This is pretty crude for multiple landings.
- if (nearbyGrids.Count > 1 || !HasComp<MapComponent>(targetXform.GridUid))
+ if (nearbyGrids.Count >= 1)
{
// Pick a random angle
var offsetAngle = _random.NextAngle();
var minRadius = MathF.Max(targetAABB.Width / 2f, targetAABB.Height / 2f);
spawnPos = targetAABB.Center + offsetAngle.RotateVec(new Vector2(_random.NextFloat(minRadius + minOffset, minRadius + maxOffset), 0f));
}
- else if (shuttleBody != null)
- {
- (spawnPos, angle) = _transform.GetWorldPositionRotation(targetXform);
- }
else
{
- spawnPos = _transform.GetWorldPosition(targetXform);
+ spawnPos = _transform.ToWorldPosition(targetCoordinates);
}
var offset = Vector2.Zero;
}
// Rotate our localcenter around so we spawn exactly where we "think" we should (center of grid on the dot).
- var transform = new Transform(spawnPos, angle);
- spawnPos = Robust.Shared.Physics.Transform.Mul(transform, offset);
+ var transform = new Transform(_transform.ToWorldPosition(xform.Coordinates), angle);
+ var adjustedOffset = Robust.Shared.Physics.Transform.Mul(transform, offset);
- coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos - offset);
+ coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos + adjustedOffset);
return true;
}