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

#include <ObjectDossun.hh>

Description

Base class for the various different Thwomp types in the game.

On initialization, the game pre-calculates how many frames it takes for the Thwomp to stomp down and hit the floor. If a Thwomp is positioned such that there is no floor beneath it, then the init function will be stuck in an infinite loop, causing the race to never start.

Definition at line 11 of file ObjectDossun.hh.

Inheritance diagram for Field::ObjectDossun:

Public Member Functions

 ObjectDossun (const System::MapdataGeoObj &params)
 
void init () override
 
u32 loadFlags () const override
 
void calcCollisionTransform () override
 
Kart::Reaction onCollision (Kart::KartObject *kartObj, Kart::Reaction reactionOnKart, Kart::Reaction reactionOnObj, EGG::Vector3f &hitDepth) override
 
void initState ()
 
void calcStomp ()
 
virtual void startStill ()
 
void startGrounded ()
 
- Public Member Functions inherited from Field::ObjectCollidable
 ObjectCollidable (const System::MapdataGeoObj &params)
 
 ObjectCollidable (const char *name, const EGG::Vector3f &pos, const EGG::Vector3f &rot, const EGG::Vector3f &scale)
 
void load () override
 
f32 getCollisionRadius () const override
 Finds the radius that fits fully in a BoxColUnit.
 
virtual void loadAABB (f32 maxSpeed)
 
virtual void loadAABB (f32 radius, f32 maxSpeed)
 
virtual void processKartReactions (Kart::KartObject *kartObj, Kart::Reaction &reactionOnKart, Kart::Reaction &reactionOnObj)
 
virtual void onWallCollision (Kart::KartObject *, const EGG::Vector3f &)
 
virtual void onObjectCollision (Kart::KartObject *)
 
virtual bool checkCollision (ObjectCollisionBase *lhs, EGG::Vector3f &dist)
 
virtual const EGG::Vector3fgetCollisionTranslation () const
 
virtual ObjectCollisionBasecollision () const
 
- Public Member Functions inherited from Field::ObjectBase
 ObjectBase (const System::MapdataGeoObj &params)
 
 ObjectBase (const char *name, const EGG::Vector3f &pos, const EGG::Vector3f &rot, const EGG::Vector3f &scale)
 
virtual void calc ()
 
virtual void calcModel ()
 
virtual const char * getResources () const
 
virtual void loadGraphics ()
 
virtual void loadAnims ()
 
virtual void loadRail ()
 
virtual const char * getName () const
 
virtual const char * getKclName () const
 
virtual void resize (f32 radius, f32 maxSpeed)
 
virtual void unregisterCollision ()
 
virtual void disableCollision () const
 
virtual void enableCollision () const
 
virtual const BoxColUnitgetUnit () const
 
const RailInterpolatorrailInterpolator () const
 
virtual const EGG::Vector3fgetPosition () const
 
virtual ObjectId id () const
 
const EGG::Vector3fpos () const
 
void setPos (const EGG::Vector3f &pos)
 
void setScale (const EGG::Vector3f &scale)
 
void setTransform (const EGG::Matrix34f &mat)
 
const EGG::Vector3fscale () const
 

Protected Types

enum class  AnmState {
  Still = 0 ,
  BeforeFall = 1 ,
  Falling = 2 ,
  Grounded = 3 ,
  Rising = 4
}
 Represents the current movement state of the Thwomp in terms of its stomp. More...
 
enum class  StompState {
  Inactive = 0 ,
  Active = 1
}
 

Protected Attributes

StompState m_stompState
 
AnmState m_anmState
 
s32 m_beforeFallTimer
 Number of frames until the Thwomp will stomp down.
 
s32 m_stillTimer
 Number of frames the Thwomp will remain stationary (or shakes)
 
s32 m_groundedTimer
 Number of frames the Thwomp remains on the ground.
 
s32 m_shakePhase
 Causes the Thwomp's position to shake at the end of the "still" state.
 
f32 m_vel
 Vector3f in the base game, but only the y-component is used.
 
f32 m_initialPosY
 
u32 m_fullDuration
 Framecount of an entire animation loop.
 
s32 m_cycleTimer
 
f32 m_currRot
 
bool m_touchingGround
 
- Protected Attributes inherited from Field::ObjectCollidable
ObjectCollisionBasem_collision
 
- Protected Attributes inherited from Field::ObjectBase
Render::DrawMdlm_drawMdl
 
Abstract::g3d::ResFilem_resFile
 
ObjectId m_id
 
RailInterpolatorm_railInterpolator
 
BoxColUnitm_boxColUnit
 
Flags m_flags
 
EGG::Vector3f m_pos
 
EGG::Vector3f m_scale
 
EGG::Vector3f m_rot
 
bool m_rotLock
 
EGG::Matrix34f m_transform
 
const System::MapdataGeoObjm_mapObj
 

Static Protected Attributes

