Moved growing from cWorld / cChunk to cBlockHandler descendants.

This commit is contained in:
Mattes D
2019-10-28 10:45:43 +01:00
parent f4bf025db9
commit 61904af626
42 changed files with 1527 additions and 1314 deletions
+43 -5
View File
@@ -61,16 +61,33 @@ public:
cChunkCoords(int a_ChunkX, int a_ChunkZ) : m_ChunkX(a_ChunkX), m_ChunkZ(a_ChunkZ) {}
bool operator == (const cChunkCoords & a_Other) const
{
return ((m_ChunkX == a_Other.m_ChunkX) && (m_ChunkZ == a_Other.m_ChunkZ));
}
bool operator != (const cChunkCoords & a_Other) const
{
return !(operator == (a_Other));
}
/** Simple comparison, to support ordering. */
bool operator < (const cChunkCoords & a_Other) const
{
if (a_Other.m_ChunkX == m_ChunkX)
{
return (m_ChunkZ < a_Other.m_ChunkZ);
}
else
{
return (m_ChunkX < a_Other.m_ChunkX);
}
}
/** Returns a string that describes the chunk coords, suitable for logging. */
AString ToString() const
{
@@ -152,24 +169,45 @@ public:
a_Z = a_Z - a_ChunkZ * Width;
}
/** Converts the specified absolute position into a relative position within its chunk.
Use BlockToChunk to query the chunk coords. */
inline static Vector3i AbsoluteToRelative(Vector3i a_BlockPosition)
{
cChunkCoords ChunckPos = BlockToChunk(a_BlockPosition);
return {a_BlockPosition.x - ChunckPos.m_ChunkX * Width, a_BlockPosition.y, a_BlockPosition.z - ChunckPos.m_ChunkZ * Width};
cChunkCoords chunkPos = BlockToChunk(a_BlockPosition);
return AbsoluteToRelative(a_BlockPosition, chunkPos);
}
/** Converts the absolute coords into coords relative to the specified chunk. */
inline static Vector3i AbsoluteToRelative(Vector3i a_BlockPosition, cChunkCoords a_ChunkPos)
{
return {a_BlockPosition.x - a_ChunkPos.m_ChunkX * Width, a_BlockPosition.y, a_BlockPosition.z - a_ChunkPos.m_ChunkZ * Width};
}
/** Converts relative block coordinates into absolute coordinates with a known chunk location */
inline static Vector3i RelativeToAbsolute(Vector3i a_RelBlockPosition, int a_ChunkX, int a_ChunkZ)
inline static Vector3i RelativeToAbsolute(Vector3i a_RelBlockPosition, cChunkCoords a_ChunkCoords)
{
return {a_RelBlockPosition.x + a_ChunkX * Width, a_RelBlockPosition.y, a_RelBlockPosition.z + a_ChunkZ * Width};
return Vector3i(
a_RelBlockPosition.x + a_ChunkCoords.m_ChunkX * Width,
a_RelBlockPosition.y,
a_RelBlockPosition.z + a_ChunkCoords.m_ChunkZ * Width
);
}
/** Validates a height-coordinate. Returns false if height-coordiante is out of height bounds */
inline static bool IsValidHeight(int a_Height)
{