Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
MapdataCheckPath.hh
1
#pragma once
2
3
#include "game/system/map/MapdataAccessorBase.hh"
4
5
#include <egg/math/Vector.hh>
6
7
namespace
Kinoko::System
{
8
9
class
MapdataCheckPathAccessor
;
10
11
class
MapdataCheckPath {
12
public
:
13
struct
SData
{
14
u8 start;
15
u8 size;
16
17
u8 prev[6];
18
u8 next[6];
19
u8 _0e[0x10 - 0x0e];
20
};
21
STATIC_ASSERT(
sizeof
(
SData
) == 0x10);
22
23
MapdataCheckPath(
const
SData
*data);
24
void
read(
EGG::Stream
&stream);
25
26
void
findDepth
(s8 depth,
const
MapdataCheckPathAccessor
&accessor);
27
28
[[nodiscard]]
bool
isPointInPath(u16 checkpointId)
const
{
29
return
m_start
<= checkpointId && checkpointId <= end();
30
}
31
32
static
constexpr
size_t
MAX_NEIGHBORS = 6;
33
35
[[nodiscard]] u8 start()
const
{
36
return
m_start
;
37
}
38
39
[[nodiscard]] u8 end()
const
{
40
return
m_start
+
m_size
- 1;
41
}
42
43
[[nodiscard]]
const
std::array<u8, MAX_NEIGHBORS> &next()
const
{
44
return
m_next
;
45
}
46
47
[[nodiscard]]
const
std::array<u8, MAX_NEIGHBORS> &prev()
const
{
48
return
m_prev
;
49
}
50
51
[[nodiscard]] s8 depth()
const
{
52
return
m_depth
;
53
}
54
55
[[nodiscard]] f32 oneOverCount()
const
{
56
return
m_oneOverCount;
57
}
59
60
private
:
61
const
SData
*m_rawData;
62
u8
m_start
;
63
u8
m_size
;
64
std::array<u8, MAX_NEIGHBORS>
m_prev
;
65
std::array<u8, MAX_NEIGHBORS>
m_next
;
66
s8
m_depth
;
68
f32 m_oneOverCount;
69
};
70
71
class
MapdataCheckPathAccessor
72
:
public
MapdataAccessorBase<MapdataCheckPath, MapdataCheckPath::SData> {
73
public
:
74
MapdataCheckPathAccessor(
const
MapSectionHeader
*header);
75
~MapdataCheckPathAccessor()
override
;
76
77
[[nodiscard]]
MapdataCheckPath
*findCheckpathForCheckpoint(u16 checkpointId)
const
;
78
79
[[nodiscard]] f32 lapProportion()
const
;
80
81
private
:
90
f32
m_lapProportion
;
91
};
92
93
}
// namespace Kinoko::System
Kinoko::EGG::Stream
A stream of data, abstracted to allow for continuous seeking.
Definition
Stream.hh:8
Kinoko::System::MapdataCheckPathAccessor
Definition
MapdataCheckPath.hh:72
Kinoko::System::MapdataCheckPathAccessor::m_lapProportion
f32 m_lapProportion
Minimum proportion of a lap a checkpath can be. Calculated as 1/(maxDepth+1).
Definition
MapdataCheckPath.hh:90
Kinoko::System::MapdataCheckPath
Definition
MapdataCheckPath.hh:11
Kinoko::System::MapdataCheckPath::m_size
u8 m_size
Number of checkpoints in this checkpath.
Definition
MapdataCheckPath.hh:63
Kinoko::System::MapdataCheckPath::findDepth
void findDepth(s8 depth, const MapdataCheckPathAccessor &accessor)
Performs DFS to calculate m_depth for all subsequent checkpaths.
Definition
MapdataCheckPath.cc:27
Kinoko::System::MapdataCheckPath::m_depth
s8 m_depth
Definition
MapdataCheckPath.hh:66
Kinoko::System::MapdataCheckPath::m_next
std::array< u8, MAX_NEIGHBORS > m_next
Indices of next connected checkpaths.
Definition
MapdataCheckPath.hh:65
Kinoko::System::MapdataCheckPath::m_start
u8 m_start
Index of the first checkpoint in this checkpath.
Definition
MapdataCheckPath.hh:62
Kinoko::System::MapdataCheckPath::m_prev
std::array< u8, MAX_NEIGHBORS > m_prev
Indices of previous connected checkpaths.
Definition
MapdataCheckPath.hh:64
Kinoko::System
High-level handling for generic system operations, such as input reading, race configuration,...
Definition
CourseMap.cc:5
Kinoko::System::MapSectionHeader
Definition
MapdataAccessorBase.hh:9
Kinoko::System::MapdataCheckPath::SData
Definition
MapdataCheckPath.hh:13
game
system
map
MapdataCheckPath.hh
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0