A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
Kinoko::Field::CollisionDirector Class Reference0x809C2F44

#include <CollisionDirector.hh>

Description

Manages the caching of colliding KCL triangles and exposes queries for collision checks.

Definition at line 23 of file CollisionDirector.hh.

Inheritance diagram for Kinoko::Field::CollisionDirector:

Classes

struct  CollisionEntry
 

Public Types

enum class  eCollisionAttribute {
  Trickable = 13 ,
  RejectRoad = 14 ,
  Soft = 15
}
 Collision Entry Attribute fields. More...
 
typedef EGG::TBitFlag< u16, eCollisionAttributeCollisionAttribute
 

Public Member Functions

void checkCourseColNarrScLocal (f32 radius, const EGG::Vector3f &pos, KCLTypeMask mask, u32 timeOffset)
 
bool checkSpherePartialPush (f32 radius, const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask flags, CollisionInfoPartial *info, KCLTypeMask *typeMaskOut, u32 timeOffset)
 
bool checkSphereFull (f32 radius, const EGG::Vector3f &v0, const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut, u32 timeOffset)
 
bool checkSphereFullPush (f32 radius, const EGG::Vector3f &v0, const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut, u32 timeOffset)
 
bool checkSphereCachedPartial (f32 radius, const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask, CollisionInfoPartial *info, KCLTypeMask *typeMaskOut, u32 timeOffset)
 
bool checkSphereCachedPartialPush (f32 radius, const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask, CollisionInfoPartial *info, KCLTypeMask *typeMaskOut, u32 timeOffset)
 
bool checkSphereCachedFullPush (f32 radius, const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask, CollisionInfo *info, KCLTypeMask *typeMaskOut, u32 timeOffset)
 
void resetCollisionEntries (KCLTypeMask *ptr)
 
void pushCollisionEntry (f32 dist, KCLTypeMask *typeMask, KCLTypeMask kclTypeBit, CollisionAttribute attribute)
 Called when we find a piece of collision we are touching and want to save it temporarily.
 
void setCurrentCollisionVariant (u16 attribute)
 
void setCurrentCollisionTrickable (bool trickable)
 
bool findClosestCollisionEntry (KCLTypeMask *typeMask, KCLTypeMask type)
 Finds the closest KCL triangle out of the list of tris we are colliding with.
 

Static Public Member Functions

static CollisionDirectorCreateInstance ()
 
static void DestroyInstance ()
 
static CollisionDirectorInstance ()
 

Getters

const CollisionEntryclosestCollisionEntry () const
 

Private Attributes

const CollisionEntrym_closestCollisionEntry
 
std::array< CollisionEntry, COLLISION_ARR_LENGTH > m_entries
 
size_t m_collisionEntryCount
 

Static Private Attributes

static CollisionDirectors_instance = nullptr
 

Additional Inherited Members

- Private Member Functions inherited from Kinoko::EGG::Disposer
- Static Private Member Functions inherited from Kinoko::EGG::Disposer
static constexpr u16 getLinkOffset ()
 

Member Typedef Documentation

◆ CollisionAttribute

Member Enumeration Documentation

◆ eCollisionAttribute

Collision Entry Attribute fields.

| 0 - 4 | 5 - 7 | 8 | 9 | 10 | 11 - 12 | 13 | 14 | 15 | | BaseType | Variant | | | | Intensity | Trickable | Offroad | Soft |

Definition at line 30 of file CollisionDirector.hh.

Constructor & Destructor Documentation

◆ CollisionDirector()

Kinoko::Field::CollisionDirector::CollisionDirector ( )
private0x8078E33C

Definition at line 305 of file CollisionDirector.cc.

Member Function Documentation

◆ ~CollisionDirector()

Kinoko::Field::CollisionDirector::~CollisionDirector ( )
overrideprivate0x8078E454

Definition at line 312 of file CollisionDirector.cc.

◆ checkCourseColNarrScLocal()

void Kinoko::Field::CollisionDirector::checkCourseColNarrScLocal ( f32 radius,
const EGG::Vector3f & pos,
KCLTypeMask mask,
u32 timeOffset )
0x8078E4F0

Definition at line 8 of file CollisionDirector.cc.

◆ checkSphereCachedFullPush()

bool Kinoko::Field::CollisionDirector::checkSphereCachedFullPush ( f32 radius,
const EGG::Vector3f & pos,
const EGG::Vector3f & prevPos,
KCLTypeMask typeMask,
CollisionInfo * info,
KCLTypeMask * typeMaskOut,
u32 timeOffset )
nodiscard0x807907F8

Definition at line 207 of file CollisionDirector.cc.

◆ checkSphereCachedPartial()

bool Kinoko::Field::CollisionDirector::checkSphereCachedPartial ( f32 radius,
const EGG::Vector3f & pos,
const EGG::Vector3f & prevPos,
KCLTypeMask typeMask,
CollisionInfoPartial * info,
KCLTypeMask * typeMaskOut,
u32 timeOffset )
nodiscard0x807901F0

