Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
ObjectCrane.cc
1
#include "ObjectCrane.hh"
2
3
namespace
Kinoko::Field
{
4
6
ObjectCrane::ObjectCrane(
const
System::MapdataGeoObj ¶ms)
7
:
ObjectKCL
(params), m_startPos(pos()) {
8
m_xt = params.setting(3);
9
m_yt = 0;
10
m_xPeriod = std::max(
static_cast<
u16
>
(2), params.setting(1));
11
m_yPeriod = std::max(
static_cast<
u16
>
(2), params.setting(4));
12
m_xAmplitude = params.setting(2);
13
m_yAmplitude = params.setting(5);
14
15
m_xFreq = 2.0f * F_PI /
static_cast<
f32
>
(m_xPeriod);
16
m_yFreq = 2.0f * F_PI /
static_cast<
f32
>
(m_yPeriod);
17
}
18
20
ObjectCrane::~ObjectCrane() =
default
;
21
23
void
ObjectCrane::calc() {
24
const
EGG::Vector3f prevPos = pos();
25
26
f32 xDelta = EGG::Mathf::cos(m_xFreq *
static_cast<
f32
>
(m_xt));
27
EGG::Vector3f scaledX = EGG::Vector3f::ex * xDelta *
static_cast<
f32
>
(m_xAmplitude);
28
29
f32 yDelta = EGG::Mathf::cos(m_yFreq *
static_cast<
f32
>
(m_yt));
30
EGG::Vector3f scaledY = EGG::Vector3f::ey * yDelta *
static_cast<
f32
>
(m_yAmplitude);
31
32
calcTransform();
33
setPos(m_startPos + transform().multVector33(scaledX + scaledY));
34
35
if
(m_yt++ > m_yPeriod) {
36
m_yt = 0;
37
}
38
39
if
(m_xt++ > m_xPeriod) {
40
m_xt = 0;
41
}
42
43
setMovingObjVel(pos() - prevPos);
44
}
45
46
}
// namespace Kinoko::Field
Kinoko::Field::ObjectKCL
Definition
ObjectKCL.hh:8
Kinoko::Field
Pertains to collision.
Definition
BoxColManager.cc:10
game
field
obj
ObjectCrane.cc
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0