continue;
}
- if (Deleted(centcomm.Entity))
+ if (!Deleted(centcomm.Entity))
{
- // TODO: Need to get non-overlapping positions.
_shuttle.FTLTravel(comp.EmergencyShuttle.Value, shuttle,
- new EntityCoordinates(
- _mapManager.GetMapEntityId(centcomm.MapId),
- _random.NextVector2(1000f)), _consoleAccumulator, TransitTime);
+ centcomm.Entity.Value, _consoleAccumulator, TransitTime, true);
+ continue;
}
- else
+
+ if (!Deleted(centcomm.MapEntity))
{
+ // TODO: Need to get non-overlapping positions.
_shuttle.FTLTravel(comp.EmergencyShuttle.Value, shuttle,
- centcomm.Entity, _consoleAccumulator, TransitTime, true);
+ new EntityCoordinates(centcomm.MapEntity.Value,
+ _random.NextVector2(1000f)), _consoleAccumulator, TransitTime);
}
}
}
// Don't dock them. If you do end up doing this then stagger launch.
- _shuttle.FTLTravel(uid, shuttle, centcomm.Entity, hyperspaceTime: TransitTime);
+ _shuttle.FTLTravel(uid, shuttle, centcomm.Entity.Value, hyperspaceTime: TransitTime);
RemCompDeferred<EscapePodComponent>(uid);
}
if (Deleted(comp.Entity))
continue;
- _shuttle.AddFTLDestination(comp.Entity, true);
+ _shuttle.AddFTLDestination(comp.Entity.Value, true);
}
}
}
using Content.Shared.Tiles;
using Robust.Server.GameObjects;
using Robust.Server.Maps;
-using Robust.Server.Player;
-using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Configuration;
using Robust.Shared.Map;
private void OnCentcommShutdown(EntityUid uid, StationCentcommComponent component, ComponentShutdown args)
{
- QueueDel(component.Entity);
- component.Entity = EntityUid.Invalid;
-
- if (_mapManager.MapExists(component.MapId))
- _mapManager.DeleteMap(component.MapId);
+ ClearCentcomm(component);
+ }
- component.MapId = MapId.Nullspace;
+ private void ClearCentcomm(StationCentcommComponent component)
+ {
+ QueueDel(component.Entity);
+ QueueDel(component.MapEntity);
+ component.Entity = null;
+ component.MapEntity = null;
}
private void SetEmergencyShuttleEnabled(bool value)
// Post mapinit? fancy
if (TryComp<TransformComponent>(component.Entity, out var xform))
{
- component.MapId = xform.MapID;
+ component.MapEntity = xform.MapUid;
return;
}
private void AddCentcomm(StationCentcommComponent component)
{
+ if (component.MapEntity != null || component.Entity != null)
+ {
+ _sawmill.Warning("Attempted to re-add an existing centcomm map.");
+ return;
+ }
+
// Check for existing centcomms and just point to that
var query = AllEntityQuery<StationCentcommComponent>();
-
while (query.MoveNext(out var otherComp))
{
if (otherComp == component)
continue;
- component.MapId = otherComp.MapId;
+ if (!Exists(otherComp.MapEntity) || !Exists(otherComp.Entity))
+ {
+ Log.Error($"Disconvered invalid centcomm component?");
+ ClearCentcomm(otherComp);
+ continue;
+ }
+
+ component.MapEntity = otherComp.MapEntity;
component.ShuttleIndex = otherComp.ShuttleIndex;
return;
}
+ if (string.IsNullOrEmpty(component.Map.ToString()))
+ {
+ _sawmill.Warning("No CentComm map found, skipping setup.");
+ return;
+ }
+
var mapId = _mapManager.CreateMap();
- component.MapId = mapId;
+ var grid = _map.LoadGrid(mapId, component.Map.ToString());
+ var map = _mapManager.GetMapEntityId(mapId);
- if (!string.IsNullOrEmpty(component.Map.ToString()))
+ if (!Exists(map))
{
- var ent = _map.LoadGrid(mapId, component.Map.ToString());
+ Log.Error($"Failed to set up centcomm map!");
+ QueueDel(grid);
+ return;
+ }
- if (ent != null)
- {
- component.Entity = ent.Value;
- _shuttle.AddFTLDestination(ent.Value, false);
- }
+ if (!Exists(grid))
+ {
+ Log.Error($"Failed to set up centcomm grid!");
+ QueueDel(map);
+ return;
}
- else
+
+ var xform = Transform(grid.Value);
+ if (xform.ParentUid != map || xform.MapUid != map)
{
- _sawmill.Warning("No CentComm map found, skipping setup.");
+ Log.Error($"Centcomm grid is not parented to its own map?");
+ QueueDel(map);
+ QueueDel(grid);
+ return;
}
+
+ component.MapEntity = map;
+ component.Entity = grid;
+ _shuttle.AddFTLDestination(grid.Value, false);
}
- public HashSet<MapId> GetCentcommMaps()
+ public HashSet<EntityUid> GetCentcommMaps()
{
var query = AllEntityQuery<StationCentcommComponent>();
- var maps = new HashSet<MapId>(Count<StationCentcommComponent>());
+ var maps = new HashSet<EntityUid>(Count<StationCentcommComponent>());
while (query.MoveNext(out var comp))
{
- maps.Add(comp.MapId);
+ if (comp.MapEntity != null)
+ maps.Add(comp.MapEntity.Value);
}
return maps;
{
if (!_emergencyShuttleEnabled
|| component.EmergencyShuttle != null ||
- !TryComp<StationCentcommComponent>(uid, out var centcomm))
+ !TryComp<StationCentcommComponent>(uid, out var centcomm)
+ || !TryComp(centcomm.MapEntity, out MapComponent? map))
{
return;
}
// Load escape shuttle
var shuttlePath = component.EmergencyShuttlePath;
- var shuttle = _map.LoadGrid(centcomm.MapId, shuttlePath.ToString(), new MapLoadOptions()
+ var shuttle = _map.LoadGrid(map.MapId, shuttlePath.ToString(), new MapLoadOptions()
{
// Should be far enough... right? I'm too lazy to bounds check CentCom rn.
Offset = new Vector2(500f + centcomm.ShuttleIndex, 0f)
while (query.MoveNext(out var comp))
{
- if (comp == centcomm || comp.MapId != centcomm.MapId)
+ if (comp == centcomm || comp.MapEntity != centcomm.MapEntity)
continue;
comp.ShuttleIndex = centcomm.ShuttleIndex;