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

Description

Definition at line 144 of file ObjectHanachan.hh.

Inheritance diagram for Field::ObjectHanachan:

Public Member Functions

 ObjectHanachan (const System::MapdataGeoObj &params)
 
void init () override
 
void calc () override
 
u32 loadFlags () const override
 
void loadGraphics () override
 
void createCollision () 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 Kart::Reaction onCollision (Kart::KartObject *, Kart::Reaction reactionOnKart, Kart::Reaction, EGG::Vector3f &)
 
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 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
 

Private Types

enum class  RailAlignment {
  Aligned = -1 ,
  Unknown = 0 ,
  MisalignedLeft = 1 ,
  MisalignedRight = 2
}
 

Private Member Functions

void initWalk ()
 
void initWait ()
 
void calcWalk ()
 
void calcWait ()
 
void onSegmentEnd ()
 
void calcRail ()
 
void calcBody ()
 
void initBody ()
 
void initChain ()
 
void clearChain ()
 
void calcRailAlignmentMotion ()
 If the wiggler has moved out of alignment of the rail, then applies a lateral adjustment to the wiggler's body part segments.
 
void calcSlowMotion ()
 
void calcFastMotion (s32 frame)
 
void calcLateralMotion (f32 amplitude, f32 period, f32 wavelength, s16 frame)
 
RailAlignment calcRailAlignment () const
 
bool shouldStartMoving () const
 
void setMovingVel ()
 
ObjectHanachanHead *& headPart ()
 
std::span< ObjectHanachanPart * > bodyParts ()
 

Private Attributes

std::array< ObjectHanachanPart *, 7 > m_parts
 
HanachanChainManager m_chain
 
const f32 m_movingVel
 
std::array< float, 7 > m_partDisplacement
 Total distance between a given part and the head.
 
u16 m_stillDuration
 
f32 m_stillAngVel
 Affects body part swaying when coming to a standstill.
 
bool m_still
 
u16 m_leftMisalignFrame
 Frame at which the wiggler became left-misaligned from the rail.
 
EGG::Vector3f m_right
 
RailAlignment m_railAlignment
 Captures when the wiggle takes sharp turns.
 
RailAlignment m_prevRailAlignment
 

Static Private Attributes

static constexpr std::array< f32, 6 > BODY_PART_DISTANCES
 The distance between each body part link in the chain.
 
static constexpr std::array< StateManagerEntry, 2 > STATE_ENTRIES
 

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
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)
 
- Protected Member Functions inherited from Field::StateManager
 StateManager (void *obj, const std::span< const StateManagerEntry > &entries)
 
void calc ()
 
- 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)
 
- 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
 
- Protected Attributes inherited from Field::StateManager
u16 m_currentStateId
 
s32 m_nextStateId
 
u32 m_currentFrame
 
std::span< u16m_entryIds
 
std::span< const StateManagerEntrym_entries
 
void * m_obj
 

Member Enumeration Documentation

◆ RailAlignment

enum class Field::ObjectHanachan::RailAlignment
strongprivate

Definition at line 170 of file ObjectHanachan.hh.

Constructor & Destructor Documentation

◆ ObjectHanachan()

Field::ObjectHanachan::ObjectHanachan ( const System::MapdataGeoObj & params)
0x806C8A5C

Definition at line 120 of file ObjectHanachan.cc.

Member Function Documentation

◆ bodyParts()

std::span< ObjectHanachanPart * > Field::ObjectHanachan::bodyParts ( )
inlinenodiscardprivate

Definition at line 227 of file ObjectHanachan.hh.

◆ calc()

void Field::ObjectHanachan::calc ( )
inlineoverridevirtual0x806C9860

Reimplemented from Field::ObjectBase.

Definition at line 152 of file ObjectHanachan.hh.

◆ calcBody()

void Field::ObjectHanachan::calcBody ( )
private0x806CA2F0

Definition at line 247 of file ObjectHanachan.cc.

◆ calcFastMotion()

void Field::ObjectHanachan::calcFastMotion ( s32 frame)
inlineprivate0x806CAC94

Definition at line 202 of file ObjectHanachan.hh.

◆ calcLateralMotion()

void Field::ObjectHanachan::calcLateralMotion ( f32 amplitude,
f32 period,
f32 wavelength,
s16 frame )
private0x806CACD0

Definition at line 313 of file ObjectHanachan.cc.

◆ calcRail()

void Field::ObjectHanachan::calcRail ( )
private0x806CA27C

Definition at line 238 of file ObjectHanachan.cc.

◆ calcRailAlignment()

ObjectHanachan::RailAlignment Field::ObjectHanachan::calcRailAlignment ( ) const
nodiscardprivate0x806CAFB8

Definition at line 330 of file ObjectHanachan.cc.

◆ calcRailAlignmentMotion()

void Field::ObjectHanachan::calcRailAlignmentMotion ( )
private0x806CAB5C

If the wiggler has moved out of alignment of the rail, then applies a lateral adjustment to the wiggler's body part segments.

Definition at line 293 of file ObjectHanachan.cc.

◆ calcSlowMotion()

void Field::ObjectHanachan::calcSlowMotion ( )
inlineprivate0x806CAC74

Definition at line 194 of file ObjectHanachan.hh.

◆ calcWait()

void Field::ObjectHanachan::calcWait ( )
private0x806C9F98

Definition at line 206 of file ObjectHanachan.cc.

