42 u16 baseType()
const {
43 return attribute & 0x1F;
47 return (attribute >> 5) & 7;
50 u16 intensity()
const {
51 return (attribute >> 11) & 3;
54 void setVariant(
u16 variant) {
55 u16 current =
static_cast<u16>(attribute);
60 void checkCourseColNarrScLocal(f32 radius,
const EGG::Vector3f &pos, KCLTypeMask mask,
63 [[nodiscard]]
bool checkSpherePartialPush(f32 radius,
const EGG::Vector3f &pos,
65 KCLTypeMask *typeMaskOut, u32 timeOffset);
67 KCLTypeMask flags,
CollisionInfo *pInfo, KCLTypeMask *pFlagsOut, u32 timeOffset);
68 [[nodiscard]]
bool checkSphereFullPush(f32 radius,
const EGG::Vector3f &v0,
70 KCLTypeMask *pFlagsOut, u32 timeOffset);
72 [[nodiscard]]
bool checkSphereCachedPartial(f32 radius,
const EGG::Vector3f &pos,
74 KCLTypeMask *typeMaskOut, u32 timeOffset);
75 [[nodiscard]]
bool checkSphereCachedPartialPush(f32 radius,
const EGG::Vector3f &pos,
77 KCLTypeMask *typeMaskOut, u32 timeOffset);
78 [[nodiscard]]
bool checkSphereCachedFullPush(f32 radius,
const EGG::Vector3f &pos,
80 KCLTypeMask *typeMaskOut, u32 timeOffset);
82 void resetCollisionEntries(KCLTypeMask *ptr);
87 void setCurrentCollisionVariant(
u16 attribute) {
88 ASSERT(m_collisionEntryCount > 0);
89 m_entries[m_collisionEntryCount - 1].setVariant(attribute);
93 void setCurrentCollisionTrickable(
bool trickable) {
94 ASSERT(m_collisionEntryCount > 0);
95 CollisionEntry &entry = m_entries[m_collisionEntryCount - 1];
96 entry.attribute.changeBit(trickable, eCollisionAttribute::Trickable);
102 [[nodiscard]]
const CollisionEntry *closestCollisionEntry()
const {
103 return m_closestCollisionEntry;
107 static CollisionDirector *CreateInstance();
108 static void DestroyInstance();
110 [[nodiscard]]
static CollisionDirector *Instance() {
116 ~CollisionDirector()
override;
118 const CollisionEntry *m_closestCollisionEntry;
119 std::array<CollisionEntry, COLLISION_ARR_LENGTH> m_entries;
120 size_t m_collisionEntryCount;
122 static CollisionDirector *s_instance;
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.
Contexts can be used to restore a previous memory state for the current session.