Halfway match CAABox; continue CBallCamera

Former-commit-id: 602109d8f0
This commit is contained in:
2022-09-29 19:55:38 -04:00
parent 8f3807da18
commit 1f56cefe8c
41 changed files with 1023 additions and 173 deletions

View File

@@ -0,0 +1,27 @@
#ifndef _CCOLLIDABLESPHERE_HPP
#define _CCOLLIDABLESPHERE_HPP
#include "types.h"
#include "Collision/CCollisionPrimitive.hpp"
#include "Kyoto/Math/CSphere.hpp"
class CCollidableSphere : public CCollisionPrimitive {
public:
CCollidableSphere(const CSphere& sphere, const CMaterialList& material)
: CCollisionPrimitive(material), x10_sphere(sphere) {}
u32 GetTableIndex() const override;
CAABox CalculateAABox(const CTransform4f&) const override;
CAABox CalculateLocalAABox() const override;
FourCC GetPrimType() const override;
~CCollidableSphere() override {}
CRayCastResult CastRayInternal(const CInternalRayCastStructure&) const;
private:
CSphere x10_sphere;
};
CHECK_SIZEOF(CCollidableSphere, 0x20)
#endif

View File

@@ -0,0 +1,45 @@
#ifndef _CCOLLISIONINFO_HPP
#define _CCOLLISIONINFO_HPP
#include "types.h"
#include "Collision/CMaterialList.hpp"
#include "Kyoto/Math/CUnitVector3f.hpp"
#include "Kyoto/Math/CVector3f.hpp"
class CAABox;
class CCollisionInfo {
public:
enum EInvalid {
kI_Invalid,
kI_Valid,
};
enum ESwapMaterials {
// TODO
};
CCollisionInfo(EInvalid valid = kI_Invalid);
CCollisionInfo(const CVector3f&, const CMaterialList&, const CMaterialList&, const CVector3f&);
CCollisionInfo(const CVector3f&, const CMaterialList&, const CMaterialList&, const CVector3f&,
const CVector3f&);
CCollisionInfo(const CAABox&, const CMaterialList&, const CMaterialList&, const CVector3f&,
const CVector3f&);
CCollisionInfo(const CCollisionInfo&, ESwapMaterials);
private:
CVector3f x0_point;
CVector3f xc_extentX;
CVector3f x18_extentY;
CVector3f x24_extentZ;
bool x30_valid;
bool x31_hasExtents;
CMaterialList x38_materialLeft;
CMaterialList x40_materialRight;
CUnitVector3f x48_normalLeft;
CUnitVector3f x54_normalRight;
};
CHECK_SIZEOF(CCollisionInfo, 0x60)
#endif

View File

@@ -72,44 +72,58 @@ static EMaterialTypes SolidMaterial = kMT_Solid;
class CMaterialList {
public:
CMaterialList() : value(0) {}
CMaterialList(const EMaterialTypes& material) : value(0) { value |= u64(1) << material; }
CMaterialList(const EMaterialTypes& m1) : value(0) { Add(m1); }
CMaterialList(const EMaterialTypes& m1, const EMaterialTypes& m2) : value(0) {
value |= u64(1) << m1;
value |= u64(1) << m2;
Add(m1);
Add(m2);
}
CMaterialList(const EMaterialTypes& m1, const EMaterialTypes& m2, const EMaterialTypes& m3)
: value(0) {
value |= u64(1) << m1;
value |= u64(1) << m2;
value |= u64(1) << m3;
Add(m1);
Add(m2);
Add(m3);
}
CMaterialList(const EMaterialTypes& m1, const EMaterialTypes& m2, const EMaterialTypes& m3,
const EMaterialTypes& m4)
: value(0) {
value |= u64(1) << m1;
value |= u64(1) << m2;
value |= u64(1) << m3;
value |= u64(1) << m4;
Add(m1);
Add(m2);
Add(m3);
Add(m4);
}
CMaterialList(const EMaterialTypes& m1, const EMaterialTypes& m2, const EMaterialTypes& m3,
const EMaterialTypes& m4, const EMaterialTypes& m5)
: value(0) {
value |= u64(1) << m1;
value |= u64(1) << m2;
value |= u64(1) << m3;
value |= u64(1) << m4;
value |= u64(1) << m5;
Add(m1);
Add(m2);
Add(m3);
Add(m4);
Add(m5);
}
CMaterialList(u64 value) : value(value) {}
void Add(EMaterialTypes material) { value |= u64(1) << material; }
// Add__13CMaterialListFRC13CMaterialList weak
// Remove__13CMaterialListF14EMaterialTypes weak
// Remove__13CMaterialListFRC13CMaterialList weak
const CMaterialList& Union(const CMaterialList& other) {
value |= other.value;
return *this;
}
bool HasMaterial(EMaterialTypes material) const {
return (value & (u64(1) << material)) ? true : false;
}
// HasMaterials__13CMaterialListCFv weak
// GetField__13CMaterialListCFUxUx weak
// Intersection__13CMaterialListCFRC13CMaterialList weak
// BitPosition__13CMaterialListFUx global
// GetMaterialString__13CMaterialListCFv weak
// SharesMaterials__13CMaterialListCFRC13CMaterialList weak
private:
u64 value;
// static CMaterialList kEverything;
};
CHECK_SIZEOF(CMaterialList, 0x8)