Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
ObjectChoropu.hh
1
#pragma once
2
3
#include "game/field/ObjectCollisionSphere.hh"
4
#include "game/field/StateManager.hh"
5
#include "game/field/obj/ObjectCollidable.hh"
6
7
#include "game/kart/KartCollide.hh"
8
9
#include <vector>
10
11
namespace
Kinoko::Field
{
12
13
class
ObjectChoropuGround
;
14
class
ObjectChoropuHoll
;
15
19
class
ObjectChoropu :
public
ObjectCollidable,
public
StateManager {
20
public
:
21
ObjectChoropu(
const
System::MapdataGeoObj
¶ms);
22
~ObjectChoropu()
override
;
23
24
void
init()
override
;
25
void
calc()
override
;
26
28
[[nodiscard]] u32 loadFlags()
const override
{
29
return
1;
30
}
31
32
Kart::Reaction onCollision(
Kart::KartObject
*kartObj, Kart::Reaction reactionOnKart,
33
Kart::Reaction reactionOnObj,
EGG::Vector3f
&hitDepth)
override
;
34
35
private
:
36
void
enterStateStub();
37
void
enterDigging();
38
void
enterPeeking();
39
void
enterJumping();
40
void
calcStateStub();
41
void
calcDigging();
42
void
calcPeeking();
43
void
calcJumping();
44
45
void
calcGround();
46
void
calcGroundObjs();
47
[[nodiscard]]
EGG::Matrix34f
calcInterpolatedPose(f32 t)
const
;
48
49
owning_span<ObjectChoropuGround *>
m_groundObjs;
50
ObjectChoropuHoll
*m_objHoll;
51
s16 m_startFrameOffset;
52
u16 m_idleDuration;
53
f32 m_groundHeight;
54
bool
m_isStationary
;
55
EGG::Matrix34f
m_transMat;
56
EGG::Matrix34f
m_railMat;
57
f32 m_groundLength;
58
59
static
constexpr
f32 RADIUS = 300.0f;
60
static
constexpr
f32
MAX_GROUND_LEN
= 3000.0f;
61
62
static
constexpr
std::array<StateManagerEntry, 5> STATE_ENTRIES = {{
63
StateEntry<ObjectChoropu, &ObjectChoropu::enterDigging, &ObjectChoropu::calcDigging>(0),
64
StateEntry<ObjectChoropu, &ObjectChoropu::enterPeeking, &ObjectChoropu::calcPeeking>(1),
65
StateEntry<ObjectChoropu, &ObjectChoropu::enterStateStub,
66
&ObjectChoropu::calcStateStub>(2),
67
StateEntry<ObjectChoropu, &ObjectChoropu::enterJumping, &ObjectChoropu::calcJumping>(3),
68
StateEntry<ObjectChoropu, &ObjectChoropu::enterStateStub,
69
&ObjectChoropu::calcStateStub>(4),
70
}};
71
};
72
73
class
ObjectChoropuGround :
public
ObjectCollidable {
74
public
:
75
ObjectChoropuGround(
const
EGG::Vector3f
&pos,
const
EGG::Vector3f
&rot,
76
const
EGG::Vector3f
&scale);
77
~ObjectChoropuGround()
override
;
78
80
[[nodiscard]] u32 loadFlags()
const override
{
81
return
1;
82
}
83
85
Kart::Reaction onCollision(
Kart::KartObject
*
/*kartObj*/
, Kart::Reaction reactionOnKart,
86
Kart::Reaction
/*reactionOnObj*/
,
EGG::Vector3f
&hitDepth)
override
{
87
hitDepth.setZero();
88
return
reactionOnKart;
89
}
90
91
void
calcPosAndMat(f32 height,
const
EGG::Matrix34f
&mat);
92
93
[[nodiscard]] f32 height()
const
{
94
return
m_height;
95
}
96
97
private
:
98
f32 m_height;
99
};
100
101
class
ObjectChoropuHoll :
public
ObjectCollidable {
102
public
:
103
ObjectChoropuHoll(
const
System::MapdataGeoObj
¶ms);
104
~ObjectChoropuHoll()
override
;
105
107
void
init()
override
{
108
resize(RADIUS, 0.0f);
109
}
110
112
[[nodiscard]]
const
char
*getName()
const override
{
113
return
"holl"
;
114
}
115
117
[[nodiscard]] u32 loadFlags()
const override
{
118
return
1;
119
}
120
122
[[nodiscard]]
const
char
*getKclName()
const override
{
123
return
"holl"
;
124
}
125
127
void
createCollision()
override
{
128
m_collision = EGG::egg_new<ObjectCollisionSphere>(RADIUS, EGG::Vector3f::zero);
129
}
130
132
void
loadRail()
override
{}
133
135
Kart::Reaction onCollision(
Kart::KartObject
*
/*kartObj*/
, Kart::Reaction
/*reactionOnKart*/
,
136
Kart::Reaction
/*reactionOnObj*/
,
EGG::Vector3f
&hitDepth)
override
{
137
hitDepth.setZero();
138
return
Kart::Reaction::Wall;
139
}
140
141
private
:
142
static
constexpr
f32 RADIUS = 300.0f;
143
};
144
145
}
// namespace Kinoko::Field
Kinoko::EGG::Matrix34f
A 3 x 4 matrix.
Definition
Matrix.hh:10
Kinoko::Field::ObjectChoropuGround
Definition
ObjectChoropu.hh:73
Kinoko::Field::ObjectChoropuHoll
Definition
ObjectChoropu.hh:101
Kinoko::Field::ObjectChoropu::m_isStationary
bool m_isStationary
rPG moles don't move while MMM moles do
Definition
ObjectChoropu.hh:54
Kinoko::Field::ObjectChoropu::MAX_GROUND_LEN
static constexpr f32 MAX_GROUND_LEN
Max length of the dirt trail.
Definition
ObjectChoropu.hh:60
Kinoko::Kart::KartObject
The highest level abstraction for a kart.
Definition
KartObject.hh:11
Kinoko::System::MapdataGeoObj
Definition
MapdataGeoObj.hh:9
Kinoko::owning_span
A contiguous storage container that manages the lifecycle of a buffer of a given size.
Definition
Types.hh:31
Kinoko::Field
Pertains to collision.
Definition
BoxColManager.cc:10
Kinoko::EGG::Vector3f
A 3D float vector.
Definition
Vector.hh:107
game
field
obj
ObjectChoropu.hh
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0