diff --git a/Robust.Client/Physics/GridFixtureSystem.cs b/Robust.Client/Physics/GridFixtureSystem.cs index c968f31d0..6ad959d2d 100644 --- a/Robust.Client/Physics/GridFixtureSystem.cs +++ b/Robust.Client/Physics/GridFixtureSystem.cs @@ -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 diff --git a/Robust.Server/GameStates/PVSSystem.cs b/Robust.Server/GameStates/PVSSystem.cs index 5b6be418c..0ec3e19db 100644 --- a/Robust.Server/GameStates/PVSSystem.cs +++ b/Robust.Server/GameStates/PVSSystem.cs @@ -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)) diff --git a/Robust.Server/Maps/GridSerializer.cs b/Robust.Server/Maps/GridSerializer.cs index 7726722e6..f658de819 100644 --- a/Robust.Server/Maps/GridSerializer.cs +++ b/Robust.Server/Maps/GridSerializer.cs @@ -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 { diff --git a/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs b/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs index 1866f0197..d51f509db 100644 --- a/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs +++ b/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs @@ -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. diff --git a/Robust.Shared/Map/Components/MapGridComponent.cs b/Robust.Shared/Map/Components/MapGridComponent.cs index 3bb253f39..ad0acf585 100644 --- a/Robust.Shared/Map/Components/MapGridComponent.cs +++ b/Robust.Shared/Map/Components/MapGridComponent.cs @@ -135,6 +135,9 @@ namespace Robust.Shared.Map.Components /// internal void RegenerateCollision(IReadOnlySet chunks) { + if (_entMan.HasComponent(Owner)) + return; + var chunkRectangles = new Dictionary>(chunks.Count); var removedChunks = new List(); var fixtureSystem = _entMan.EntitySysManager.GetEntitySystem(); diff --git a/Robust.Shared/Map/NetworkedMapManager.cs b/Robust.Shared/Map/NetworkedMapManager.cs index 5e3b28a8c..3c457bfce 100644 --- a/Robust.Shared/Map/NetworkedMapManager.cs +++ b/Robust.Shared/Map/NetworkedMapManager.cs @@ -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; + } } } diff --git a/Robust.Shared/Physics/Systems/SharedBroadphaseSystem.cs b/Robust.Shared/Physics/Systems/SharedBroadphaseSystem.cs index 5c34076f8..e4348d9a9 100644 --- a/Robust.Shared/Physics/Systems/SharedBroadphaseSystem.cs +++ b/Robust.Shared/Physics/Systems/SharedBroadphaseSystem.cs @@ -221,7 +221,7 @@ namespace Robust.Shared.Physics.Systems EntityQuery 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; }); diff --git a/Robust.UnitTesting/Shared/Map/GridRotation_Tests.cs b/Robust.UnitTesting/Shared/Map/GridRotation_Tests.cs index 7b7bebe0d..ae2d2495d 100644 --- a/Robust.UnitTesting/Shared/Map/GridRotation_Tests.cs +++ b/Robust.UnitTesting/Shared/Map/GridRotation_Tests.cs @@ -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