mirror of
https://github.com/PrimeDecomp/prime.git
synced 2026-07-12 18:18:56 -07:00
126 lines
8.2 KiB
C++
126 lines
8.2 KiB
C++
#ifndef _CGAMECOLLISION
|
|
#define _CGAMECOLLISION
|
|
|
|
#include "types.h"
|
|
|
|
#include "MetroidPrime/CStateManager.hpp"
|
|
|
|
class CActor;
|
|
class CAreaCollisionCache;
|
|
class CCollisionInfo;
|
|
class CCollisionInfoList;
|
|
class CCollisionPrimitive;
|
|
class CGameArea;
|
|
class CMaterialFilter;
|
|
class CStateManager;
|
|
class CTransform4f;
|
|
class CRayCastResult;
|
|
class CPhysicsActor;
|
|
class CInternalCollisionStructure;
|
|
class CUnitVector3f;
|
|
class ICollisionFilter;
|
|
|
|
class CGameCollision {
|
|
public:
|
|
static void InitCollision();
|
|
static bool NullCollisionCollider(const CInternalCollisionStructure&, CCollisionInfoList&);
|
|
static bool NullBooleanCollider(const CInternalCollisionStructure&);
|
|
static bool NullMovingCollider(const CInternalCollisionStructure&, const CVector3f&, double&,
|
|
CCollisionInfo&);
|
|
static bool DetectStaticCollisionBoolean(const CStateManager&, const CCollisionPrimitive&,
|
|
const CTransform4f&, const CMaterialFilter&);
|
|
static bool DetectStaticCollisionBoolean_Cached(const CStateManager&, CAreaCollisionCache&,
|
|
const CCollisionPrimitive&,
|
|
const CTransform4f&,
|
|
const CMaterialFilter&);
|
|
static bool DetectStaticCollision(const CStateManager&, const CCollisionPrimitive&,
|
|
const CTransform4f&, const CMaterialFilter&,
|
|
CCollisionInfoList&);
|
|
static bool DetectStaticCollision_Cached(const CStateManager&, CAreaCollisionCache&,
|
|
const CCollisionPrimitive&, const CTransform4f&,
|
|
const CMaterialFilter&, CCollisionInfoList&);
|
|
static bool DetectStaticCollision_Cached_Moving(const CStateManager&, CAreaCollisionCache&,
|
|
const CCollisionPrimitive&,
|
|
const CTransform4f&,
|
|
const CMaterialFilter&, CVector3f,
|
|
CCollisionInfo&, double&);
|
|
static bool DetectDynamicCollisionBoolean(const CCollisionPrimitive&, const CTransform4f&,
|
|
const TEntityList&, const CStateManager&);
|
|
static bool DetectDynamicCollision(const CCollisionPrimitive&, const CTransform4f&,
|
|
const TEntityList&, TUniqueId&, CCollisionInfoList&,
|
|
const CStateManager&);
|
|
static bool DetectDynamicCollisionMoving(const CCollisionPrimitive&, const CTransform4f&,
|
|
const TEntityList&, CVector3f, TUniqueId&,
|
|
CCollisionInfo&, double&, const CStateManager&);
|
|
static void BuildAreaCollisionCache(const CStateManager& mgr, CAreaCollisionCache& cache);
|
|
static bool DetectCollisionBoolean(const CStateManager& mgr, const CCollisionPrimitive& prim,
|
|
const CTransform4f& xf, const CMaterialFilter& filter,
|
|
const TEntityList& nearList);
|
|
static bool DetectCollisionBoolean_Cached(const CStateManager& mgr, CAreaCollisionCache& cache,
|
|
const CCollisionPrimitive& prim, const CTransform4f& xf,
|
|
const CMaterialFilter& filter,
|
|
const TEntityList& nearList);
|
|
static bool DetectCollision(const CStateManager&, const CCollisionPrimitive&,
|
|
const CTransform4f&, const CMaterialFilter&, const TEntityList&,
|
|
TUniqueId&, CCollisionInfoList&);
|
|
static bool DetectCollision_Cached(const CStateManager&, CAreaCollisionCache&,
|
|
const CCollisionPrimitive&, const CTransform4f&,
|
|
const CMaterialFilter&, const TEntityList&, TUniqueId&,
|
|
CCollisionInfoList&);
|
|
static bool DetectCollision_Cached_Moving(const CStateManager&, CAreaCollisionCache&,
|
|
const CCollisionPrimitive&, const CTransform4f&,
|
|
const CMaterialFilter&, const TEntityList&, CVector3f,
|
|
TUniqueId&, CCollisionInfo&, double&);
|
|
static CRayCastResult RayStaticIntersection(const CStateManager&, const CVector3f&,
|
|
const CVector3f&, float, const CMaterialFilter&);
|
|
static bool RayStaticIntersectionBool(const CStateManager&, const CVector3f&, const CVector3f&,
|
|
float, const CMaterialFilter&);
|
|
static bool RayStaticIntersectionArea(const CGameArea&, const CVector3f&, const CVector3f&, float,
|
|
const CMaterialFilter&);
|
|
static CRayCastResult RayDynamicIntersection(const CStateManager& mgr, TUniqueId& idOut,
|
|
const CVector3f& pos, const CVector3f& dir,
|
|
float mag, const CMaterialFilter& filter,
|
|
const TEntityList& nearList);
|
|
static bool RayDynamicIntersectionBool(const CStateManager&, const CVector3f&, const CVector3f&,
|
|
const CMaterialFilter&, TEntityList, const CActor*, float);
|
|
static CRayCastResult RayWorldIntersection(const CStateManager& mgr, TUniqueId& idOut,
|
|
const CVector3f& pos, const CVector3f& dir,
|
|
float mag, const CMaterialFilter& filter,
|
|
const TEntityList& nearList);
|
|
static rstl::optional_object< CVector3f >
|
|
FindNonIntersectingVector(const CStateManager& mgr, CAreaCollisionCache& cache,
|
|
CPhysicsActor& actor, const CCollisionPrimitive& prim,
|
|
const TEntityList& nearList); // name?
|
|
static void CollisionFailsafe(const CStateManager& mgr, CAreaCollisionCache& cache,
|
|
CPhysicsActor& actor,
|
|
const CCollisionPrimitive& prim,
|
|
const TEntityList& nearList, float dt,
|
|
uint failsafeTicks);
|
|
static void AvoidStaticCollisionWithinRadius(const CStateManager& mgr, CPhysicsActor& actor,
|
|
uint iterations, float dt, float height,
|
|
float size, float mass, float radius);
|
|
static void Move(CStateManager& mgr, CPhysicsActor& actor, float dt, const TEntityList*);
|
|
static void MovePlayer(CStateManager& mgr, CPhysicsActor& actor, float dt,
|
|
const TEntityList*);
|
|
static void MoveAndCollide(CStateManager& mgr, CPhysicsActor& actor, float dt,
|
|
const ICollisionFilter& filter, const TEntityList*);
|
|
|
|
static void MakeCollisionCallbacks(CStateManager&, CPhysicsActor&, const TUniqueId&,
|
|
const CCollisionInfoList&);
|
|
static void SendScriptMessages(CStateManager&, CActor&, CActor*, const CCollisionInfoList&);
|
|
static void SendMaterialMessage(CStateManager&, const CMaterialList&, CActor&);
|
|
static void ShowCollisionResults(CCollisionInfoList& list, const CColor& color);
|
|
static float GetCoefficientOfRestitution(const CCollisionInfo& info);
|
|
static bool IsFloor(const CMaterialList& material, const CVector3f& normal);
|
|
static bool CanBlock(const CMaterialList& material, const CVector3f& normal);
|
|
static float GetMinExtentForCollisionPrimitive(const CCollisionPrimitive&);
|
|
static void ResolveCollisions(CPhysicsActor&, CPhysicsActor*, const CCollisionInfoList&);
|
|
static void CollideWithStaticBodyNoRot(CPhysicsActor&, const CMaterialList&, const CMaterialList&,
|
|
const CUnitVector3f&, float, bool);
|
|
static void CollideWithDynamicBodyNoRot(CPhysicsActor&, CPhysicsActor&, const CCollisionInfo&,
|
|
float, bool);
|
|
static CVector3f GetActorRelativeVelocities(const CPhysicsActor*, const CPhysicsActor*);
|
|
};
|
|
|
|
#endif // _CGAMECOLLISION
|