metaforce/Runtime/Collision/CRayCastResult.hpp

53 lines
1.4 KiB
C++
Raw Normal View History

2016-04-22 20:22:45 +00:00
#ifndef __URDE_CRAYCASTRESULT_HPP__
#define __URDE_CRAYCASTRESULT_HPP__
#include "CMaterialList.hpp"
#include "zeus/zeus.hpp"
namespace urde
{
class CRayCastResult
{
public:
2016-04-27 02:41:00 +00:00
enum class EInvalid : u8
2016-04-22 20:22:45 +00:00
{
2016-04-27 02:41:00 +00:00
Invalid,
Valid
2016-04-22 20:22:45 +00:00
};
private:
float x0_t = 0.f;
2016-04-27 02:41:00 +00:00
zeus::CVector3f x4_point;
zeus::CPlane x10_plane;
EInvalid x20_invalid = EInvalid::Invalid;
CMaterialList x24_material;
2016-04-22 20:22:45 +00:00
public:
2016-05-21 03:02:09 +00:00
CRayCastResult() = default;
2016-04-27 02:41:00 +00:00
CRayCastResult(const CRayCastResult& other, EInvalid invalid)
: x0_t(other.x0_t),
2016-04-27 02:41:00 +00:00
x4_point(other.x4_point),
x10_plane(other.x10_plane),
x20_invalid(invalid),
x24_material(other.x24_material)
2016-04-27 02:41:00 +00:00
{
}
CRayCastResult(float t, const zeus::CVector3f& point,
const zeus::CPlane& plane, const CMaterialList& matList)
: x0_t(t), x4_point(point), x10_plane(plane),
x20_invalid(EInvalid::Valid), x24_material(matList)
2016-04-22 20:22:45 +00:00
{}
2016-04-27 00:26:02 +00:00
void MakeInvalid();
2016-04-27 02:41:00 +00:00
bool IsInvalid() const { return x20_invalid == EInvalid::Invalid; }
float GetT() const { return x0_t; }
const zeus::CVector3f& GetPoint() const { return x4_point; }
const zeus::CPlane& GetPlane() const { return x10_plane; }
const CMaterialList& GetMaterial() const { return x24_material; }
2016-04-27 02:41:00 +00:00
2016-04-27 00:26:02 +00:00
void Transform(const zeus::CTransform&);
2016-04-22 20:22:45 +00:00
};
}
#endif // __URDE_CRAYCASTRESULT_HPP__