static constexpr u32 BEFORE_FALL_DURATION = 10
 The total number of frames the thwomp rises before crashing down.
 

Private Member Functions

void calcBeforeFall ()
 
void calcFalling ()
 
void calcGrounded ()
 
void calcRising ()
 
void checkFloorCollision ()
 

Static Private Attributes

static constexpr u32 GROUND_DURATION = 60
 
static constexpr u32 STOMP_ACCEL = 17.0f
 
static constexpr f32 STOMP_RADIUS = 20.0f
 
static constexpr EGG::Vector3f STOMP_POS_OFFSET = EGG::Vector3f(0.0f, STOMP_RADIUS, 0.0f)
 
static constexpr f32 RISING_VEL = 10.0f
 

Additional Inherited Members

- Public Types inherited from Field::ObjectBase
enum class  eFlags {
  Position = 0 ,
  Rotation = 1 ,
  Matrix = 2 ,
  Scale = 3
}
 
typedef EGG::TBitFlag< u16, eFlags > Flags
 
- Protected Member Functions inherited from Field::ObjectCollidable
void createCollision () override
 
virtual const EGG::Vector3fcollisionCenter () const
 
void registerManagedObject ()
 
- Protected Member Functions inherited from Field::ObjectBase
void calcTransform ()
 
void calcRotLock ()
 
void linkAnims (const std::span< const char * > &names, const std::span< Render::AnmType > types)
 
void setMatrixTangentTo (const EGG::Vector3f &up, const EGG::Vector3f &tangent)
 
void setMatrixFromOrthonormalBasisAndPos (const EGG::Vector3f &v)
 
- Static Protected Member Functions inherited from Field::ObjectBase
static f32 CheckPointAgainstLineSegment (const EGG::Vector3f &point, const EGG::Vector3f &a, const EGG::Vector3f &b)
 Calculates on what side of line segment ab point lies.
 
static EGG::Vector3f RotateXZByYaw (f32 angle, const EGG::Vector3f &v)
 Rotates a vector around the Y-axis and returns the XZ-plane portion of the vector.
 
static EGG::Vector3f RotateAxisAngle (f32 angle, const EGG::Vector3f &axis, const EGG::Vector3f &v1)
 
static void SetRotTangentHorizontal (EGG::Matrix34f &mat, const EGG::Vector3f &up, const EGG::Vector3f &tangent)
 
static EGG::Matrix34f OrthonormalBasis (const EGG::Vector3f &v)
 
static EGG::Matrix34f RailOrthonormalBasis (const RailInterpolator &railInterpolator)
 
static EGG::Vector3f AdjustVecForward (f32 sidewaysScalar, f32 forwardScalar, f32 minSpeed, const EGG::Vector3f &src, EGG::Vector3f forward)
 
static f32 CalcParabolicDisplacement (f32 initVel, f32 accel, u32 frame)
 Solves the standard kinematic equation \(y(t) = v_0\, t - \frac{1}{2} a t^{2}\).
 
static EGG::Vector3f Interpolate (f32 t, const EGG::Vector3f &v0, const EGG::Vector3f &v1)
 

Member Enumeration Documentation

◆ AnmState

enum class Field::ObjectDossun::AnmState
strongprotected

Represents the current movement state of the Thwomp in terms of its stomp.

Enumerator
BeforeFall 

The quick upwards motion before slamming down.

Falling 

Slamming down.

Grounded 

Contacting the floor.

Rising 

Resetting.

Definition at line 46 of file ObjectDossun.hh.

◆ StompState

enum class Field::ObjectDossun::StompState
strongprotected

Definition at line 54 of file ObjectDossun.hh.

Constructor & Destructor Documentation

◆ ObjectDossun()

Field::ObjectDossun::ObjectDossun ( const System::MapdataGeoObj & params)
0x80764510

Definition at line 11 of file ObjectDossun.cc.

Member Function Documentation

◆ calcBeforeFall()

void Field::ObjectDossun::calcBeforeFall ( )
private0x8075F3F4

Definition at line 153 of file ObjectDossun.cc.

◆ calcCollisionTransform()

void Field::ObjectDossun::calcCollisionTransform ( )
overridevirtual0x807648A4

Reimplemented from Field::ObjectCollidable.

Definition at line 84 of file ObjectDossun.cc.

◆ calcFalling()

void Field::ObjectDossun::calcFalling ( )
private0x8075F430

Definition at line 165 of file ObjectDossun.cc.

◆ calcGrounded()

void Field::ObjectDossun::calcGrounded ( )
inlineprivate0x8075F460

Definition at line 80 of file ObjectDossun.hh.

◆ calcRising()

void Field::ObjectDossun::calcRising ( )
inlineprivate0x8075F4D8

Definition at line 87 of file ObjectDossun.hh.

◆ calcStomp()

void Field::ObjectDossun::calcStomp ( )
0x8075F254

