58 GroundBoostPanelOrRamp = 7,
61 StopHalfPipeState = 16,
75 void FUN_805B72B8(f32 param_1, f32 param_2,
bool lockXZ,
bool addExtVelY);
78 void calcFloorEffect();
79 void calcTriggers(Field::KCLTypeMask *mask,
const EGG::Vector3f &pos,
bool twoPoint);
80 void handleTriggers(Field::KCLTypeMask *mask);
81 void calcFallBoundary(Field::KCLTypeMask *mask,
bool shortBoundary);
82 void calcBeforeRespawn();
83 void activateOob(
bool detachCamera, Field::KCLTypeMask *mask,
bool somethingCPU,
84 bool somethingBullet);
89 void calcBoundingRadius();
90 void calcObjectCollision();
94 Field::KCLTypeMask *maskOut);
96 Field::KCLTypeMask *maskOut);
97 void processMovingWater(
CollisionData &collisionData, Field::KCLTypeMask *maskOut);
98 [[nodiscard]]
bool processWall(
CollisionData &collisionData, Field::KCLTypeMask *maskOut);
100 Field::KCLTypeMask *maskOut,
bool wheel);
105 bool b1,
bool b2,
bool b3);
113 void startFloorMomentRate();
114 void calcFloorMomentRate();
118 Action handleReactWallAllSpeed(
size_t idx);
119 Action handleReactSpinAllSpeed(
size_t idx);
120 Action handleReactSpinSomeSpeed(
size_t idx);
121 Action handleReactFireSpin(
size_t idx);
122 Action handleReactSmallLaunch(
size_t idx);
123 Action handleReactKnockbackSomeSpeedLoseItem(
size_t idx);
124 Action handleReactLaunchSpinLoseItem(
size_t idx);
125 Action handleReactKnockbackBumpLoseItem(
size_t idx);
126 Action handleReactLongCrushLoseItem(
size_t idx);
127 Action handleReactSmallBump(
size_t idx);
128 Action handleReactSpinShrink(
size_t idx);
129 Action handleReactHighLaunchLoseItem(
size_t idx);
130 Action handleReactWeakWall(
size_t idx);
131 Action handleReactOffroad(
size_t idx);
132 Action handleReactLaunchSpin(
size_t idx);
133 Action handleReactWallSpark(
size_t idx);
134 Action handleReactRubberWall(
size_t idx);
135 Action handleReactUntrickableJumpPad(
size_t idx);
136 Action handleReactShortCrushLoseItem(
size_t idx);
137 Action handleReactCrushRespawn(
size_t idx);
138 Action handleReactExplosionLoseItem(
size_t idx);
144 collisionData.relPos = relPos;
145 collisionData.vel = vel;
146 collisionData.floorNrm = floorNrm;
147 collisionData.
bFloor =
true;
159 [[nodiscard]] KartPullPath &pullPath() {
163 [[nodiscard]]
const KartPullPath &pullPath()
const {
167 [[nodiscard]] f32 boundingRadius()
const {
168 return m_boundingRadius;
171 [[nodiscard]] f32 floorMomentRate()
const {
172 return m_floorMomentRate;
175 [[nodiscard]]
const SurfaceFlags &surfaceFlags()
const {
176 return m_surfaceFlags;
187 [[nodiscard]] f32 suspBottomHeightSoftWall()
const {
188 return m_suspBottomHeightSoftWall;
191 [[nodiscard]]
u16 someSoftWallTimer()
const {
192 return m_someSoftWallTimer;
195 [[nodiscard]] f32 suspBottomHeightNonSoftWall()
const {
196 return m_suspBottomHeightNonSoftWall;
199 [[nodiscard]]
u16 someNonSoftWallTimer()
const {
200 return m_someNonSoftWallTimer;
203 [[nodiscard]] f32 colPerpendicularity()
const {
204 return m_colPerpendicularity;
209 typedef Action (KartCollide::*ObjectCollisionHandler)(
size_t idx);
211 KartPullPath m_pullPath;
212 f32 m_boundingRadius;
213 f32 m_floorMomentRate;
215 SurfaceFlags m_surfaceFlags;
222 f32 m_suspBottomHeightSoftWall;
223 u16 m_someSoftWallTimer;
224 f32 m_suspBottomHeightNonSoftWall;
225 u16 m_someNonSoftWallTimer;
226 s16 m_poleAngVelTimer;
228 f32 m_colPerpendicularity;
230 static std::array<ObjectCollisionHandler, 33> s_objectCollisionHandlers;
void applySomeFloorMoment(f32 down, f32 rate, CollisionGroup *hitboxGroup, const EGG::Vector3f &forward, const EGG::Vector3f &nextDir, const EGG::Vector3f &speed, bool b1, bool b2, bool b3)
Applies external and angular velocity based on the collision with the floor.
bool FUN_805B6A9C(CollisionData &collisionData, const Hitbox &hitbox, EGG::BoundBox3f &minMax, EGG::Vector3f &relPos, s32 &count, const Field::KCLTypeMask &maskOut, const Field::CollisionInfo &colInfo)
Called on collision of a new KCL type??? This only happens after airtime so far.