Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
ObjectVolcanoBall.cc
1
#include "ObjectVolcanoBall.hh"
2
3
namespace
Kinoko::Field
{
4
6
ObjectVolcanoBall::ObjectVolcanoBall(f32 accel, f32 finalVel, f32 endPosY,
7
const
System::MapdataGeoObj ¶ms,
const
EGG::Vector3f &vel)
8
:
ObjectCollidable
(params),
StateManager
(this, STATE_ENTRIES),
9
m_burnDuration(params.setting(3)), m_accel(accel), m_finalVel(finalVel), m_endPosY(endPosY),
10
m_sqVelXZ(vel.x * vel.x + vel.z * vel.z) {}
11
13
ObjectVolcanoBall::~ObjectVolcanoBall() =
default
;
14
16
void
ObjectVolcanoBall::init() {
17
m_railInterpolator->init(0.0f, 0);
18
setPos(m_railInterpolator->curPos());
19
}
20
22
void
ObjectVolcanoBall::calcFalling() {
23
f32 sqVel = std::max(0.01f, m_finalVel - 2.0f * m_accel * (pos().y - m_endPosY));
24
m_railInterpolator->setCurrVel(EGG::Mathf::sqrt(m_sqVelXZ + sqVel));
25
26
if
(m_railInterpolator->calc() == RailInterpolator::Status::ChangingDirection) {
27
m_nextStateId = 2;
28
}
else
{
29
EGG::Vector3f tangent = m_railInterpolator->curTangentDir();
30
if
(EGG::Mathf::abs(tangent.y) > 0.1f) {
31
tangent.y = 0.01f;
32
}
33
34
tangent.normalise2();
35
setMatrixFromOrthonormalBasisAndPos(tangent);
36
37
setPos(m_railInterpolator->curPos());
38
}
39
}
40
41
}
// namespace Kinoko::Field
Kinoko::Field::ObjectCollidable
Definition
ObjectCollidable.hh:18
Kinoko::Field::StateManager
Base class that represents different "states" for an object.
Definition
StateManager.hh:27
Kinoko::Field
Pertains to collision.
Definition
BoxColManager.cc:10
game
field
obj
ObjectVolcanoBall.cc
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0