randomize rotatable plants in world generation

This commit is contained in:
MihailRis 2025-02-21 19:35:37 +03:00
parent 721286c2ba
commit 0649419485
3 changed files with 12 additions and 3 deletions

View File

@ -101,7 +101,8 @@ const BlockRotProfile BlockRotProfile::NONE {
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // West {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // West
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // Up {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // Up
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // Down {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // Down
} },
0
}; };
const BlockRotProfile BlockRotProfile::PIPE { const BlockRotProfile BlockRotProfile::PIPE {
@ -113,7 +114,8 @@ const BlockRotProfile BlockRotProfile::PIPE {
{{0, 0, -1}, {1, 0, 0}, {0, -1, 0}}, // West {{0, 0, -1}, {1, 0, 0}, {0, -1, 0}}, // West
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // Up {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, // Up
{{1, 0, 0}, {0, -1, 0}, {0, 0, -1}}, // Down {{1, 0, 0}, {0, -1, 0}, {0, 0, -1}}, // Down
} },
6
}; };
const BlockRotProfile BlockRotProfile::PANE { const BlockRotProfile BlockRotProfile::PANE {
@ -123,7 +125,8 @@ const BlockRotProfile BlockRotProfile::PANE {
{{0, 0, -1}, {0, 1, 0}, {1, 0, 0}}, // East {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}}, // East
{{-1, 0, 0}, {0, 1, 0}, {0, 0, -1}}, // South {{-1, 0, 0}, {0, 1, 0}, {0, 0, -1}}, // South
{{0, 0, 1}, {0, 1, 0}, {-1, 0, 0}}, // West {{0, 0, 1}, {0, 1, 0}, {-1, 0, 0}}, // West
} },
4
}; };
Block::Block(const std::string& name) Block::Block(const std::string& name)

View File

@ -65,6 +65,7 @@ struct BlockRotProfile {
static const int MAX_COUNT = 8; static const int MAX_COUNT = 8;
std::string name; std::string name;
CoordSystem variants[MAX_COUNT]; CoordSystem variants[MAX_COUNT];
int variantsCount;
/// @brief No rotation /// @brief No rotation
static const BlockRotProfile NONE; static const BlockRotProfile NONE;

View File

@ -389,7 +389,12 @@ void WorldGenerator::generatePlants(
} }
auto& groundVoxel = voxels[vox_index(x, height, z)]; auto& groundVoxel = voxels[vox_index(x, height, z)];
if (indices.get(groundVoxel.id)->rt.solid) { if (indices.get(groundVoxel.id)->rt.solid) {
const auto& def = indices.require(plant);
voxel = {plant, {}}; voxel = {plant, {}};
if (def.rotatable && def.rotations.variantsCount) {
voxel.state.rotation =
plantsRand.rand() % def.rotations.variantsCount;
}
} }
} }
} }