Load grid error related changes (#10817)

This commit is contained in:
Leon Friedrich
2022-08-26 01:33:40 +12:00
committed by GitHub
parent 561c527657
commit c65d1c51ce
11 changed files with 37 additions and 16 deletions

View File

@@ -72,7 +72,7 @@ namespace Content.IntegrationTests.Tests.Body
await server.WaitPost(() =>
{
mapId = mapManager.CreateMap();
grid = mapLoader.LoadBlueprint(mapId, testMapName).gridId;
grid = mapLoader.LoadGrid(mapId, testMapName).gridId;
});
Assert.NotNull(grid, $"Test blueprint {testMapName} not found.");
@@ -144,7 +144,7 @@ namespace Content.IntegrationTests.Tests.Body
await server.WaitPost(() =>
{
mapId = mapManager.CreateMap();
grid = mapLoader.LoadBlueprint(mapId, testMapName).gridId;
grid = mapLoader.LoadGrid(mapId, testMapName).gridId;
});
Assert.NotNull(grid, $"Test blueprint {testMapName} not found.");

View File

@@ -27,10 +27,10 @@ namespace Content.IntegrationTests.Tests
{
// TODO: Properly find the "main" station grid.
var grid0 = mapManager.GetAllGrids().First();
mapLoader.SaveBlueprint(grid0.GridEntityId, "save load save 1.yml");
mapLoader.SaveGrid(grid0.GridEntityId, "save load save 1.yml");
var mapId = mapManager.CreateMap();
var grid = mapLoader.LoadBlueprint(mapId, "save load save 1.yml").gridId;
mapLoader.SaveBlueprint(grid!.Value, "save load save 2.yml");
var grid = mapLoader.LoadGrid(mapId, "save load save 1.yml").gridId;
mapLoader.SaveGrid(grid!.Value, "save load save 2.yml");
});
await server.WaitIdleAsync();

View File

@@ -287,7 +287,7 @@ public sealed partial class CargoSystem
var possibleNames = _protoMan.Index<DatasetPrototype>(prototype.NameDataset).Values;
var name = _random.Pick(possibleNames);
var (_, shuttleUid) = _loader.LoadBlueprint(CargoMap.Value, prototype.Path.ToString());
var (_, shuttleUid) = _loader.LoadGrid(CargoMap.Value, prototype.Path.ToString());
var xform = Transform(shuttleUid!.Value);
MetaData(shuttleUid!.Value).EntityName = name;

View File

