diff --git a/Blarg.GameFramework/TileMap/Prefabs/TilePrefab.cs b/Blarg.GameFramework/TileMap/Prefabs/TilePrefab.cs index 3c08ad6..e8ae954 100644 --- a/Blarg.GameFramework/TileMap/Prefabs/TilePrefab.cs +++ b/Blarg.GameFramework/TileMap/Prefabs/TilePrefab.cs @@ -142,6 +142,12 @@ namespace Blarg.GameFramework.TileMap.Prefabs return _data[index]; } + public override Tile Get(Point3 p) + { + int index = GetIndexOf(p.X, p.Y, p.Z); + return _data[index]; + } + public override Tile GetSafe(int x, int y, int z) { if (!IsWithinLocalBounds(x, y, z)) @@ -150,6 +156,14 @@ namespace Blarg.GameFramework.TileMap.Prefabs return Get(x, y, z); } + public override Tile GetSafe(Point3 p) + { + if (!IsWithinLocalBounds(p.X, p.Y, p.Z)) + return null; + else + return Get(p.X, p.Y, p.Z); + } + private int GetIndexOf(int x, int y, int z) { return (y * _width * _depth) + (z * _width) + x; diff --git a/Blarg.GameFramework/TileMap/TileChunk.cs b/Blarg.GameFramework/TileMap/TileChunk.cs index a458198..0bdc9e3 100644 --- a/Blarg.GameFramework/TileMap/TileChunk.cs +++ b/Blarg.GameFramework/TileMap/TileChunk.cs @@ -181,6 +181,12 @@ namespace Blarg.GameFramework.TileMap return _data[index]; } + public override Tile Get(Point3 p) + { + int index = GetIndexOf(p.X, p.Y, p.Z); + return _data[index]; + } + public override Tile GetSafe(int x, int y, int z) { if (!IsWithinLocalBounds(x, y, z)) @@ -189,6 +195,14 @@ namespace Blarg.GameFramework.TileMap return Get(x, y, z); } + public override Tile GetSafe(Point3 p) + { + if (!IsWithinLocalBounds(p.X, p.Y, p.Z)) + return null; + else + return Get(p.X, p.Y, p.Z); + } + private int GetIndexOf(int x, int y, int z) { return (y * _width * _depth) + (z * _width) + x; diff --git a/Blarg.GameFramework/TileMap/TileContainer.cs b/Blarg.GameFramework/TileMap/TileContainer.cs index b095ecb..76b1f2a 100644 --- a/Blarg.GameFramework/TileMap/TileContainer.cs +++ b/Blarg.GameFramework/TileMap/TileContainer.cs @@ -23,7 +23,9 @@ namespace Blarg.GameFramework.TileMap #endregion public abstract Tile Get(int x, int y, int z); + public abstract Tile Get(Point3 p); public abstract Tile GetSafe(int x, int y, int z); + public abstract Tile GetSafe(Point3 p); #region Bounds Checks diff --git a/Blarg.GameFramework/TileMap/TileMap.cs b/Blarg.GameFramework/TileMap/TileMap.cs index 2ee1fd9..e0cbbd0 100644 --- a/Blarg.GameFramework/TileMap/TileMap.cs +++ b/Blarg.GameFramework/TileMap/TileMap.cs @@ -222,6 +222,16 @@ namespace Blarg.GameFramework.TileMap return chunk.Get(chunkX, chunkY, chunkZ); } + public override Tile Get(Point3 p) + { + var chunk = GetChunkContaining(p.X, p.Y, p.Z); + int chunkX = p.X - chunk.MinX; + int chunkY = p.Y - chunk.MinY; + int chunkZ = p.Z - chunk.MinZ; + + return chunk.Get(chunkX, chunkY, chunkZ); + } + public override Tile GetSafe(int x, int y, int z) { if (!IsWithinBounds(x, y, z)) @@ -230,6 +240,14 @@ namespace Blarg.GameFramework.TileMap return Get(x, y, z); } + public override Tile GetSafe(Point3 p) + { + if (!IsWithinBounds(p.X, p.Y, p.Z)) + return null; + else + return Get(p.X, p.Y, p.Z); + } + #endregion #region Chunk Retrieval diff --git a/Blarg.GameFramework/TileMap/TileRawDataContainer.cs b/Blarg.GameFramework/TileMap/TileRawDataContainer.cs index 26a15d1..30df8cd 100644 --- a/Blarg.GameFramework/TileMap/TileRawDataContainer.cs +++ b/Blarg.GameFramework/TileMap/TileRawDataContainer.cs @@ -11,7 +11,9 @@ namespace Blarg.GameFramework.TileMap int Depth { get; } Tile Get(int x, int y, int z); + Tile Get(Point3 p); Tile GetSafe(int x, int y, int z); + Tile GetSafe(Point3 p); } }