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

#include <ObjectCow.hh>

Description

A cow that follows a leader by sharing the same rail.

Definition at line 113 of file ObjectCow.hh.

Inheritance diagram for Field::ObjectCowFollower:

Public Member Functions

 ObjectCowFollower (const System::MapdataGeoObj &params, const EGG::Vector3f &pos, f32 rot)
 
void init () override
 
void calc () override
 
u32 loadFlags () const override
 
void loadRail () override
 
- Public Member Functions inherited from Field::ObjectCow
 ObjectCow (const System::MapdataGeoObj &params)
 
Kart::Reaction onCollision (Kart::KartObject *kartObj, Kart::Reaction reactionOnKart, Kart::Reaction reactionOnObj, EGG::Vector3f &hitDepth) override
 
- 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
 
void calcCollisionTransform () 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 calcModel ()
 
virtual const char * getResources () const
 
virtual void loadGraphics ()
 
virtual void loadAnims ()
 
virtual const char * getName () const
 
virtual const char * getKclName () const
 
virtual void resize (f32 radius, f32 maxSpeed)
 
virtual void disableCollision () const
 
virtual void enableCollision () 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
 
- Public Member Functions inherited from Field::StateManager< ObjectCowFollower >
 StateManager (ObjectCowFollower *obj)
 
- Public Member Functions inherited from Field::StateManagerBase< ObjectCowFollower >

Private Member Functions

void enterWait ()
 
void enterFreeRoam ()
 
void enterFollowLeader ()
 
void calcWait ()
 
void calcFreeRoam ()
 
void calcFollowLeader ()
 

Private Attributes

const EGG::Vector3f m_posOffset
 
RailInterpolatorm_rail
 
u16 m_waitFrames
 Number of frames the cow will stand still for.
 
f32 m_topSpeed
 The speed the cow will accelerate up to.
 
bool m_bStopping
 Set when the cow is coming to a stop.
 
f32 m_railSegThreshold
 The rail segmentT at which a cow will change to state 2.
 

Static Private Attributes

static constexpr f32 BASE_TOP_SPEED = 2.0f
 
static constexpr f32 TOP_SPEED_VARIANCE = 4.0f - 2.0f
 
static constexpr f32 DIST_THRESHOLD = 200.0f
 Distance at which a cow is considered close enough to the rail to stop moving.
 

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::ObjectCow
virtual void calcFloor ()
 
void setup ()
 
void calcPos ()
 
f32 setTarget (const EGG::Vector3f &v)
 
- 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 linkAnims (const std::span< const char * > &names, const std::span< Render::AnmType > types)
 
void setMatrixTangentTo (const EGG::Vector3f &up, const EGG::Vector3f &tangent)
 
- Static Protected Member Functions inherited from Field::ObjectCow
static EGG::Vector3f Interpolate (f32 t, const EGG::Vector3f &v0, const EGG::Vector3f &v1)
 
- 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 Interpolate (f32 t, const EGG::Vector3f &v0, const EGG::Vector3f &v1)
 
- Protected Attributes inherited from Field::ObjectCow
u32 m_startFrame
 The frame the cow will start moving.
 
EGG::Vector3f m_tangent
 
EGG::Vector3f m_prevTangent
 
EGG::Vector3f m_up
 
EGG::Vector3f m_velocity
 
f32 m_xzSpeed
 XZ plane length of m_velocity.
 
f32 m_tangentFactor
 
EGG::Vector3f m_floorNrm
 
EGG::Vector3f m_state1TargetPos
 Calculated in enterState1.
 
EGG::Vector3f m_targetDir
 
EGG::Vector3f m_upForce
 Used by calcPos to counteract gravity.
 
f32 m_interpRate
 
- 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_rot
 
EGG::Vector3f m_scale
 
EGG::Matrix34f m_transform
 
const System::MapdataGeoObjm_mapObj
 
- Protected Attributes inherited from Field::StateManagerBase< ObjectCowFollower >
u16 m_currentStateId
 
s32 m_nextStateId
 
u32 m_currentFrame
 
std::span< u16m_entryIds
 
std::span< const StateManagerEntry< ObjectCowFollower > > m_entries
 
const ObjectCowFollowerm_obj
 
