mirror of https://github.com/PrimeDecomp/prime.git
35 lines
980 B
C++
35 lines
980 B
C++
#ifndef _CPLANE
|
|
#define _CPLANE
|
|
|
|
#include "types.h"
|
|
|
|
#include "Kyoto/Math/CUnitVector3f.hpp"
|
|
#include "Kyoto/Math/CVector3f.hpp"
|
|
|
|
class CPlane {
|
|
public:
|
|
CPlane(const CVector3f& vec, const CUnitVector3f& normal)
|
|
: x0_normal(normal), xc_constant(CVector3f::Dot(vec, normal)) {}
|
|
CPlane(float constant, const CUnitVector3f& normal) : x0_normal(normal), xc_constant(constant) {}
|
|
CPlane(const CVector3f&, const CVector3f&, const CVector3f&);
|
|
// TODO
|
|
|
|
const CUnitVector3f& GetNormal() const { return x0_normal; }
|
|
float GetConstant() const { return xc_constant; }
|
|
float GetHeight(const CVector3f& pos) const {
|
|
return CVector3f::Dot(GetNormal(), pos) - GetConstant();
|
|
}
|
|
bool IsFacing(const CVector3f& vec) const {
|
|
return CVector3f::Dot(x0_normal, vec) >= GetConstant();
|
|
}
|
|
|
|
float ClipLineSegment(const CVector3f& start, const CVector3f& end) const;
|
|
|
|
private:
|
|
CUnitVector3f x0_normal;
|
|
float xc_constant;
|
|
};
|
|
CHECK_SIZEOF(CPlane, 0x10)
|
|
|
|
#endif // _CPLANE
|