tiles.Clear();
// Now do entities
- var loadedEntities = new List<EntityUid>();
+ var loadedEntities = new Dictionary<EntityUid, Vector2i>();
component.LoadedEntities.Add(chunk, loadedEntities);
for (var x = 0; x < ChunkSize; x++)
_transform.AnchorEntity(ent, xform, gridUid, grid, indices);
}
- loadedEntities.Add(ent);
+ loadedEntities.Add(ent, indices);
}
}
component.LoadedDecals.Remove(chunk);
// Delete entities
- // This is a TODO
// Ideally any entities that aren't modified just get deleted and re-generated later
// This is because if we want to save the map (e.g. persistent server) it makes the file much smaller
// and also if the map is enormous will make stuff like physics broadphase much faster
- // For now we'll just leave them because no entity diffs.
+ var xformQuery = GetEntityQuery<TransformComponent>();
+
+ foreach (var (ent, tile) in component.LoadedEntities[chunk])
+ {
+ if (Deleted(ent) || !xformQuery.TryGetComponent(ent, out var xform))
+ {
+ modified.Add(tile);
+ continue;
+ }
+
+ // It's moved
+ var entTile = grid.LocalToTile(xform.Coordinates);
+
+ if (!xform.Anchored || entTile != tile)
+ {
+ modified.Add(tile);
+ continue;
+ }
+
+ if (!EntityManager.IsDefault(ent))
+ {
+ modified.Add(tile);
+ continue;
+ }
+
+ Del(ent);
+ }
component.LoadedEntities.Remove(chunk);
public Dictionary<Vector2i, Dictionary<uint, Vector2i>> LoadedDecals = new();
[DataField("entities")]
- public Dictionary<Vector2i, List<EntityUid>> LoadedEntities = new();
+ public Dictionary<Vector2i, Dictionary<EntityUid, Vector2i>> LoadedEntities = new();
/// <summary>
/// Currently active chunks