diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/collision/BoundingIntervalHierarchy.cpp | 4 | ||||
-rwxr-xr-x | src/server/collision/BoundingIntervalHierarchy.h | 2 | ||||
-rw-r--r-- | src/server/collision/Models/WorldModel.cpp | 6 |
3 files changed, 7 insertions, 5 deletions
diff --git a/src/server/collision/BoundingIntervalHierarchy.cpp b/src/server/collision/BoundingIntervalHierarchy.cpp index 470f89e6a69..e411d1c2889 100755 --- a/src/server/collision/BoundingIntervalHierarchy.cpp +++ b/src/server/collision/BoundingIntervalHierarchy.cpp @@ -127,7 +127,7 @@ void BIH::subdivide(int left, int right, std::vector<uint32> &tempTree, buildDat if (right == rightOrig) { // all left - if (prevAxis == axis && prevSplit == split) { + if (prevAxis == axis && G3D::fuzzyEq(prevSplit, split)) { // we are stuck here - create a leaf stats.updateLeaf(depth, right - left + 1); createNode(tempTree, nodeIndex, left, right); @@ -146,7 +146,7 @@ void BIH::subdivide(int left, int right, std::vector<uint32> &tempTree, buildDat else if (left > right) { // all right - if (prevAxis == axis && prevSplit == split) { + if (prevAxis == axis && G3D::fuzzyEq(prevSplit, split)) { // we are stuck here - create a leaf stats.updateLeaf(depth, right - left + 1); createNode(tempTree, nodeIndex, left, right); diff --git a/src/server/collision/BoundingIntervalHierarchy.h b/src/server/collision/BoundingIntervalHierarchy.h index 954eb4c6cf2..39d237d9a2f 100755 --- a/src/server/collision/BoundingIntervalHierarchy.h +++ b/src/server/collision/BoundingIntervalHierarchy.h @@ -128,7 +128,7 @@ class BIH for (int i=0; i<3; ++i) { invDir[i] = 1.f / dir[i]; - if (dir[i] != 0.f) + if (G3D::fuzzyNe(dir[i], 0.0f)) { float t1 = (bounds.low()[i] - org[i]) * invDir[i]; float t2 = (bounds.high()[i] - org[i]) * invDir[i]; diff --git a/src/server/collision/Models/WorldModel.cpp b/src/server/collision/Models/WorldModel.cpp index f639b5fc3f4..325594fd6be 100644 --- a/src/server/collision/Models/WorldModel.cpp +++ b/src/server/collision/Models/WorldModel.cpp @@ -149,10 +149,12 @@ namespace VMAP { float tx_f = (pos.x - iCorner.x)/LIQUID_TILE_SIZE; uint32 tx = uint32(tx_f); - if (tx >= iTilesX) return false; + if (tx_f < 0.0f || tx >= iTilesX) + return false; float ty_f = (pos.y - iCorner.y)/LIQUID_TILE_SIZE; uint32 ty = uint32(ty_f); - if (ty >= iTilesY) return false; + if (ty_f < 0.0f || ty >= iTilesY) + return false; // check if tile shall be used for liquid level // checking for 0x08 *might* be enough, but disabled tiles always are 0x?F: |