mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-15 14:52:35 +02:00
Mapgrid fixes (#3513)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user