Definition at line 137 of file CollisionDirector.cc.

◆ checkSphereCachedPartialPush()

bool Kinoko::Field::CollisionDirector::checkSphereCachedPartialPush ( f32 radius,
const EGG::Vector3f & pos,
const EGG::Vector3f & prevPos,
KCLTypeMask typeMask,
CollisionInfoPartial * info,
KCLTypeMask * typeMaskOut,
u32 timeOffset )
nodiscard0x807903BC

Definition at line 177 of file CollisionDirector.cc.

◆ checkSphereFull()

bool Kinoko::Field::CollisionDirector::checkSphereFull ( f32 radius,
const EGG::Vector3f & v0,
const EGG::Vector3f & v1,
KCLTypeMask flags,
CollisionInfo * pInfo,
KCLTypeMask * pFlagsOut,
u32 timeOffset )
nodiscard0x8078F500

Definition at line 56 of file CollisionDirector.cc.

◆ checkSphereFullPush()

bool Kinoko::Field::CollisionDirector::checkSphereFullPush ( f32 radius,
const EGG::Vector3f & v0,
const EGG::Vector3f & v1,
KCLTypeMask flags,
CollisionInfo * pInfo,
KCLTypeMask * pFlagsOut,
u32 timeOffset )
nodiscard0x8078F784

Definition at line 96 of file CollisionDirector.cc.

◆ checkSpherePartialPush()

bool Kinoko::Field::CollisionDirector::checkSpherePartialPush ( f32 radius,
const EGG::Vector3f & pos,
const EGG::Vector3f & prevPos,
KCLTypeMask flags,
CollisionInfoPartial * info,
KCLTypeMask * typeMaskOut,
u32 timeOffset )
nodiscard0x8078F320

Definition at line 15 of file CollisionDirector.cc.

◆ closestCollisionEntry()

const CollisionEntry * Kinoko::Field::CollisionDirector::closestCollisionEntry ( ) const
inlinenodiscard

Definition at line 102 of file CollisionDirector.hh.

◆ CreateInstance()

CollisionDirector * Kinoko::Field::CollisionDirector::CreateInstance ( )
static0x8078DFE8

Definition at line 290 of file CollisionDirector.cc.

◆ DestroyInstance()

void Kinoko::Field::CollisionDirector::DestroyInstance ( )
static0x8078E124

Definition at line 297 of file CollisionDirector.cc.

◆ findClosestCollisionEntry()

bool Kinoko::Field::CollisionDirector::findClosestCollisionEntry ( KCLTypeMask * typeMask,
KCLTypeMask type )
0x807BD96C

Finds the closest KCL triangle out of the list of tris we are colliding with.

Parameters
typeFilters the result for particular KCL types
Returns
Whether there was a collision entry for the provided type

Definition at line 273 of file CollisionDirector.cc.

◆ Instance()

static CollisionDirector * Kinoko::Field::CollisionDirector::Instance ( )
inlinestaticnodiscard

Definition at line 110 of file CollisionDirector.hh.

◆ pushCollisionEntry()

void Kinoko::Field::CollisionDirector::pushCollisionEntry ( f32 dist,
KCLTypeMask * typeMask,
KCLTypeMask kclTypeBit,
CollisionAttribute attribute )
0x807BDA9C

Called when we find a piece of collision we are touching and want to save it temporarily.

Parameters
distDistance from player to the KCL triangle center
typeMaskUpdated to include kclTypeBit
kclTypeBitThe attribute and additional info about the tri we are colliding with
attributeThe base type of the tri we are colliding with

Definition at line 259 of file CollisionDirector.cc.

◆ resetCollisionEntries()

void Kinoko::Field::CollisionDirector::resetCollisionEntries ( KCLTypeMask * ptr)
0x807BDA7C

Definition at line 247 of file CollisionDirector.cc.

◆ setCurrentCollisionTrickable()

void Kinoko::Field::CollisionDirector::setCurrentCollisionTrickable ( bool trickable)
inline0x807BDBC4

Definition at line 93 of file CollisionDirector.hh.

◆ setCurrentCollisionVariant()

void Kinoko::Field::CollisionDirector::setCurrentCollisionVariant ( u16 attribute)
inline0x807BDB5C

Definition at line 87 of file CollisionDirector.hh.

Member Data Documentation

◆ m_closestCollisionEntry

const CollisionEntry* Kinoko::Field::CollisionDirector::m_closestCollisionEntry
private

Definition at line 118 of file CollisionDirector.hh.

◆ m_collisionEntryCount

size_t Kinoko::Field::CollisionDirector::m_collisionEntryCount
private

Definition at line 120 of file CollisionDirector.hh.

◆ m_entries

std::array<CollisionEntry, COLLISION_ARR_LENGTH> Kinoko::Field::CollisionDirector::m_entries
private

Definition at line 119 of file CollisionDirector.hh.

◆ s_instance

CollisionDirector * Kinoko::Field::CollisionDirector::s_instance = nullptr
staticprivate0x809C2F44

Definition at line 122 of file CollisionDirector.hh.