#ifndef __CAABOX_HPP__ #define __CAABOX_HPP__ #include "Kyoto/Math/CVector3f.hpp" class CInputStream; class CLineSeg; class CPlane; class CTransform4f; class CTri; class CAABox { public: enum EBoxEdgeId { kE_Z0, kE_X0, kE_Z1, kE_X1, kE_Z2, kE_X2, kE_Z3, kE_X3, kE_Y0, kE_Y1, kE_Y2, kE_Y3, }; enum EBoxFaceId { kF_YMin, kF_YMax, kF_XMin, kF_XMax, kF_ZMax, kF_ZMin, }; CAABox(const CVector3f& min, const CVector3f& max); CAABox(f32 minX, f32 minY, f32 minZ, f32 maxX, f32 maxY, f32 maxZ) : min(minX, minY, minZ), max(maxX, maxY, maxZ) {} CAABox(CInputStream& in); // CAABox(const CAABox& other) // : min(other.min) // , max(other.max) {} // CAABox& operator=(const CAABox& other) { // min = other.min; // max = other.max; // return *this; // } CLineSeg GetEdge(EBoxEdgeId edge) const; CTri GetTri(EBoxFaceId face, int windOffset) const; CVector3f ClosestPointAlongVector(const CVector3f& vec) const; CVector3f FurthestPointAlongVector(const CVector3f& vec) const; CVector3f GetCenterPoint() const; CVector3f GetPoint(int) const; // Include__6CAABoxFRC9CVector3f weak // Include__6CAABoxFRC6CAABox weak void AccumulateBounds(const CVector3f&); bool Invalid() const; bool PointInside(const CVector3f& vec) const; bool DoBoundsOverlap(const CAABox&) const; f32 GetVolume() const; CAABox GetBooleanIntersection(const CAABox& other) const; bool Inside(const CAABox& other) const; bool InsidePlane(const CPlane& plane) const; CVector3f ClampToBox(const CVector3f& vec) const; CAABox GetTransformedAABox(const CTransform4f& xf) const; inline CVector3f GetExtents() const { // Name is a guess CVector3f result = max - min; result *= 0.5f; return result; } const CVector3f& GetMinPoint() const { return min; } const CVector3f& GetMaxPoint() const { return max; } // GetPointA__6CAABoxCFv weak // GetPointB__6CAABoxCFv weak // GetPointC__6CAABoxCFv weak // GetPointD__6CAABoxCFv weak // GetPointE__6CAABoxCFv weak // GetPointF__6CAABoxCFv weak // GetPointG__6CAABoxCFv weak // GetPointH__6CAABoxCFv weak // GetWidth__6CAABoxCFv weak // GetDepth__6CAABoxCFv weak // GetHeight__6CAABoxCFv weak // GetTri__6CAABoxCFii weak // GetEdge__6CAABoxCFi weak static const CAABox& Identity() { return mskNullBox; } static const CAABox& MakeMaxInvertedBox() { return mskInvertedBox; } // MakeNullBox__6CAABoxFv ?? static f32 DistanceBetween(const CAABox& a, const CAABox& b); private: CVector3f min; CVector3f max; static CAABox mskInvertedBox; static CAABox mskNullBox; }; CHECK_SIZEOF(CAABox, 0x18) #endif // __CAABOX_HPP__