Merge branch 'main' into entities
This commit is contained in:
commit
7487c55e0c
@ -13,5 +13,6 @@
|
||||
"light-passing": true,
|
||||
"shadeless": true,
|
||||
"obstacle": false,
|
||||
"grounded": true,
|
||||
"rotation": "pipe"
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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_
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user