From 12c7d4dfb452d8806d88c59d3b0bac7ab2265b2a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 30 Apr 2025 21:56:04 +0300 Subject: [PATCH] feat: voxel fragment rotation applying to 'stairs' profile --- src/logic/PlayerController.cpp | 13 ++----------- src/world/generator/VoxelFragment.cpp | 5 ++++- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 080c04cf..1d5875ef 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -336,17 +336,8 @@ static int determine_rotation( if (norm.y < 0.0f) return BLOCK_DIR_DOWN; if (norm.z > 0.0f) return BLOCK_DIR_NORTH; if (norm.z < 0.0f) return BLOCK_DIR_SOUTH; - } else if (name == "pane") { - if (abs(camDir.x) > abs(camDir.z)) { - if (camDir.x > 0.0f) return BLOCK_DIR_EAST; - if (camDir.x < 0.0f) return BLOCK_DIR_WEST; - } - if (abs(camDir.x) < abs(camDir.z)) { - if (camDir.z > 0.0f) return BLOCK_DIR_SOUTH; - if (camDir.z < 0.0f) return BLOCK_DIR_NORTH; - } - } else if (name == "stairs") { - int verticalBit = ((norm.y - camDir.y * 0.5f) < 0.0) ? 4 : 0; + } else if (name == "pane" || name == "stairs") { + int verticalBit = (name == "stairs" && (norm.y - camDir.y * 0.5f) < 0.0) ? 4 : 0; if (abs(camDir.x) > abs(camDir.z)) { if (camDir.x > 0.0f) return BLOCK_DIR_EAST | verticalBit; if (camDir.x < 0.0f) return BLOCK_DIR_WEST | verticalBit; diff --git a/src/world/generator/VoxelFragment.cpp b/src/world/generator/VoxelFragment.cpp index 64f9153e..344f0450 100644 --- a/src/world/generator/VoxelFragment.cpp +++ b/src/world/generator/VoxelFragment.cpp @@ -209,10 +209,13 @@ std::unique_ptr VoxelFragment::rotated(const Content& content) co | ((voxel.state.segment & 0b100) >> 2); auto& def = content.blocks.require(blockNames[voxel.id]); if (def.rotations.name == BlockRotProfile::PANE_NAME || - def.rotations.name == BlockRotProfile::PIPE_NAME){ + def.rotations.name == BlockRotProfile::PIPE_NAME) { if (voxel.state.rotation < 4) { voxel.state.rotation = (voxel.state.rotation + 3) & 0b11; } + } else if (def.rotations.name == BlockRotProfile::STAIRS_NAME) { + voxel.state.rotation = ((voxel.state.rotation + 3) & 0b11) | + (voxel.state.rotation & 0b100); } } }