49class KartCollide : KartObjectProxy {
58 GroundBoostPanelOrRamp = 7,
61 StopHalfPipeState = 16,
73 void FUN_805B72B8(f32 param_1, f32 param_2,
bool lockXZ,
bool addExtVelY);
76 void calcFloorEffect();
77 void calcTriggers(Field::KCLTypeMask *mask,
const EGG::Vector3f &pos,
bool twoPoint);
78 void handleTriggers(Field::KCLTypeMask *mask);
79 void calcFallBoundary(Field::KCLTypeMask *mask,
bool shortBoundary);
80 void calcBeforeRespawn();
81 void activateOob(
bool detachCamera, Field::KCLTypeMask *mask,
bool somethingCPU,
82 bool somethingBullet);
87 void calcBoundingRadius();
88 void calcObjectCollision();
92 Field::KCLTypeMask *maskOut);
94 Field::KCLTypeMask *maskOut);
95 void processMovingWater(
CollisionData &collisionData, Field::KCLTypeMask *maskOut);
96 [[nodiscard]]
bool processWall(
CollisionData &collisionData, Field::KCLTypeMask *maskOut);
98 Field::KCLTypeMask *maskOut,
bool wheel);
103 bool b1,
bool b2,
bool b3);
111 void startFloorMomentRate();
112 void calcFloorMomentRate();
116 Action handleReactWallAllSpeed(
size_t idx);
117 Action handleReactSpinAllSpeed(
size_t idx);
118 Action handleReactSpinSomeSpeed(
size_t idx);
119 Action handleReactFireSpin(
size_t idx);
120 Action handleReactSmallLaunch(
size_t idx);
121 Action handleReactKnockbackSomeSpeedLoseItem(
size_t idx);
122 Action handleReactLaunchSpinLoseItem(
size_t idx);
123 Action handleReactKnockbackBumpLoseItem(
size_t idx);
124 Action handleReactLongCrushLoseItem(
size_t idx);
125 Action handleReactSmallBump(
size_t idx);
126 Action handleReactSpinShrink(
size_t idx);
127 Action handleReactHighLaunchLoseItem(
size_t idx);
128 Action handleReactWeakWall(
size_t idx);
129 Action handleReactOffroad(
size_t idx);
130 Action handleReactLaunchSpin(
size_t idx);
131 Action handleReactWallSpark(
size_t idx);
132 Action handleReactRubberWall(
size_t idx);
133 Action handleReactUntrickableJumpPad(
size_t idx);
134 Action handleReactShortCrushLoseItem(
size_t idx);
135 Action handleReactCrushRespawn(
size_t idx);
136 Action handleReactExplosionLoseItem(
size_t idx);
142 collisionData.relPos = relPos;
143 collisionData.vel = vel;
144 collisionData.floorNrm = floorNrm;
145 collisionData.
bFloor =
true;
151 void setMovement(
const EGG::Vector3f &v) {
155 void setWorldInertiaTensor(
const EGG::Matrix34f &worldInertiaTensor) {
161 [[nodiscard]] KartPullPath &pullPath() {
165 [[nodiscard]]
const KartPullPath &pullPath()
const {
169 [[nodiscard]] f32 boundingRadius()
const {
170 return m_boundingRadius;
173 [[nodiscard]] f32 floorMomentRate()
const {
174 return m_floorMomentRate;
177 [[nodiscard]]
const SurfaceFlags &surfaceFlags()
const {
178 return m_surfaceFlags;
181 [[nodiscard]]
const EGG::Vector3f &tangentOff()
const {
185 [[nodiscard]]
const EGG::Vector3f &movement()
const {
189 [[nodiscard]] f32 sumHitboxBottomHeightSoftWall()
const {
190 return m_sumHitboxBottomHeightSoftWall;
193 [[nodiscard]] u16 numSoftWallCollisions()
const {
194 return m_numSoftWallCollisions;
197 [[nodiscard]] f32 sumHitboxBottomHeightFloorOnly()
const {
198 return m_sumHitboxBottomHeightFloorOnly;
201 [[nodiscard]] u16 numFloorOnlyCollisions()
const {
202 return m_numFloorOnlyCollisions;
205 [[nodiscard]] f32 colPerpendicularity()
const {
206 return m_colPerpendicularity;
211 typedef Action (KartCollide::*ObjectCollisionHandler)(
size_t idx);
213 KartPullPath m_pullPath;
214 f32 m_boundingRadius;
215 f32 m_floorMomentRate;
216 EGG::Vector3f m_totalReactionWallNrm;
217 SurfaceFlags m_surfaceFlags;
218 EGG::Vector3f m_tangentOff;
219 EGG::Vector3f m_movement;
224 f32 m_sumHitboxBottomHeightSoftWall;
225 u16 m_numSoftWallCollisions;
226 f32 m_sumHitboxBottomHeightFloorOnly;
227 u16 m_numFloorOnlyCollisions;
228 s16 m_poleAngVelTimer;
230 f32 m_colPerpendicularity;
237 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.