1#include "MapdataPointInfo.hh"
3#include "game/system/CourseMap.hh"
7MapdataPointInfo::MapdataPointInfo(
const SData *data) : m_rawData(data) {
8 EGG::RamStream stream =
9 EGG::RamStream(data,
sizeof(SData) + parse<u16>(data->pointCount) *
sizeof(Point));
13MapdataPointInfo::~MapdataPointInfo() =
default;
15void MapdataPointInfo::read(EGG::RamStream &stream) {
16 u16 count = stream.read_u16();
18 m_points = owning_span<Point>(count);
20 for (
auto &setting : m_settings) {
21 setting = stream.read_u8();
24 for (
auto &point : m_points) {
29 settings[0] = stream.read_u16();
30 settings[1] = stream.read_u16();
32 point = Point(pos, {settings[0], settings[1]});
37MapdataPointInfoAccessor::MapdataPointInfoAccessor(
const MapSectionHeader *header)
38 : MapdataAccessorBase<MapdataPointInfo, MapdataPointInfo::SData>(header) {
39 init(
reinterpret_cast<const MapdataPointInfo::SData *
>(m_sectionHeader + 1),
40 parse<u16>(m_sectionHeader->count));
43MapdataPointInfoAccessor::~MapdataPointInfoAccessor() =
default;
45void MapdataPointInfoAccessor::init(
const MapdataPointInfo::SData *start, u16 count) {
48 m_entries =
new MapdataPointInfo *[count];
51 uintptr_t data =
reinterpret_cast<uintptr_t
>(start);
53 for (u16 i = 0; i < count; ++i) {
54 m_entries[i] =
new MapdataPointInfo(
reinterpret_cast<MapdataPointInfo::SData *
>(data));
55 data += m_entries[i]->pointCount() *
sizeof(MapdataPointInfo::Point) +
56 offsetof(MapdataPointInfo::SData, points);
High-level handling for generic system operations, such as input reading, race configuration,...