Definition at line 129 of file ObjectDossun.cc.

◆ checkFloorCollision()

void Field::ObjectDossun::checkFloorCollision ( )
private0x8075F76C

Definition at line 174 of file ObjectDossun.cc.

◆ init()

void Field::ObjectDossun::init ( )
overridevirtual0x8075EEA8

Reimplemented from Field::ObjectBase.

Definition at line 18 of file ObjectDossun.cc.

◆ initState()

void Field::ObjectDossun::initState ( )
0x8075F21C

Definition at line 117 of file ObjectDossun.cc.

◆ loadFlags()

u32 Field::ObjectDossun::loadFlags ( ) const
inlinenodiscardoverridevirtual

Reimplemented from Field::ObjectBase.

Definition at line 18 of file ObjectDossun.hh.

◆ onCollision()

Kart::Reaction Field::ObjectDossun::onCollision ( Kart::KartObject * kartObj,
Kart::Reaction reactionOnKart,
Kart::Reaction reactionOnObj,
EGG::Vector3f & hitDepth )
overridevirtual0x8075FF98

Reimplemented from Field::ObjectCollidable.

Definition at line 100 of file ObjectDossun.cc.

◆ startGrounded()

void Field::ObjectDossun::startGrounded ( )
inline0x8075FE8C

Definition at line 39 of file ObjectDossun.hh.

◆ startStill()

virtual void Field::ObjectDossun::startStill ( )
inlinevirtual0x8075FB50

Definition at line 30 of file ObjectDossun.hh.

Member Data Documentation

◆ BEFORE_FALL_DURATION

u32 Field::ObjectDossun::BEFORE_FALL_DURATION = 10
staticconstexprprotected

The total number of frames the thwomp rises before crashing down.

Definition at line 73 of file ObjectDossun.hh.

◆ GROUND_DURATION

u32 Field::ObjectDossun::GROUND_DURATION = 60
staticconstexprprivate

Definition at line 94 of file ObjectDossun.hh.

◆ m_anmState

AnmState Field::ObjectDossun::m_anmState
protected

Definition at line 60 of file ObjectDossun.hh.

◆ m_beforeFallTimer

s32 Field::ObjectDossun::m_beforeFallTimer
protected

Number of frames until the Thwomp will stomp down.

Definition at line 61 of file ObjectDossun.hh.

◆ m_currRot

f32 Field::ObjectDossun::m_currRot
protected

Definition at line 69 of file ObjectDossun.hh.

◆ m_cycleTimer

s32 Field::ObjectDossun::m_cycleTimer
protected

Definition at line 68 of file ObjectDossun.hh.

◆ m_fullDuration

u32 Field::ObjectDossun::m_fullDuration
protected

Framecount of an entire animation loop.

Definition at line 67 of file ObjectDossun.hh.

◆ m_groundedTimer

s32 Field::ObjectDossun::m_groundedTimer
protected

Number of frames the Thwomp remains on the ground.

Definition at line 63 of file ObjectDossun.hh.

◆ m_initialPosY

f32 Field::ObjectDossun::m_initialPosY
protected

Definition at line 66 of file ObjectDossun.hh.

◆ m_shakePhase

s32 Field::ObjectDossun::m_shakePhase
protected

Causes the Thwomp's position to shake at the end of the "still" state.

Definition at line 64 of file ObjectDossun.hh.

◆ m_stillTimer

s32 Field::ObjectDossun::m_stillTimer
protected

Number of frames the Thwomp will remain stationary (or shakes)

Definition at line 62 of file ObjectDossun.hh.

◆ m_stompState

StompState Field::ObjectDossun::m_stompState
protected

Definition at line 59 of file ObjectDossun.hh.

◆ m_touchingGround

bool Field::ObjectDossun::m_touchingGround
protected

Definition at line 70 of file ObjectDossun.hh.

◆ m_vel

f32 Field::ObjectDossun::m_vel
protected

Vector3f in the base game, but only the y-component is used.

Definition at line 65 of file ObjectDossun.hh.

◆ RISING_VEL

f32 Field::ObjectDossun::RISING_VEL = 10.0f
staticconstexprprivate

Definition at line 98 of file ObjectDossun.hh.

◆ STOMP_ACCEL

u32 Field::ObjectDossun::STOMP_ACCEL = 17.0f
staticconstexprprivate

Definition at line 95 of file ObjectDossun.hh.

◆ STOMP_POS_OFFSET

EGG::Vector3f Field::ObjectDossun::STOMP_POS_OFFSET = EGG::Vector3f(0.0f, STOMP_RADIUS, 0.0f)
staticconstexprprivate

Definition at line 97 of file ObjectDossun.hh.

◆ STOMP_RADIUS

f32 Field::ObjectDossun::STOMP_RADIUS = 20.0f
staticconstexprprivate

Definition at line 96 of file ObjectDossun.hh.