Merge branch 'main' into entities

This commit is contained in:
MihailRis 2024-07-10 09:25:56 +03:00
commit 7487c55e0c
4 changed files with 21 additions and 5 deletions

View File

@ -13,5 +13,6 @@
"light-passing": true,
"shadeless": true,
"obstacle": false,
"grounded": true,
"rotation": "pipe"
}

View File

@ -84,9 +84,12 @@ void BlocksController::updateBlock(int x, int y, int z) {
if (vox == nullptr)
return;
auto def = level->content->getIndices()->blocks.get(vox->id);
if (def->grounded && !chunks->isSolidBlock(x, y-1, z)) {
breakBlock(nullptr, def, x, y, z);
return;
if (def->grounded) {
const auto& vec = get_ground_direction(def, vox->state.rotation);
if (!chunks->isSolidBlock(x+vec.x, y+vec.y, z+vec.z)) {
breakBlock(nullptr, def, x, y, z);
return;
}
}
if (def->rt.funcsset.update) {
scripting::update_block(def, x, y, z);

View File

@ -418,8 +418,11 @@ void PlayerController::processRightClick(Block* def, Block* target) {
if (!chunks->checkReplaceability(def, state, coord)) {
return;
}
if (def->grounded && !chunks->isSolidBlock(coord.x, coord.y-1, coord.z)) {
return;
if (def->grounded) {
const auto& vec = get_ground_direction(def, state.rotation);
if (!chunks->isSolidBlock(coord.x+vec.x, coord.y+vec.y, coord.z+vec.z)) {
return;
}
}
if (chosenBlock != vox->id && chosenBlock) {
onBlockInteraction(coord, def, BlockInteraction::placing);

View File

@ -206,4 +206,13 @@ public:
Block(const Block&) = delete;
};
inline glm::ivec3 get_ground_direction(const Block* def, int rotation) {
const auto& profileName = def->rotations.name;
if (profileName == BlockRotProfile::PIPE_NAME) {
return -def->rotations.variants[rotation].axisY;
} else {
return glm::ivec3(0, -1, 0);
}
}
#endif // VOXELS_BLOCK_HPP_