Mapgrid fixes (#3513)

This commit is contained in:
metalgearsloth
2022-11-22 14:04:22 +11:00
committed by GitHub
parent 15d30eacd0
commit 01673fb155
8 changed files with 28 additions and 9 deletions
@@ -4,6 +4,7 @@ using Robust.Shared.Enums;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Maths;
namespace Robust.Client.Physics
+2 -2
View File
@@ -560,14 +560,14 @@ internal sealed partial class PVSSystem : EntitySystem
List<(uint, IChunkIndexLocation)> _chunkList) tuple) =>
{
{
var localPos = tuple.transformQuery.GetComponent(mapGrid.GridEntityId).InvWorldMatrix.Transform(tuple.viewPos);
var localPos = tuple.transformQuery.GetComponent(mapGrid.Owner).InvWorldMatrix.Transform(tuple.viewPos);
var gridChunkEnumerator =
new ChunkIndicesEnumerator(localPos, tuple.range, ChunkSize);
while (gridChunkEnumerator.MoveNext(out var gridChunkIndices))
{
var chunkLocation = new GridChunkLocation(mapGrid.GridEntityId, gridChunkIndices.Value);
var chunkLocation = new GridChunkLocation(mapGrid.Owner, gridChunkIndices.Value);
var entry = (tuple.visMask, chunkLocation);
if (tuple.gridDict.TryGetValue(chunkLocation, out var indexOf))
+2
View File
@@ -4,6 +4,7 @@ using System.IO;
using Robust.Server.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Maths;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Manager.Attributes;
@@ -12,6 +13,7 @@ using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Validation;
using Robust.Shared.Serialization.Markdown.Value;
using Robust.Shared.Serialization.TypeSerializers.Interfaces;
using Robust.Shared.Timing;
namespace Robust.Server.Maps
{
@@ -46,7 +46,11 @@ public abstract partial class SharedMapSystem
if (MapManager.HasMapEntity(mapId))
{
_transform.SetParent(xform, MapManager.GetMapEntityIdOrThrow(mapId), xformQuery);
var mapUid = MapManager.GetMapEntityIdOrThrow(mapId);
// Mapgrid moment
if (mapUid != uid)
_transform.SetParent(xform, MapManager.GetMapEntityIdOrThrow(mapId), xformQuery);
}
// Just in case.
@@ -135,6 +135,9 @@ namespace Robust.Shared.Map.Components
/// </summary>
internal void RegenerateCollision(IReadOnlySet<MapChunk> chunks)
{
if (_entMan.HasComponent<MapComponent>(Owner))
return;
var chunkRectangles = new Dictionary<MapChunk, List<Box2i>>(chunks.Count);
var removedChunks = new List<MapChunk>();
var fixtureSystem = _entMan.EntitySysManager.GetEntitySystem<FixtureSystem>();
+13 -5
View File
@@ -66,9 +66,9 @@ internal sealed class NetworkedMapManager : MapManager, INetworkedMapManager
var (worldPos, worldRot) = gridXform.GetWorldPositionRotation();
var gridDatum = new GameStateMapData.GridDatum(
chunkData.ToArray(),
new MapCoordinates(worldPos, gridXform.MapID),
worldRot);
chunkData.ToArray(),
new MapCoordinates(worldPos, gridXform.MapID),
worldRot);
gridDatums.Add(iGrid.GridEntityId, gridDatum);
}
@@ -177,7 +177,15 @@ internal sealed class NetworkedMapManager : MapManager, INetworkedMapManager
if (xformComp.MapID != gridDatum.Coordinates.MapId)
throw new NotImplementedException("Moving grids between maps is not yet implemented");
xformComp.WorldPosition = gridDatum.Coordinates.Position;
xformComp.WorldRotation = gridDatum.Angle;
// TODO: SHITCODE ALERT -> When we get proper ECS we can delete this.
if (xformComp.WorldPosition != gridDatum.Coordinates.Position)
{
xformComp.WorldPosition = gridDatum.Coordinates.Position;
}
if (xformComp.WorldRotation != gridDatum.Angle)
{
xformComp.WorldRotation = gridDatum.Angle;
}
}
}
@@ -221,7 +221,7 @@ namespace Robust.Shared.Physics.Systems
EntityQuery<BroadphaseComponent> broadphaseQuery) tuple) =>
{
ref var buffer = ref tuple.pairBuffer;
tuple.system.FindPairs(tuple.proxy, tuple.worldAABB, grid.GridEntityId, buffer, tuple.xformQuery, tuple.broadphaseQuery);
tuple.system.FindPairs(tuple.proxy, tuple.worldAABB, grid.Owner, buffer, tuple.xformQuery, tuple.broadphaseQuery);
return true;
});
@@ -5,6 +5,7 @@ using NUnit.Framework;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Maths;
namespace Robust.UnitTesting.Shared.Map