40 u16 baseType()
const {
41 return attribute & 0x1F;
45 return (attribute >> 5) & 7;
48 u16 intensity()
const {
49 return (attribute >> 11) & 3;
52 void setVariant(
u16 variant) {
53 u16 current =
static_cast<u16>(attribute);
63 [[nodiscard]]
bool checkSphereFullPush(f32 radius,
const EGG::Vector3f &v0,
67 [[nodiscard]]
bool checkSphereCachedPartial(f32 radius,
const EGG::Vector3f &pos,
70 [[nodiscard]]
bool checkSphereCachedPartialPush(f32 radius,
const EGG::Vector3f &pos,
73 [[nodiscard]]
bool checkSphereCachedFullPush(f32 radius,
const EGG::Vector3f &pos,
82 void setCurrentCollisionVariant(
u16 attribute) {
83 ASSERT(m_collisionEntryCount > 0);
84 m_entries[m_collisionEntryCount - 1].setVariant(attribute);
88 void setCurrentCollisionTrickable(
bool trickable) {
89 ASSERT(m_collisionEntryCount > 0);
90 CollisionEntry &entry = m_entries[m_collisionEntryCount - 1];
91 entry.attribute.changeBit(trickable, eCollisionAttribute::Trickable);
97 [[nodiscard]]
const CollisionEntry *closestCollisionEntry()
const {
98 return m_closestCollisionEntry;
102 static CollisionDirector *CreateInstance();
103 static void DestroyInstance();
105 [[nodiscard]]
static CollisionDirector *Instance() {
111 ~CollisionDirector()
override;
113 const CollisionEntry *m_closestCollisionEntry;
114 std::array<CollisionEntry, COLLISION_ARR_LENGTH> m_entries;
115 size_t m_collisionEntryCount;
117 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.