metaforce/Runtime/Collision/CCollisionPrimitive.hpp

68 lines
1.7 KiB
C++
Raw Normal View History

#ifndef __URDE_CCOLLISIONPRIMITIVE_HPP__
#define __URDE_CCOLLISIONPRIMITIVE_HPP__
2016-04-22 20:22:45 +00:00
#include "Collision/CMaterialList.hpp"
2016-04-27 00:26:02 +00:00
#include "CRayCastResult.hpp"
#include "zeus/CAABox.hpp"
2016-04-23 18:04:49 +00:00
#include <functional>
namespace urde
{
2016-04-27 00:26:02 +00:00
class COBBTree;
class CInternalRayCastStructure;
class CMaterialFilter;
class CCollisionPrimitive
{
2016-04-22 20:22:45 +00:00
CMaterialList x8_material;
public:
2016-04-23 18:04:49 +00:00
class Type
{
2016-04-23 18:04:49 +00:00
std::function<void(u32)> x0_setter;
const char* x4_info;
public:
Type() = default;
Type(std::function<void(unsigned int)> setter, const char * info)
: x0_setter(setter),
x4_info(info)
{
}
const char* GetInfo() const
{
return x4_info;
}
std::function<void(u32)> GetSetter() const
{
return x0_setter;
}
};
2016-04-27 00:26:02 +00:00
CCollisionPrimitive()=default;
CCollisionPrimitive(const CMaterialList& list);
virtual u32 GetTableIndex() const=0;
virtual void SetMaterial(const CMaterialList&);
virtual const CMaterialList& GetMaterial() const;
virtual zeus::CAABox CalculateAABox(const zeus::CTransform&) const=0;
virtual zeus::CAABox CalculateLocalAABox() const=0;
virtual FourCC GetPrimType() const=0;
virtual ~CCollisionPrimitive() {}
virtual CRayCastResult CastRayInternal(const CInternalRayCastStructure&) const=0;
CRayCastResult CastRay(const zeus::CVector3f&, const zeus::CVector3f&, float, const CMaterialFilter&,
const zeus::CTransform&) const;
static void InitBeginTypes();
2016-04-23 18:04:49 +00:00
static void InitAddType(const Type& tp);
static void InitEndTypes();
2016-04-22 20:29:31 +00:00
static void InitBeginColliders();
2016-04-23 18:04:49 +00:00
static void InitAddCollider(const Type& tp);
};
}
#endif // __URDE_CCOLLISIONPRIMITIVE_HPP__