- Static Protected Attributes inherited from Field::ObjectCow
static constexpr EGG::Vector3f GRAVITY_FORCE = EGG::Vector3f(0.0f, 2.0f, 0.0f)
 

Constructor & Destructor Documentation

◆ ObjectCowFollower()

Field::ObjectCowFollower::ObjectCowFollower ( const System::MapdataGeoObj & params,
const EGG::Vector3f & pos,
f32 rot )
0x806BDD48

Definition at line 294 of file ObjectCow.cc.

Member Function Documentation

◆ calc()

void Field::ObjectCowFollower::calc ( )
overridevirtual0x806BE1A8

Reimplemented from Field::ObjectBase.

Definition at line 323 of file ObjectCow.cc.

◆ calcFollowLeader()

void Field::ObjectCowFollower::calcFollowLeader ( )
private0x806BE9CC

Definition at line 459 of file ObjectCow.cc.

◆ calcFreeRoam()

void Field::ObjectCowFollower::calcFreeRoam ( )
private0x806BE794

Definition at line 435 of file ObjectCow.cc.

◆ calcWait()

void Field::ObjectCowFollower::calcWait ( )
private0x806BE580

Definition at line 424 of file ObjectCow.cc.

◆ enterFollowLeader()

void Field::ObjectCowFollower::enterFollowLeader ( )
private0x806BE930

Definition at line 415 of file ObjectCow.cc.

◆ enterFreeRoam()

void Field::ObjectCowFollower::enterFreeRoam ( )
private0x806BE62C

Definition at line 388 of file ObjectCow.cc.

◆ enterWait()

void Field::ObjectCowFollower::enterWait ( )
private0x806BE4E8

Definition at line 376 of file ObjectCow.cc.

◆ init()

void Field::ObjectCowFollower::init ( )
overridevirtual0x806BE060

Reimplemented from Field::ObjectBase.

Definition at line 306 of file ObjectCow.cc.

◆ loadFlags()

u32 Field::ObjectCowFollower::loadFlags ( ) const
inlinenodiscardoverridevirtual0x806BF424

Reimplemented from Field::ObjectBase.

Definition at line 125 of file ObjectCow.hh.

◆ loadRail()

void Field::ObjectCowFollower::loadRail ( )
inlineoverridevirtual0x806BF420

Reimplemented from Field::ObjectBase.

Definition at line 130 of file ObjectCow.hh.

Member Data Documentation

◆ BASE_TOP_SPEED

f32 Field::ObjectCowFollower::BASE_TOP_SPEED = 2.0f
staticconstexprprivate

Definition at line 148 of file ObjectCow.hh.

◆ DIST_THRESHOLD

f32 Field::ObjectCowFollower::DIST_THRESHOLD = 200.0f
staticconstexprprivate

Distance at which a cow is considered close enough to the rail to stop moving.

Definition at line 152 of file ObjectCow.hh.

◆ m_bStopping

bool Field::ObjectCowFollower::m_bStopping
private

Set when the cow is coming to a stop.

Definition at line 145 of file ObjectCow.hh.

◆ m_posOffset

const EGG::Vector3f Field::ObjectCowFollower::m_posOffset
private

Definition at line 141 of file ObjectCow.hh.

◆ m_rail

RailInterpolator* Field::ObjectCowFollower::m_rail
private

Definition at line 142 of file ObjectCow.hh.

◆ m_railSegThreshold

f32 Field::ObjectCowFollower::m_railSegThreshold
private

The rail segmentT at which a cow will change to state 2.

Definition at line 146 of file ObjectCow.hh.

◆ m_topSpeed

f32 Field::ObjectCowFollower::m_topSpeed
private

The speed the cow will accelerate up to.

Definition at line 144 of file ObjectCow.hh.

◆ m_waitFrames

u16 Field::ObjectCowFollower::m_waitFrames
private

Number of frames the cow will stand still for.

Definition at line 143 of file ObjectCow.hh.

◆ TOP_SPEED_VARIANCE

f32 Field::ObjectCowFollower::TOP_SPEED_VARIANCE = 4.0f - 2.0f
staticconstexprprivate

Definition at line 149 of file ObjectCow.hh.