diff --git a/World.cpp b/World.cpp index 1300b7f..f06b00a 100644 --- a/World.cpp +++ b/World.cpp @@ -179,10 +179,12 @@ RaycastResult World::castRay(float originX, float originY, float orientation) co int i = 0; float hCheckX = originX + hOffsetX; float hCheckY = hOffsetY; + BlockType hHitBlock = BlockType::AIR; /* Bounds + sanity check. */ while (hCheckX >= 0 && hCheckX <= static_cast(w) && hCheckY >= 0 && hCheckY <= static_cast(h) && i < h) { - if (getBlock(floorf(hCheckX), floorf(hCheckY) + hRound) == BlockType::WALL) { + hHitBlock = getBlock(floorf(hCheckX), floorf(hCheckY) + hRound); + if (hHitBlock == BlockType::WALL) { break; } @@ -194,11 +196,12 @@ RaycastResult World::castRay(float originX, float originY, float orientation) co i = 0; float vCheckX = vOffsetX; float vCheckY = originY + vOffsetY; - + BlockType vHitBlock = BlockType::AIR; /* Bounds + sanity check. */ while (vCheckX >= 0 && vCheckX < static_cast(w) && vCheckY >= 0 && vCheckY < static_cast(h) && i < w) { - if (getBlock(floorf(vCheckX) + vRound, floorf(vCheckY)) == BlockType::WALL) { + vHitBlock = getBlock(floorf(vCheckX) + vRound, floorf(vCheckY)); + if (vHitBlock == BlockType::WALL) { break; } @@ -222,13 +225,13 @@ RaycastResult World::castRay(float originX, float originY, float orientation) co result.distance = vDist; result.hitX = vCheckX; result.hitY = vCheckY; + result.hitBlock = vHitBlock; } else { result.distance = hDist; result.hitX = hCheckX; result.hitY = hCheckY; + result.hitBlock = hHitBlock; } - result.hitBlock = getBlock(floorf(result.hitX) + vRound, - floorf(result.hitY)); return result; }