Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
ObjectPillar.hh
1
2
#pragma once
3
4
#include "game/field/obj/ObjectCollidable.hh"
5
#include "game/field/obj/ObjectKCL.hh"
6
7
#include "game/kart/KartCollide.hh"
8
9
#include "game/system/RaceManager.hh"
10
11
namespace
Kinoko::Field
{
12
14
class
ObjectPillarBase :
public
ObjectKCL {
15
public
:
16
ObjectPillarBase(
const
System::MapdataGeoObj
¶ms);
17
~ObjectPillarBase()
override
;
18
20
[[nodiscard]]
const
char
*getKclName()
const override
{
21
return
"dc_pillar_base"
;
22
}
23
25
[[nodiscard]]
virtual
f32 colRadiusAdditionalLength()
const override
{
26
return
0.0f;
27
}
28
};
29
33
class
ObjectPillarC :
public
ObjectCollidable {
34
public
:
35
ObjectPillarC(
const
System::MapdataGeoObj
¶ms);
36
~ObjectPillarC()
override
;
37
38
void
calcCollisionTransform()
override
;
39
41
[[nodiscard]] f32
getCollisionRadius
()
const override
{
42
return
3000.0f;
43
}
44
46
[[nodiscard]] ObjectId id()
const override
{
47
return
ObjectId::DCPillarC;
48
}
49
51
Kart::Reaction onCollision(
Kart::KartObject
*
/*kartObj*/
, Kart::Reaction reactionOnKart,
52
Kart::Reaction
/*reactionOnObj*/
,
EGG::Vector3f
&
/*hitDepth*/
)
override
{
53
auto
*raceMgr = System::RaceManager::Instance();
54
return
raceMgr->timer() <
m_fallStart
? Kart::Reaction::WallAllSpeed : reactionOnKart;
55
}
56
57
private
:
58
const
u32
m_fallStart
;
59
};
60
64
class
ObjectPillar :
public
ObjectKCL {
65
public
:
66
ObjectPillar(
const
System::MapdataGeoObj
¶ms);
67
~ObjectPillar()
override
;
68
69
void
init()
override
;
70
void
calc()
override
;
71
73
[[nodiscard]] u32 loadFlags()
const override
{
74
return
1;
75
}
76
78
[[nodiscard]] f32 colRadiusAdditionalLength()
const override
{
79
return
4000.0f;
80
}
81
82
[[nodiscard]]
const
EGG::Matrix34f
&getUpdatedMatrix(u32 timeOffset)
override
;
83
84
private
:
85
enum class
State {
86
Upright = 0,
87
Break = 1,
88
Ground = 2,
89
};
90
91
[[nodiscard]] f32 calcRot(s32 frame)
const
;
92
93
State
m_state
;
94
const
u32
m_fallStart
;
95
const
f32
m_targetRotation
;
96
const
f32 m_initRot;
97
EGG::Vector3f
m_setupRot
;
98
ObjectPillarBase
*
m_base
;
99
ObjectPillarC
*
m_collidable
;
100
EGG::Matrix34f
m_workMat
;
101
s32
m_groundFrame
;
102
};
103
104
}
// namespace Kinoko::Field
Kinoko::EGG::Matrix34f
A 3 x 4 matrix.
Definition
Matrix.hh:10
Kinoko::Field::ObjectPillarBase
The stationary portion of the Dry Dry Ruins pillars. It just acts as a wall.
Definition
ObjectPillar.hh:14
Kinoko::Field::ObjectPillarC
Represents the part of the Dry Dry Ruins pillar that falls.
Definition
ObjectPillar.hh:33
Kinoko::Field::ObjectPillarC::getCollisionRadius
f32 getCollisionRadius() const override
Finds the radius that fits fully in a BoxColUnit.
Definition
ObjectPillar.hh:41
Kinoko::Field::ObjectPillarC::m_fallStart
const u32 m_fallStart
The number of frames before the pillar will start to fall.
Definition
ObjectPillar.hh:58
Kinoko::Field::ObjectPillar::m_fallStart
const u32 m_fallStart
The number of frames before the pillar will start to fall.
Definition
ObjectPillar.hh:94
Kinoko::Field::ObjectPillar::m_setupRot
EGG::Vector3f m_setupRot
Initial rotation of the pillar.
Definition
ObjectPillar.hh:97
Kinoko::Field::ObjectPillar::m_state
State m_state
0 when upright, 1 when falling, and 2 afterwards.
Definition
ObjectPillar.hh:93
Kinoko::Field::ObjectPillar::m_groundFrame
s32 m_groundFrame
Frame the pillar has finished falling.
Definition
ObjectPillar.hh:101
Kinoko::Field::ObjectPillar::m_collidable
ObjectPillarC * m_collidable
Wall and hazard collision of the upright/falling pillar.
Definition
ObjectPillar.hh:99
Kinoko::Field::ObjectPillar::m_targetRotation
const f32 m_targetRotation
How much the pillar rotates during the fall, in radians.
Definition
ObjectPillar.hh:95
Kinoko::Field::ObjectPillar::m_base
ObjectPillarBase * m_base
Stationary portion of pillar.
Definition
ObjectPillar.hh:98
Kinoko::Field::ObjectPillar::m_workMat
EGG::Matrix34f m_workMat
Rotation and translation matrix;.
Definition
ObjectPillar.hh:100
Kinoko::Kart::KartObject
The highest level abstraction for a kart.
Definition
KartObject.hh:11
Kinoko::System::MapdataGeoObj
Definition
MapdataGeoObj.hh:9
Kinoko::Field
Pertains to collision.
Definition
BoxColManager.cc:10
Kinoko::EGG::Vector3f
A 3D float vector.
Definition
Vector.hh:107
game
field
obj
ObjectPillar.hh
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0