diff options
author | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2014-03-18 21:49:08 +0100 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2014-03-18 21:49:08 +0100 |
commit | b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df (patch) | |
tree | 93afcc6d60f697fe59a12b4e67a780a0c7a3907e /src/Cuboid.cpp | |
parent | Added levels of shrapnel (diff) | |
parent | Fixed chunkmap tree block replacing. (diff) | |
download | cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.tar cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.tar.gz cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.tar.bz2 cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.tar.lz cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.tar.xz cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.tar.zst cuberite-b8fe024f9de9988b8aa2fc86a1d52b8dbf5712df.zip |
Diffstat (limited to 'src/Cuboid.cpp')
-rw-r--r-- | src/Cuboid.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/Cuboid.cpp b/src/Cuboid.cpp index 782837b23..3e5240248 100644 --- a/src/Cuboid.cpp +++ b/src/Cuboid.cpp @@ -38,6 +38,20 @@ void cCuboid::Assign(int a_X1, int a_Y1, int a_Z1, int a_X2, int a_Y2, int a_Z2) +void cCuboid::Assign(const cCuboid & a_SrcCuboid) +{ + p1.x = a_SrcCuboid.p1.x; + p1.y = a_SrcCuboid.p1.y; + p1.z = a_SrcCuboid.p1.z; + p2.x = a_SrcCuboid.p2.x; + p2.y = a_SrcCuboid.p2.y; + p2.z = a_SrcCuboid.p2.z; +} + + + + + void cCuboid::Sort(void) { if (p1.x > p2.x) @@ -72,6 +86,9 @@ int cCuboid::GetVolume(void) const bool cCuboid::DoesIntersect(const cCuboid & a_Other) const { + ASSERT(IsSorted()); + ASSERT(a_Other.IsSorted()); + // In order for cuboids to intersect, each of their coord intervals need to intersect return ( DoIntervalsIntersect(p1.x, p2.x, a_Other.p1.x, a_Other.p2.x) && @@ -86,6 +103,9 @@ bool cCuboid::DoesIntersect(const cCuboid & a_Other) const bool cCuboid::IsCompletelyInside(const cCuboid & a_Outer) const { + ASSERT(IsSorted()); + ASSERT(a_Outer.IsSorted()); + return ( (p1.x >= a_Outer.p1.x) && (p2.x <= a_Outer.p2.x) && @@ -197,3 +217,37 @@ bool cCuboid::IsSorted(void) const + +void cCuboid::Engulf(const Vector3i & a_Point) +{ + if (a_Point.x < p1.x) + { + p1.x = a_Point.x; + } + else if (a_Point.x > p2.x) + { + p2.x = a_Point.x; + } + + if (a_Point.y < p1.y) + { + p1.y = a_Point.y; + } + else if (a_Point.y > p2.y) + { + p2.y = a_Point.y; + } + + if (a_Point.z < p1.z) + { + p1.z = a_Point.z; + } + else if (a_Point.z > p2.z) + { + p2.z = a_Point.z; + } +} + + + + |