metaforce/Runtime/Collision/CRayCastResult.hpp

46 lines
1.3 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2016-04-22 20:22:45 +00:00
#include "Runtime/GCNTypes.hpp"
#include "Runtime/Collision/CMaterialList.hpp"
#include <zeus/CPlane.hpp>
#include <zeus/CTransform.hpp>
#include <zeus/CVector3f.hpp>
2016-04-22 20:22:45 +00:00
2021-04-10 08:42:06 +00:00
namespace metaforce {
2018-12-08 05:30:43 +00:00
class CRayCastResult {
2016-04-22 20:22:45 +00:00
public:
2018-12-08 05:30:43 +00:00
enum class EInvalid : u8 { Invalid, Valid };
2016-04-22 20:22:45 +00:00
private:
2018-12-08 05:30:43 +00:00
float x0_t = 0.f;
zeus::CVector3f x4_point;
zeus::CPlane x10_plane;
EInvalid x20_invalid = EInvalid::Invalid;
CMaterialList x28_material;
2016-04-22 20:22:45 +00:00
public:
2018-12-08 05:30:43 +00:00
CRayCastResult() = default;
CRayCastResult(const CRayCastResult& other, EInvalid invalid)
: x0_t(other.x0_t)
, x4_point(other.x4_point)
, x10_plane(other.x10_plane)
, x20_invalid(invalid)
, x28_material(other.x28_material) {}
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), x28_material(matList) {}
2016-04-22 20:22:45 +00:00
2018-12-08 05:30:43 +00:00
void MakeInvalid();
bool IsInvalid() const { return x20_invalid == EInvalid::Invalid; }
bool IsValid() const { return x20_invalid == EInvalid::Valid; }
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 x28_material; }
void Transform(const zeus::CTransform&);
};
2021-04-10 08:42:06 +00:00
} // namespace metaforce