◆ calcWalk()

void Field::ObjectHanachan::calcWalk ( )
private0x806C9D38

Definition at line 189 of file ObjectHanachan.cc.

◆ clearChain()

void Field::ObjectHanachan::clearChain ( )
private0x806CAAD0

Definition at line 284 of file ObjectHanachan.cc.

◆ createCollision()

void Field::ObjectHanachan::createCollision ( )
inlineoverridevirtual0x806CC9F4

Reimplemented from Field::ObjectCollidable.

Definition at line 167 of file ObjectHanachan.hh.

◆ headPart()

ObjectHanachanHead *& Field::ObjectHanachan::headPart ( )
inlinenodiscardprivate

Definition at line 223 of file ObjectHanachan.hh.

◆ init()

void Field::ObjectHanachan::init ( )
overridevirtual0x806C9630

Reimplemented from Field::ObjectBase.

Definition at line 162 of file ObjectHanachan.cc.

◆ initBody()

void Field::ObjectHanachan::initBody ( )
private0x806CA72C

Definition at line 264 of file ObjectHanachan.cc.

◆ initChain()

void Field::ObjectHanachan::initChain ( )
private0x806CA9AC

Definition at line 275 of file ObjectHanachan.cc.

◆ initWait()

void Field::ObjectHanachan::initWait ( )
inlineprivate0x806C9EC8

Definition at line 180 of file ObjectHanachan.hh.

◆ initWalk()

void Field::ObjectHanachan::initWalk ( )
private0x806C9BC0

Definition at line 181 of file ObjectHanachan.cc.

◆ loadFlags()

u32 Field::ObjectHanachan::loadFlags ( ) const
inlinenodiscardoverridevirtual0x806CC9FC

Reimplemented from Field::ObjectBase.

Definition at line 159 of file ObjectHanachan.hh.

◆ loadGraphics()

void Field::ObjectHanachan::loadGraphics ( )
inlineoverridevirtual0x806CC9F8

Reimplemented from Field::ObjectBase.

Definition at line 164 of file ObjectHanachan.hh.

◆ onSegmentEnd()

void Field::ObjectHanachan::onSegmentEnd ( )
private0x806CA24C

Definition at line 229 of file ObjectHanachan.cc.

◆ setMovingVel()

void Field::ObjectHanachan::setMovingVel ( )
inlineprivate0x806CBE2C

Definition at line 219 of file ObjectHanachan.hh.

◆ shouldStartMoving()

bool Field::ObjectHanachan::shouldStartMoving ( ) const
inlinenodiscardprivate0x806CAF9C

Definition at line 214 of file ObjectHanachan.hh.

Member Data Documentation

◆ BODY_PART_DISTANCES

std::array<f32, 6> Field::ObjectHanachan::BODY_PART_DISTANCES
staticconstexprprivate
Initial value:
= {{
360.0f,
510.0f,
510.0f,
480.0f,
510.0f,
510.0f,
}}

The distance between each body part link in the chain.

Definition at line 244 of file ObjectHanachan.hh.

◆ m_chain

HanachanChainManager Field::ObjectHanachan::m_chain
private

Definition at line 232 of file ObjectHanachan.hh.

◆ m_leftMisalignFrame

u16 Field::ObjectHanachan::m_leftMisalignFrame
private

Frame at which the wiggler became left-misaligned from the rail.

Definition at line 238 of file ObjectHanachan.hh.

◆ m_movingVel

const f32 Field::ObjectHanachan::m_movingVel
private

Definition at line 233 of file ObjectHanachan.hh.

◆ m_partDisplacement

std::array<float, 7> Field::ObjectHanachan::m_partDisplacement
private

Total distance between a given part and the head.

Definition at line 234 of file ObjectHanachan.hh.

◆ m_parts

std::array<ObjectHanachanPart *, 7> Field::ObjectHanachan::m_parts
private

Definition at line 231 of file ObjectHanachan.hh.

◆ m_prevRailAlignment

RailAlignment Field::ObjectHanachan::m_prevRailAlignment
private

Definition at line 241 of file ObjectHanachan.hh.

◆ m_railAlignment

RailAlignment Field::ObjectHanachan::m_railAlignment
private

Captures when the wiggle takes sharp turns.

Definition at line 240 of file ObjectHanachan.hh.

◆ m_right

EGG::Vector3f Field::ObjectHanachan::m_right
private

Definition at line 239 of file ObjectHanachan.hh.

◆ m_still

bool Field::ObjectHanachan::m_still
private

Definition at line 237 of file ObjectHanachan.hh.

◆ m_stillAngVel

f32 Field::ObjectHanachan::m_stillAngVel
private

Affects body part swaying when coming to a standstill.

Definition at line 236 of file ObjectHanachan.hh.

◆ m_stillDuration

u16 Field::ObjectHanachan::m_stillDuration
private

Definition at line 235 of file ObjectHanachan.hh.

◆ STATE_ENTRIES

std::array<StateManagerEntry, 2> Field::ObjectHanachan::STATE_ENTRIES
staticconstexprprivate
Initial value:
= {{
{StateEntry<ObjectHanachan, &ObjectHanachan::initWalk, &ObjectHanachan::calcWalk>(0)},
{StateEntry<ObjectHanachan, &ObjectHanachan::initWait, &ObjectHanachan::calcWait>(1)},
}}

Definition at line 253 of file ObjectHanachan.hh.