Station maps (#13027)
This commit is contained in:
29
Content.Shared/Pinpointer/NavMapComponent.cs
Normal file
29
Content.Shared/Pinpointer/NavMapComponent.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Shared.Pinpointer;
|
||||
|
||||
/// <summary>
|
||||
/// Used to store grid poly data to be used for UIs.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed class NavMapComponent : Component
|
||||
{
|
||||
[ViewVariables]
|
||||
public readonly Dictionary<Vector2i, NavMapChunk> Chunks = new();
|
||||
}
|
||||
|
||||
public sealed class NavMapChunk
|
||||
{
|
||||
public readonly Vector2i Origin;
|
||||
|
||||
/// <summary>
|
||||
/// Bitmask for tiles, 1 for occupied and 0 for empty.
|
||||
/// </summary>
|
||||
public int TileData;
|
||||
|
||||
public NavMapChunk(Vector2i origin)
|
||||
{
|
||||
Origin = origin;
|
||||
}
|
||||
}
|
||||
45
Content.Shared/Pinpointer/SharedNavMapSystem.cs
Normal file
45
Content.Shared/Pinpointer/SharedNavMapSystem.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Pinpointer;
|
||||
|
||||
public abstract class SharedNavMapSystem : EntitySystem
|
||||
{
|
||||
public const byte ChunkSize = 4;
|
||||
|
||||
/// <summary>
|
||||
/// Converts the chunk's tile into a bitflag for the slot.
|
||||
/// </summary>
|
||||
public static int GetFlag(Vector2i relativeTile)
|
||||
{
|
||||
return 1 << (relativeTile.X * ChunkSize + relativeTile.Y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the chunk's tile into a bitflag for the slot.
|
||||
/// </summary>
|
||||
public static Vector2i GetTile(int flag)
|
||||
{
|
||||
var value = Math.Log2(flag);
|
||||
var x = (int) value / ChunkSize;
|
||||
var y = (int) value % ChunkSize;
|
||||
var result = new Vector2i(x, y);
|
||||
|
||||
DebugTools.Assert(GetFlag(result) == flag);
|
||||
|
||||
return new Vector2i(x, y);
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
protected sealed class NavMapComponentState : ComponentState
|
||||
{
|
||||
public Dictionary<Vector2i, int> TileData = new();
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
protected sealed class NavMapDiffComponentState : ComponentState
|
||||
{
|
||||
public Dictionary<Vector2i, int> TileData = new();
|
||||
public List<Vector2i> RemovedChunks = new();
|
||||
}
|
||||
}
|
||||
9
Content.Shared/Pinpointer/SharedStationMapSystem.cs
Normal file
9
Content.Shared/Pinpointer/SharedStationMapSystem.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Pinpointer;
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum StationMapUiKey : byte
|
||||
{
|
||||
Key,
|
||||
}
|
||||
Reference in New Issue
Block a user