diff --git a/Robust.Client/Placement/PlacementManager.cs b/Robust.Client/Placement/PlacementManager.cs
index b817a0784..e4cf904eb 100644
--- a/Robust.Client/Placement/PlacementManager.cs
+++ b/Robust.Client/Placement/PlacementManager.cs
@@ -55,6 +55,9 @@ namespace Robust.Client.Placement
///
private bool _placenextframe;
+ // Massive hack to avoid creating a billion grids for now.
+ private bool _gridFrameBuffer;
+
///
/// Allows various types of placement as singular, line, or grid placement where placement mode allows this type of placement
///
@@ -259,6 +262,7 @@ namespace Robust.Client.Placement
if (!CurrentPermission!.IsTile)
HandlePlacement();
+ _gridFrameBuffer = false;
_placenextframe = false;
return true;
}))
@@ -394,6 +398,7 @@ namespace Robust.Client.Placement
DeactivateSpecialPlacement();
break;
case PlacementTypes.Grid:
+ _gridFrameBuffer = true;
foreach (var coordinate in CurrentMode!.GridCoordinates())
{
RequestPlacement(coordinate);
@@ -570,8 +575,10 @@ namespace Robust.Client.Placement
_pendingTileChanges.RemoveAll(c => c.Item2 < _time.RealTime);
// continues tile placement but placement of entities only occurs on mouseUp
- if (_placenextframe && CurrentPermission!.IsTile)
+ if (_placenextframe && CurrentPermission!.IsTile && !_gridFrameBuffer)
+ {
HandlePlacement();
+ }
}
private void ActivateLineMode()
diff --git a/Robust.Server/Physics/GridFixtureSystem.cs b/Robust.Server/Physics/GridFixtureSystem.cs
index e90a40c93..e6143b543 100644
--- a/Robust.Server/Physics/GridFixtureSystem.cs
+++ b/Robust.Server/Physics/GridFixtureSystem.cs
@@ -45,12 +45,16 @@ namespace Robust.Server.Physics
public override void Initialize()
{
base.Initialize();
- _logger = Shared.Log.Logger.GetSawmill("gsplit");
+ _logger = Logger.GetSawmill("gsplit");
SubscribeLocalEvent(OnGridInit);
SubscribeLocalEvent(OnGridRemoval);
SubscribeNetworkEvent(OnDebugRequest);
SubscribeNetworkEvent(OnDebugStopRequest);
var configManager = IoCManager.Resolve();
+#if !FULL_RELEASE
+ // It makes mapping painful
+ configManager.OverrideDefault(CVars.GridSplitting, false);
+#endif
configManager.OnValueChanged(CVars.GridSplitting, SetSplitAllowed, true);
}
diff --git a/Robust.Server/Placement/PlacementManager.cs b/Robust.Server/Placement/PlacementManager.cs
index e87a92489..48bd5bfee 100644
--- a/Robust.Server/Placement/PlacementManager.cs
+++ b/Robust.Server/Placement/PlacementManager.cs
@@ -131,27 +131,21 @@ namespace Robust.Server.Placement
private void PlaceNewTile(ushort tileType, EntityCoordinates coordinates)
{
- var mapCoordinates = coordinates.ToMap(_entityManager);
+ if (!coordinates.IsValid(_entityManager)) return;
- if (mapCoordinates.MapId == MapId.Nullspace) return;
-
- var gridCoordinate = coordinates.AlignWithClosestGridTile(entityManager: _entityManager, mapManager: _mapManager);
-
- if (!gridCoordinate.IsValid(_entityManager)) return;
-
- var closest = _mapManager.IsGrid(gridCoordinate.EntityId);
+ var closest = _mapManager.IsGrid(coordinates.EntityId);
if (closest) // stick to existing grid
{
- if (!_mapManager.TryGetGrid(gridCoordinate.EntityId, out var grid)) return;
+ if (!_mapManager.TryGetGrid(coordinates.EntityId, out var grid)) return;
- grid.SetTile(gridCoordinate, new Tile(tileType));
+ grid.SetTile(coordinates, new Tile(tileType));
}
else if (tileType != 0) // create a new grid
{
- var newGrid = _mapManager.CreateGrid(mapCoordinates.MapId);
- newGrid.WorldPosition = mapCoordinates.Position + (newGrid.TileSize / 2f); // assume bottom left tile origin
- var tilePos = newGrid.WorldToTile(mapCoordinates.Position);
+ var newGrid = _mapManager.CreateGrid(coordinates.GetMapId(_entityManager));
+ newGrid.WorldPosition = coordinates.Position + (newGrid.TileSize / 2f); // assume bottom left tile origin
+ var tilePos = newGrid.WorldToTile(coordinates.Position);
newGrid.SetTile(tilePos, new Tile(tileType));
}
}
diff --git a/Robust.Shared/Map/CoordinatesExtensions.cs b/Robust.Shared/Map/CoordinatesExtensions.cs
index dc566b679..eb0e345dd 100644
--- a/Robust.Shared/Map/CoordinatesExtensions.cs
+++ b/Robust.Shared/Map/CoordinatesExtensions.cs
@@ -35,10 +35,15 @@ namespace Robust.Shared.Map
var gridId = coords.GetGridUid(entityManager);
- if (gridId != null || !mapManager.GridExists(gridId))
+ if (!mapManager.GridExists(gridId))
{
var mapCoords = coords.ToMap(entityManager);
+ if (mapManager.TryFindGridAt(mapCoords, out var mapGrid))
+ {
+ return new EntityCoordinates(mapGrid.GridEntityId, mapGrid.WorldToLocal(mapCoords.Position));
+ }
+
// create a box around the cursor
var gridSearchBox = Box2.UnitCentered.Scale(searchBoxSize).Translated(mapCoords.Position);
diff --git a/Robust.UnitTesting/Shared/Map/GridSplit_Tests.cs b/Robust.UnitTesting/Shared/Map/GridSplit_Tests.cs
index 4c2003465..cda2f64a9 100644
--- a/Robust.UnitTesting/Shared/Map/GridSplit_Tests.cs
+++ b/Robust.UnitTesting/Shared/Map/GridSplit_Tests.cs
@@ -1,5 +1,7 @@
using System.Linq;
using NUnit.Framework;
+using Robust.Shared;
+using Robust.Shared.Configuration;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Maths;
@@ -10,10 +12,20 @@ namespace Robust.UnitTesting.Shared.Map;
[TestFixture]
public sealed class GridSplit_Tests
{
+ private ISimulation GetSim()
+ {
+ var sim = RobustServerSimulation.NewSimulation().InitializeInstance();
+
+ var config = sim.Resolve();
+ config.SetCVar(CVars.GridSplitting, true);
+
+ return sim;
+ }
+
[Test]
public void SimpleSplit()
{
- var sim = RobustServerSimulation.NewSimulation().InitializeInstance();
+ var sim =GetSim();
var mapManager = sim.Resolve();
var mapId = mapManager.CreateMap();
var grid = mapManager.CreateGrid(mapId);
@@ -34,7 +46,7 @@ public sealed class GridSplit_Tests
[Test]
public void DonutSplit()
{
- var sim = RobustServerSimulation.NewSimulation().InitializeInstance();
+ var sim =GetSim();
var mapManager = sim.Resolve();
var mapId = mapManager.CreateMap();
var grid = mapManager.CreateGrid(mapId);
@@ -64,7 +76,7 @@ public sealed class GridSplit_Tests
[Test]
public void TriSplit()
{
- var sim = RobustServerSimulation.NewSimulation().InitializeInstance();
+ var sim =GetSim();
var mapManager = sim.Resolve();
var mapId = mapManager.CreateMap();
var grid = mapManager.CreateGrid(mapId);
@@ -90,7 +102,7 @@ public sealed class GridSplit_Tests
[Test]
public void ReparentSplit()
{
- var sim = RobustServerSimulation.NewSimulation().InitializeInstance();
+ var sim =GetSim();
var entManager = sim.Resolve();
var mapManager = sim.Resolve();
var mapId = mapManager.CreateMap();