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

Description

Definition at line 169 of file RailInterpolator.hh.

Inheritance diagram for Kinoko::Field::RailSmoothInterpolator:

Public Member Functions

 RailSmoothInterpolator (f32 speed, u32 idx)
void init (f32 t, u32 idx) override
Status calc () override
void setCurrVel (f32 speed) override
f32 getCurrVel () override
void evalCubicBezierOnPath (f32 t, EGG::Vector3f &currDir, EGG::Vector3f &curTangentDir) override
void getPathLocation (f32 t, s16 &idx, f32 &len) override
f32 getCurrSegmentLength () const override
Public Member Functions inherited from Kinoko::Field::RailInterpolator
 RailInterpolator (f32 speed, u32 idx)
void setPerPointVelocities (bool isSet)
void setT (f32 t)
void reverseDirection ()
const EGG::Vector3f & floorNrm (size_t idx) const
f32 railLength () const
const System::MapdataPointInfo::Point & curPoint () const
const System::MapdataPointInfo::Point & nextPoint () const
s16 railIdx () const
u16 pointCount () const
f32 speed () const
const EGG::Vector3f & curPos () const
const EGG::Vector3f & curTangentDir () const
f32 currVel () const
f32 segmentT () const
bool isMovementDirectionForward () const
s16 curPointIdx () const
s16 nextPointIdx () const

Private Member Functions

void calcCubicBezier (f32 t, u32 currIdx, u32 nextIdx, EGG::Vector3f &pos, EGG::Vector3f &dir) const
EGG::Vector3f calcCubicBezierPos (f32 t, const RailSplineTransition &trans) const
EGG::Vector3f calcCubicBezierTangentDir (f32 t, const RailSplineTransition &trans) const
f32 calcT (f32 t) const
void calcNextSegment ()

Private Attributes

std::span< const RailSplineTransition > m_transitions
std::span< const f32 > m_pathPercentages
EGG::Vector3f m_prevPos
f32 m_velocity
bool m_velocityPending
 Whether m_velocity needs to be recomputed from m_curPos and m_prevPos.

Additional Inherited Members

Public Types inherited from Kinoko::Field::RailInterpolator
enum class  Status {
  InProgress = 0 ,
  SegmentEnd = 1 ,
  ChangingDirection = 2
}
Protected Member Functions inherited from Kinoko::Field::RailInterpolator
void updateVel ()
void calcVelocities ()
bool shouldChangeDirection () const
void calcDirectionChange ()
void calcNextIndices ()
Protected Attributes inherited from Kinoko::Field::RailInterpolator
s16 m_railIdx
u16 m_pointCount
std::span< const System::MapdataPointInfo::Point > m_points
bool m_isOscillating
f32 m_speed
bool m_usePerPointVelocities
EGG::Vector3f m_curPos
EGG::Vector3f m_curTangentDir
f32 m_currVel
f32 m_prevPointVel
f32 m_nextPointVel
f32 m_currSegmentVel
f32 m_segmentT
bool m_movementDirectionForward
s16 m_currPointIdx
s16 m_nextPointIdx
bool m_4a

Constructor & Destructor Documentation

◆ RailSmoothInterpolator()

Kinoko::Field::RailSmoothInterpolator::RailSmoothInterpolator ( f32 speed,
u32 idx )
0x806EE830

Definition at line 258 of file RailInterpolator.cc.

◆ ~RailSmoothInterpolator()

Kinoko::Field::RailSmoothInterpolator::~RailSmoothInterpolator ( )
overridedefault0x806EF944

Member Function Documentation

◆ calc()

RailInterpolator::Status Kinoko::Field::RailSmoothInterpolator::calc ( )
overridevirtual0x806EEBEC

Implements Kinoko::Field::RailInterpolator.

Definition at line 299 of file RailInterpolator.cc.

◆ calcCubicBezier()

void Kinoko::Field::RailSmoothInterpolator::calcCubicBezier ( f32 t,
u32 currIdx,
u32 nextIdx,
EGG::Vector3f & pos,
EGG::Vector3f & dir ) const
private0x806EF224

