Files
prime/include/MetroidPrime/CGameCollision.hpp
Luke StreetandGitHub a3de68f5b8 CGameCollision & CollisionUtil (#42)
* Initial CGameCollision

* CollisionUtil

* Update GM8E01_01 symbols
2026-03-13 01:27:42 -06:00

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