Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
ObjectHwanwan.hh
1
#pragma once
2
3
#include "game/field/StateManager.hh"
4
#include "game/field/obj/ObjectCollidable.hh"
5
6
#include "game/kart/KartCollide.hh"
7
#include "game/kart/KartObject.hh"
8
9
namespace
Kinoko::Field
{
10
11
class
ObjectHwanwan :
public
ObjectCollidable
,
public
StateManager
{
12
friend
class
ObjectHwanwanManager;
13
14
public
:
15
ObjectHwanwan(
const
System::MapdataGeoObj ¶ms);
16
~ObjectHwanwan()
override
;
17
18
void
init()
override
;
19
void
calc()
override
;
20
22
[[nodiscard]] u32 loadFlags()
const override
{
23
return
1;
24
}
25
27
[[nodiscard]]
const
char
*getKclName()
const override
{
28
return
"wanwan"
;
29
}
30
32
void
loadRail()
override
{}
33
35
Kart::Reaction onCollision(Kart::KartObject *kartObj, Kart::Reaction reactionOnKart,
36
Kart::Reaction
/*reactionOnObj*/
, EGG::Vector3f &
/*hitDepth*/
)
override
{
37
return
kartObj->speedRatioCapped() < 0.5f ? Kart::Reaction::WallAllSpeed : reactionOnKart;
38
}
39
40
private
:
42
void
enterState0() {}
43
45
void
enterState1() {}
46
48
void
calcState0() {
49
if
(m_touchingGround) {
50
m_bounceVel += EGG::Vector3f::ey * 12.0f;
51
}
52
}
53
55
void
calcState1() {}
56
57
void
checkFloorCollision();
58
void
calcUp();
59
60
const
EGG::Vector3f m_initPos;
61
EGG::Vector3f m_workPos;
62
EGG::Vector3f m_extVel;
63
EGG::Vector3f m_bounceVel;
64
EGG::Vector3f m_tangent;
65
EGG::Vector3f m_up;
66
EGG::Vector3f m_targetUp;
67
bool
m_touchingGround;
68
f32 m_initJumpVel;
69
f32 m_targetY;
70
71
static
constexpr
f32 DIAMETER = 400.0f;
72
static
constexpr
EGG::Vector3f GRAVITY = EGG::Vector3f(0.0f, 2.5f, 0.0f);
73
74
static
constexpr
std::array<StateManagerEntry, 2> STATE_ENTRIES = {{
75
{StateEntry<ObjectHwanwan, &ObjectHwanwan::enterState0, &ObjectHwanwan::calcState0>(0)},
76
{StateEntry<ObjectHwanwan, &ObjectHwanwan::enterState1, &ObjectHwanwan::calcState1>(1)},
77
}};
78
};
79
80
class
ObjectHwanwanManager :
public
ObjectCollidable
{
81
public
:
82
ObjectHwanwanManager(
const
System::MapdataGeoObj ¶ms);
83
~ObjectHwanwanManager()
override
;
84
85
void
init()
override
;
86
void
calc()
override
;
87
89
[[nodiscard]] u32 loadFlags()
const override
{
90
return
1;
91
}
92
94
void
loadGraphics()
override
{}
95
97
void
createCollision()
override
{}
98
99
private
:
100
void
calcState();
101
102
ObjectHwanwan *m_hwanwan;
103
};
104
105
}
// 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
ObjectHwanwan.hh
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0