@@ -25,7 +25,7 @@ namespace Content.Server.GameTicking
{
private const string ObserverPrototypeName = "MobObserver";
[ViewVariables(VVAccess.ReadWrite), Obsolete("Due for removal when observer spawning is refactored.")]
[ViewVariables(VVAccess.ReadWrite), Obsolete("Due for removal when observer spawning is refactored.")] // See also: MindComponent's OnShutdown shitcode
private EntityCoordinates _spawnPoint;
/// <summary>
@@ -280,7 +280,11 @@ namespace Content.Server.GameTicking
#region Spawn Points
public EntityCoordinates GetObserverSpawnPoint()
{
var location = _spawnPoint;
// TODO rename this to TryGetObserverSpawnPoint to make it clear that the result might be invalid. Or at
// least try try more fallback values, like randomly spawning them in any available map or just creating a
// "we fucked up" map. Its better than dumping them into the void.
var location = _spawnPoint.IsValid(EntityManager) ? _spawnPoint : EntityCoordinates.Invalid;
_possiblePositions.Clear();

View File

@@ -195,7 +195,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
var shuttlePath = "/Maps/infiltrator.yml";
var mapId = _mapManager.CreateMap();
var (_, outpost) = _mapLoader.LoadBlueprint(mapId, "/Maps/nukieplanet.yml");
var (_, outpost) = _mapLoader.LoadGrid(mapId, "/Maps/nukieplanet.yml");
if (outpost == null)
{
@@ -204,7 +204,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
}
// Listen I just don't want it to overlap.
var (_, shuttleId) = _mapLoader.LoadBlueprint(mapId, shuttlePath, new MapLoadOptions()
var (_, shuttleId) = _mapLoader.LoadGrid(mapId, shuttlePath, new MapLoadOptions()
{
Offset = Vector2.One * 1000f,
});

View File

@@ -155,7 +155,7 @@ public sealed class PiratesRuleSystem : GameRuleSystem
aabb.Union(aabbs[i]);
}
var (_, gridId) = _mapLoader.LoadBlueprint(GameTicker.DefaultMap, map, new MapLoadOptions
var (_, gridId) = _mapLoader.LoadGrid(GameTicker.DefaultMap, map, new MapLoadOptions
{
Offset = aabb.Center + MathF.Max(aabb.Height / 2f, aabb.Width / 2f) * 2.5f
});

View File

@@ -80,8 +80,11 @@ public sealed class MindSystem : EntitySystem
}
else if (mind.GhostOnShutdown)
{
// Changing an entities parents while deleting is VERY sus. This WILL throw exceptions.
// TODO: just find the applicable spawn position dirctly without actually updating the transform's parent.
Transform(uid).AttachToGridOrMap();
var spawnPosition = Transform(uid).Coordinates;
// Use a regular timer here because the entity has probably been deleted.
Timer.Spawn(0, () =>
{
@@ -96,6 +99,13 @@ public sealed class MindSystem : EntitySystem
spawnPosition = _gameTicker.GetObserverSpawnPoint();
}
// TODO refactor observer spawning.
if (!spawnPosition.IsValid(EntityManager))
{
Logger.ErrorS("mind", $"Entity \"{ToPrettyString(uid)}\" for {mind.Mind?.CharacterName} was deleted, and no applicable spawn location is available.");
return;
}
var ghost = Spawn("MobObserver", spawnPosition);
var ghostComponent = Comp<GhostComponent>(ghost);
_ghostSystem.SetCanReturnToBody(ghostComponent, false);

View File

@@ -288,7 +288,7 @@ namespace Content.Server.Salvage
Offset = spl.Position
};
var (_, salvageEntityId) = _mapLoader.LoadBlueprint(spl.MapId, map.MapPath.ToString(), opts);
var (_, salvageEntityId) = _mapLoader.LoadGrid(spl.MapId, map.MapPath.ToString(), opts);
if (salvageEntityId == null)
{
Report(component.Owner, component.SalvageChannel, "salvage-system-announcement-spawn-debris-disintegrated");

View File

@@ -404,7 +404,7 @@ public sealed partial class ShuttleSystem
if (!string.IsNullOrEmpty(centComPath))
{
var (_, centcomm) = _loader.LoadBlueprint(_centComMap.Value, "/Maps/centcomm.yml");
var (_, centcomm) = _loader.LoadGrid(_centComMap.Value, "/Maps/centcomm.yml");
_centCom = centcomm;
if (_centCom != null)
@@ -426,7 +426,7 @@ public sealed partial class ShuttleSystem
if (!_emergencyShuttleEnabled || _centComMap == null || component.EmergencyShuttle != null) return;
// Load escape shuttle
var (_, shuttle) = _loader.LoadBlueprint(_centComMap.Value, component.EmergencyShuttlePath.ToString(), new MapLoadOptions()
var (_, shuttle) = _loader.LoadGrid(_centComMap.Value, component.EmergencyShuttlePath.ToString(), new MapLoadOptions()
{
// Should be far enough... right? I'm too lazy to bounds check CentCom rn.
Offset = new Vector2(500f + _shuttleIndex, 0f)

View File

@@ -835,6 +835,13 @@ namespace Content.Shared.Interaction
return false;
}
if (!Exists(userEntity))
{
Logger.WarningS("system.interaction",
$"Client attempted interaction with a non-existent attached entity. Session={session}, entity={userEntity}");
return false;
}
return true;
}
}

View File

@@ -66,14 +66,14 @@
- Flags: MAPPING
Commands:
- addmap
- loadbp
- loadgrid
- loadmap
- pausemap
- querymappaused
- rmgrid
- rmmap
- mapinit
- savebp
- savegrid
- savemap
- tpgrid
- gridtc