metaforce/Runtime/Collision/CCollisionInfo.hpp

56 lines
2.3 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2016-07-26 22:45:01 +00:00
#include "RetroTypes.hpp"
#include "CMaterialList.hpp"
#include "zeus/CAABox.hpp"
#include "zeus/CMatrix3f.hpp"
namespace urde
{
class CCollisionInfo
{
zeus::CVector3f x0_point;
2017-12-18 02:54:50 +00:00
zeus::CVector3f xc_extentX;
zeus::CVector3f x18_extentY;
zeus::CVector3f x24_extentZ;
bool x30_valid = false;
2017-12-18 02:54:50 +00:00
bool x31_hasExtents = false;
CMaterialList x38_materialLeft;
CMaterialList x40_materialRight;
zeus::CVector3f x48_normalLeft;
zeus::CVector3f x54_normalRight;
public:
2016-07-26 22:45:01 +00:00
CCollisionInfo() = default;
CCollisionInfo(const zeus::CVector3f& point, const CMaterialList& list1, const CMaterialList& list2,
const zeus::CVector3f& normalLeft, const zeus::CVector3f& normalRight)
2017-12-18 02:54:50 +00:00
: x0_point(point), x30_valid(true), x31_hasExtents(false), x38_materialLeft(list2), x40_materialRight(list1),
x48_normalLeft(normalLeft), x54_normalRight(normalRight) {}
CCollisionInfo(const zeus::CVector3f& point, const CMaterialList& list1, const CMaterialList& list2,
const zeus::CVector3f& normal)
2017-12-18 02:54:50 +00:00
: x0_point(point), x30_valid(true), x31_hasExtents(false), x38_materialLeft(list2), x40_materialRight(list1),
x48_normalLeft(normal), x54_normalRight(-normal) {}
2016-07-26 22:45:01 +00:00
CCollisionInfo(const zeus::CAABox& aabox, const CMaterialList& list1, const CMaterialList& list2,
const zeus::CVector3f& normalLeft, const zeus::CVector3f& normalRight)
: x0_point(aabox.min),
2017-12-18 02:54:50 +00:00
xc_extentX(aabox.max.x - aabox.min.x, 0.f, 0.f),
x18_extentY(0.f, aabox.max.y - aabox.min.y, 0.f),
x24_extentZ(0.f, 0.f, aabox.max.z - aabox.min.z),
x30_valid(true), x31_hasExtents(true), x38_materialLeft(list2),
x40_materialRight(list1), x48_normalLeft(normalLeft),
x54_normalRight(normalRight)
2016-07-26 22:45:01 +00:00
{}
CCollisionInfo GetSwapped() const;
bool IsValid() const { return x30_valid; }
const CMaterialList& GetMaterialLeft() const { return x38_materialLeft; }
const CMaterialList& GetMaterialRight() const { return x40_materialRight; }
zeus::CVector3f GetExtreme() const;
2016-07-26 22:45:01 +00:00
void Swap();
2018-05-27 04:22:38 +00:00
const zeus::CVector3f& GetNormalLeft() const { return x48_normalLeft; }
const zeus::CVector3f& GetNormalRight() const { return x54_normalRight; }
const zeus::CVector3f& GetPoint() const { return x0_point; }
};
}