summaryrefslogtreecommitdiff
path: root/src/World/Generation
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2023-08-06 01:54:27 +0200
committerMel <einebeere@gmail.com>2023-08-06 01:54:27 +0200
commite6f5f9e03f673db796f1babb308609ca2576db2f (patch)
treefbc7d9451ec943a107f0ab54b3de7a7bd25e656d /src/World/Generation
parenta627fb7038c94de9be9709ea88dcd1dddc95c5a3 (diff)
downloadmeowcraft-e6f5f9e03f673db796f1babb308609ca2576db2f.tar.zst
meowcraft-e6f5f9e03f673db796f1babb308609ca2576db2f.zip
Improve MC::Position and remove some redundant code
Diffstat (limited to 'src/World/Generation')
-rw-r--r--src/World/Generation/ChunkMeshing.cpp12
-rw-r--r--src/World/Generation/ChunkMeshing.hpp8
2 files changed, 10 insertions, 10 deletions
diff --git a/src/World/Generation/ChunkMeshing.cpp b/src/World/Generation/ChunkMeshing.cpp
index 3855de4..feecc64 100644
--- a/src/World/Generation/ChunkMeshing.cpp
+++ b/src/World/Generation/ChunkMeshing.cpp
@@ -11,15 +11,15 @@ ChunkMesh mesh_chunk(Chunk& chunk, const SurroundingContext& context) {
};
}
-SurroundingContext::Block& SurroundingContext::at(Position::BlockOffset p) {
+SurroundingContext::Block& SurroundingContext::at(Position::BlockLocalOffset p) {
return m_blocks[pos(p)];
}
-const SurroundingContext::Block& SurroundingContext::at(Position::BlockOffset p) const {
+const SurroundingContext::Block& SurroundingContext::at(Position::BlockLocalOffset p) const {
return m_blocks[pos(p)];
}
-USize SurroundingContext::pos(Position::BlockOffset p) {
+USize SurroundingContext::pos(Position::BlockLocalOffset p) {
// First we calculate the index as if there were no gaps.
USize pos = 0;
pos += p.x() + 1;
@@ -39,7 +39,7 @@ SurroundingContext create_meshing_context(const Chunk& chunk, ChunkNeighbors& ne
for (I16 x = -1; x <= (I16)Chunk::Width; x++) {
for (I16 z = -1; z <= (I16)Chunk::Width; z++) {
for (I16 y = 0; y < (I16)Chunk::Height; y++) {
- Position::BlockOffset pos{x, y, z};
+ Position::BlockLocalOffset pos{x, y, z};
if (pos.fits_within_chunk()) continue;
auto [does_exist, block] = get_block_wrapping(chunk, neighbors, {pos.x(), pos.y(), pos.z()});
context.at(pos) = {does_exist, block};
@@ -205,7 +205,7 @@ Face<AO> DefaultMeshDecisions::face_ao_values(Chunk& chunk, const SurroundingCon
auto b = offsets[++offset_index]; // corner
auto c = offsets[++offset_index % 8];
- auto p = [=](auto o) -> Position::BlockOffset { return {(I16)((I16)x + o.x()), (I16)((I16)y + o.y()), (I16)((I16)z + o.z())}; };
+ auto p = [=](auto o) -> Position::BlockLocalOffset { return {(I16)x + o.x(), (I16)y + o.y(), (I16)z + o.z()}; };
auto block_a = get_block_from_chunk_or_context(chunk, context, p(a));
auto block_b = get_block_from_chunk_or_context(chunk, context, p(b));
auto block_c = get_block_from_chunk_or_context(chunk, context, p(c));
@@ -236,7 +236,7 @@ Vector<3, I32> DefaultMeshDecisions::get_face_normal(BlockSide side) {
}
SurroundingContext::Block DefaultMeshDecisions::get_block_from_chunk_or_context(
- const Chunk& chunk, const SurroundingContext& context, Position::BlockOffset pos
+ const Chunk& chunk, const SurroundingContext& context, Position::BlockLocalOffset pos
) {
if (pos.fits_within_chunk()) return {true, chunk.at(pos)};
return context.at(pos);
diff --git a/src/World/Generation/ChunkMeshing.hpp b/src/World/Generation/ChunkMeshing.hpp
index 5401580..c745a3b 100644
--- a/src/World/Generation/ChunkMeshing.hpp
+++ b/src/World/Generation/ChunkMeshing.hpp
@@ -19,10 +19,10 @@ class SurroundingContext {
public:
struct Block { Bool does_exist; Chunk::BlockData block; };
- Block& at(Position::BlockOffset p);
- const Block& at(Position::BlockOffset p) const;
+ Block& at(Position::BlockLocalOffset p);
+ const Block& at(Position::BlockLocalOffset p) const;
private:
- static USize pos(Position::BlockOffset p);
+ static USize pos(Position::BlockLocalOffset p);
static constexpr USize surrounding_block_count = Chunk::Width * 4 + 4;
Block m_blocks[surrounding_block_count * Chunk::Height] = {};
@@ -83,7 +83,7 @@ public:
static Face<AO> face_ao_values(Chunk& chunk, const SurroundingContext& context, U32 x, U32 y, U32 z, BlockSide side);
static Vector<3, I32> get_face_normal(BlockSide side);
- static SurroundingContext::Block get_block_from_chunk_or_context(const Chunk& chunk, const SurroundingContext& context, Position::BlockOffset pos);
+ static SurroundingContext::Block get_block_from_chunk_or_context(const Chunk& chunk, const SurroundingContext& context, Position::BlockLocalOffset pos);
static SurroundingContext::Block get_opposing_neighbor(const Chunk& chunk, const SurroundingContext& context, U32 x, U32 y, U32 z, BlockSide side);
static Bool is_face_visible(Chunk& chunk, const SurroundingContext& context, U32 x, U32 y, U32 z, BlockSide side);