diff --git a/src/xrAICore/xrAICore.vcxproj b/src/xrAICore/xrAICore.vcxproj index fb28023c8cf..198ece1f0df 100644 --- a/src/xrAICore/xrAICore.vcxproj +++ b/src/xrAICore/xrAICore.vcxproj @@ -234,6 +234,9 @@ {ccd4afae-aa10-42c6-a452-fdee497ccdf1} + + {7885cf3c-ee04-4c67-9467-1fbf9a36b037} + {132c62de-de85-4978-9675-c78ed4da46f0} diff --git a/src/xrCore/_fbox.h b/src/xrCore/_fbox.h index 7a69ec3e59b..2c7666a0a20 100644 --- a/src/xrCore/_fbox.h +++ b/src/xrCore/_fbox.h @@ -36,21 +36,21 @@ class _box3 vMin.set(_min); vMax.set(_max); return *this; - }; + } SelfRef set(T x1, T y1, T z1, T x2, T y2, T z2) { vMin.set(x1, y1, z1); vMax.set(x2, y2, z2); return *this; - }; + } SelfRef set(SelfCRef b) { vMin.set(b.vMin); vMax.set(b.vMax); return *this; - }; + } SelfRef setb(const Tvector& center, const Tvector& dim) { @@ -64,14 +64,14 @@ class _box3 vMin.set(0, 0, 0); vMax.set(0, 0, 0); return *this; - }; + } SelfRef identity() { vMin.set(-0.5, -0.5, -0.5); vMax.set(0.5, 0.5, 0.5); return *this; - }; + } SelfRef invalidate() { @@ -85,64 +85,65 @@ class _box3 vMin.add(s); vMax.sub(s); return *this; - }; + } SelfRef shrink(const Tvector& s) { vMin.add(s); vMax.sub(s); return *this; - }; + } SelfRef grow(T s) { vMin.sub(s); vMax.add(s); return *this; - }; + } SelfRef grow(const Tvector& s) { vMin.sub(s); vMax.add(s); return *this; - }; + } SelfRef add(const Tvector& p) { vMin.add(p); vMax.add(p); return *this; - }; + } SelfRef sub(const Tvector& p) { vMin.sub(p); vMax.sub(p); return *this; - }; + } SelfRef offset(const Tvector& p) { vMin.add(p); vMax.add(p); return *this; - }; + } SelfRef add(SelfCRef b, const Tvector& p) { - vMin.add(b.min, p); - vMax.add(b.max, p); + vMin.add(b.vMin, p); + vMax.add(b.vMax, p); return *this; - }; + } - ICF BOOL contains(T x, T y, T z) const + ICF bool contains(T x, T y, T z) const { return (x >= x1) && (x <= x2) && (y >= y1) && (y <= y2) && (z >= z1) && (z <= z2); - }; - ICF BOOL contains(const Tvector& p) const { return contains(p.x, p.y, p.z); }; - ICF BOOL contains(SelfCRef b) const { return contains(b.vMin) && contains(b.vMax); }; - BOOL similar(SelfCRef b) const { return vMin.similar(b.vMin) && vMax.similar(b.vMax); }; + } + + ICF bool contains(const Tvector& p) const { return contains(p.x, p.y, p.z); } + ICF bool contains(SelfCRef b) const { return contains(b.vMin) && contains(b.vMax); } + bool similar(SelfCRef b) const { return vMin.similar(b.vMin) && vMax.similar(b.vMax); } ICF SelfRef modify(const Tvector& p) { @@ -150,6 +151,7 @@ class _box3 vMax.max(p); return *this; } + ICF SelfRef modify(T x, T y, T z) { _vector3 tmp = {x, y, z}; @@ -161,7 +163,7 @@ class _box3 modify(b.vMin); modify(b.vMax); return *this; - }; + } SelfRef merge(SelfCRef b1, SelfCRef b2) { @@ -230,27 +232,27 @@ class _box3 return xform(b, m); } - void getsize(Tvector& R) const { R.sub(vMax, vMin); }; + void getsize(Tvector& R) const { R.sub(vMax, vMin); } void getradius(Tvector& R) const { getsize(R); R.mul(0.5f); - }; + } T getradius() const { Tvector R; getradius(R); return R.magnitude(); - }; + } T getvolume() const { Tvector sz; getsize(sz); return sz.x * sz.y * sz.z; - }; + } SelfCRef getcenter(Tvector& C) const { @@ -258,7 +260,7 @@ class _box3 C.y = (vMin.y + vMax.y) * 0.5f; C.z = (vMin.z + vMax.z) * 0.5f; return *this; - }; + } SelfCRef get_CD(Tvector& bc, Tvector& bd) const // center + dimensions { @@ -280,28 +282,28 @@ class _box3 getcenter(C); R = C.distance_to(vMax); return *this; - }; + } // Detects if this box intersect other - ICF BOOL intersect(SelfCRef box) + ICF bool intersect(SelfCRef box) { if (vMax.x < box.vMin.x) - return FALSE; + return false; if (vMax.y < box.vMin.y) - return FALSE; + return false; if (vMax.z < box.vMin.z) - return FALSE; + return false; if (vMin.x > box.vMax.x) - return FALSE; + return false; if (vMin.y > box.vMax.y) - return FALSE; + return false; if (vMin.z > box.vMax.z) - return FALSE; - return TRUE; - }; + return false; + return true; + } // Does the vector3 intersects box - BOOL Pick(const Tvector& start, const Tvector& dir) + bool Pick(const Tvector& start, const Tvector& dir) { T alpha, xt, yt, zt; Tvector rvmin, rvmax; @@ -372,6 +374,7 @@ class _box3 }; u32& IntRref(T& x) { return (u32&)x; } + enum ERP_Result { rpNone = 0, @@ -382,7 +385,7 @@ class _box3 ERP_Result Pick2(const Tvector& origin, const Tvector& dir, Tvector& coord) { - BOOL Inside = TRUE; + bool Inside = true; Tvector MaxT; MaxT.x = MaxT.y = MaxT.z = -1.0f; @@ -391,14 +394,14 @@ class _box3 if (origin[0] < vMin[0]) { coord[0] = vMin[0]; - Inside = FALSE; + Inside = false; if (IntRref(dir[0])) MaxT[0] = (vMin[0] - origin[0]) / dir[0]; // Calculate T distances to candidate planes MaxT[0] = (vMin[0] - origin[0]) / dir[0]; // Calculate T distances to candidate planes } else if (origin[0] > vMax[0]) { coord[0] = vMax[0]; - Inside = FALSE; + Inside = false; if (IntRref(dir[0])) MaxT[0] = (vMax[0] - origin[0]) / dir[0]; // Calculate T distances to candidate planes MaxT[0] = (vMax[0] - origin[0]) / dir[0]; // Calculate T distances to candidate planes } @@ -407,14 +410,14 @@ class _box3 if (origin[1] < vMin[1]) { coord[1] = vMin[1]; - Inside = FALSE; + Inside = false; if (IntRref(dir[1])) MaxT[1] = (vMin[1] - origin[1]) / dir[1]; // Calculate T distances to candidate planes MaxT[1] = (vMin[1] - origin[1]) / dir[1]; // Calculate T distances to candidate planes } else if (origin[1] > vMax[1]) { coord[1] = vMax[1]; - Inside = FALSE; + Inside = false; if (IntRref(dir[1])) MaxT[1] = (vMax[1] - origin[1]) / dir[1]; // Calculate T distances to candidate planes MaxT[1] = (vMax[1] - origin[1]) / dir[1]; // Calculate T distances to candidate planes } @@ -423,14 +426,14 @@ class _box3 if (origin[2] < vMin[2]) { coord[2] = vMin[2]; - Inside = FALSE; + Inside = false; if (IntRref(dir[2])) MaxT[2] = (vMin[2] - origin[2]) / dir[2]; // Calculate T distances to candidate planes MaxT[2] = (vMin[2] - origin[2]) / dir[2]; // Calculate T distances to candidate planes } else if (origin[2] > vMax[2]) { coord[2] = vMax[2]; - Inside = FALSE; + Inside = false; if (IntRref(dir[2])) MaxT[2] = (vMax[2] - origin[2]) / dir[2]; // Calculate T distances to candidate planes MaxT[2] = (vMax[2] - origin[2]) / dir[2]; // Calculate T distances to candidate planes } @@ -452,39 +455,44 @@ class _box3 // Check final candidate actually inside box if (IntRref(MaxT[WhichPlane]) & 0x80000000) return rpNone; - return rpNone; if (0 == WhichPlane) { // 1 & 2 coord[1] = origin[1] + MaxT[0] * dir[1]; + if ((coord[1] < vMin[1]) || (coord[1] > vMax[1])) return rpNone; - return rpNone; + coord[2] = origin[2] + MaxT[0] * dir[2]; + if ((coord[2] < vMin[2]) || (coord[2] > vMax[2])) return rpNone; - return rpNone; + return rpOriginOutside; } if (1 == WhichPlane) { // 0 & 2 coord[0] = origin[0] + MaxT[1] * dir[0]; + if ((coord[0] < vMin[0]) || (coord[0] > vMax[0])) return rpNone; - return rpNone; + coord[2] = origin[2] + MaxT[1] * dir[2]; + if ((coord[2] < vMin[2]) || (coord[2] > vMax[2])) return rpNone; - return rpNone; + return rpOriginOutside; } if (2 == WhichPlane) { // 0 & 1 coord[0] = origin[0] + MaxT[2] * dir[0]; + if ((coord[0] < vMin[0]) || (coord[0] > vMax[0])) return rpNone; - return rpNone; + coord[1] = origin[1] + MaxT[2] * dir[1]; + if ((coord[1] < vMin[1]) || (coord[1] > vMax[1])) return rpNone; - return rpNone; + return rpOriginOutside; } return rpNone; @@ -504,7 +512,7 @@ class _box3 case 7: result.set(vMax.x, vMax.y, vMin.z); break; default: result.set(0, 0, 0); break; } - }; + } void getpoints(Tvector* result) { @@ -516,7 +524,7 @@ class _box3 result[5].set(vMin.x, vMax.y, vMax.z); result[6].set(vMax.x, vMax.y, vMax.z); result[7].set(vMax.x, vMax.y, vMin.z); - }; + } SelfRef modify(SelfCRef src, const Tmatrix& M) { @@ -531,13 +539,14 @@ class _box3 } }; -typedef _box3 Fbox; -typedef _box3 Fbox3; -typedef _box3 Dbox; -typedef _box3 Dbox3; +using Fbox = _box3; +using Fbox3 = _box3; + +using Dbox = _box3; +using Dbox3 = _box3; template -BOOL _valid(const _box3& c) +bool _valid(const _box3& c) { return _valid(c.vMin) && _valid(c.vMax); } diff --git a/src/xrEngine/xrEngine.vcxproj b/src/xrEngine/xrEngine.vcxproj index c806cc1ecfc..3766457c344 100644 --- a/src/xrEngine/xrEngine.vcxproj +++ b/src/xrEngine/xrEngine.vcxproj @@ -658,6 +658,9 @@ {132c62de-de85-4978-9675-c78ed4da46f0} false + + {7885cf3c-ee04-4c67-9467-1fbf9a36b037} +