Definition at line 405 of file RailInterpolator.cc.

◆ calcCubicBezierPos()

EGG::Vector3f Kinoko::Field::RailSmoothInterpolator::calcCubicBezierPos ( f32 t,
const RailSplineTransition & trans ) const
nodiscardprivate0x806EF350

Definition at line 415 of file RailInterpolator.cc.

◆ calcCubicBezierTangentDir()

EGG::Vector3f Kinoko::Field::RailSmoothInterpolator::calcCubicBezierTangentDir ( f32 t,
const RailSplineTransition & trans ) const
nodiscardprivate0x806EF454

Definition at line 428 of file RailInterpolator.cc.

◆ calcNextSegment()

void Kinoko::Field::RailSmoothInterpolator::calcNextSegment ( )
private0x806EF664

Definition at line 476 of file RailInterpolator.cc.

◆ calcT()

f32 Kinoko::Field::RailSmoothInterpolator::calcT ( f32 t) const
nodiscardprivate0x806EF0F8
Note
For Kinoko, we introduce a slight performance improvement by early returning once the correct segment is found.

Definition at line 447 of file RailInterpolator.cc.

◆ evalCubicBezierOnPath()

void Kinoko::Field::RailSmoothInterpolator::evalCubicBezierOnPath ( f32 t,
EGG::Vector3f & currDir,
EGG::Vector3f & curTangentDir )
overridevirtual0x806EEEBC

Implements Kinoko::Field::RailInterpolator.

Definition at line 354 of file RailInterpolator.cc.

◆ getCurrSegmentLength()

f32 Kinoko::Field::RailSmoothInterpolator::getCurrSegmentLength ( ) const
inlinenodiscardoverridevirtual0x806EF09C

Implements Kinoko::Field::RailInterpolator.

Definition at line 195 of file RailInterpolator.hh.

◆ getCurrVel()

f32 Kinoko::Field::RailSmoothInterpolator::getCurrVel ( )
inlinenodiscardoverridevirtual0x806EF93C

As a Kinoko-specific optimization, m_velocity calculation is deferred until this function is called, since few objects actually read the current velocity.

Implements Kinoko::Field::RailInterpolator.

Definition at line 181 of file RailInterpolator.hh.

◆ getPathLocation()

void Kinoko::Field::RailSmoothInterpolator::getPathLocation ( f32 t,
s16 & idx,
f32 & len )
overridevirtual0x806EEFA0

Implements Kinoko::Field::RailInterpolator.

Definition at line 372 of file RailInterpolator.cc.

◆ init()

void Kinoko::Field::RailSmoothInterpolator::init ( f32 t,
u32 idx )
overridevirtual0x806EE924

Implements Kinoko::Field::RailInterpolator.

Definition at line 270 of file RailInterpolator.cc.

◆ setCurrVel()

void Kinoko::Field::RailSmoothInterpolator::setCurrVel ( f32 speed)
overridevirtual0x806EEB94

Implements Kinoko::Field::RailInterpolator.

Definition at line 343 of file RailInterpolator.cc.

Member Data Documentation

◆ m_pathPercentages

std::span<const f32> Kinoko::Field::RailSmoothInterpolator::m_pathPercentages
private

Definition at line 210 of file RailInterpolator.hh.

◆ m_prevPos

EGG::Vector3f Kinoko::Field::RailSmoothInterpolator::m_prevPos
private

Definition at line 211 of file RailInterpolator.hh.

◆ m_transitions

std::span<const RailSplineTransition> Kinoko::Field::RailSmoothInterpolator::m_transitions
private

Definition at line 209 of file RailInterpolator.hh.

◆ m_velocity

f32 Kinoko::Field::RailSmoothInterpolator::m_velocity
private

Definition at line 212 of file RailInterpolator.hh.

◆ m_velocityPending

bool Kinoko::Field::RailSmoothInterpolator::m_velocityPending
private

Whether m_velocity needs to be recomputed from m_curPos and m_prevPos.

Kinoko-specific optimization. Few objects read getCurrSpeed(), so calc() defers computing m_velocity until it is read.

Definition at line 217 of file RailInterpolator.hh.