A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ResDic.hh
1#pragma once
2
3#include <Common.hh>
4
5#include <cstring>
6
7// Credit: kiwi515/ogws
8
9namespace Kinoko::Abstract::g3d {
10
12class ResDic {
13public:
14 struct NodeData {
15 u16 ref;
16 u16 flag;
17 u16 idxLeft;
18 u16 idxRight;
19 s32 ofsString;
20 s32 ofsData;
21 };
22 STATIC_ASSERT(sizeof(NodeData) == 0x10);
23
24 struct Data {
25 u32 size;
26 u32 numData;
27 NodeData data[1];
28 };
29
30 ResDic(const void *data);
31
33 [[nodiscard]] void *operator[](const char *name) const {
34 if (!m_data || !name) {
35 return nullptr;
36 }
37
38 const NodeData *node = get(name, std::strlen(name));
39
40 if (node) {
41 return reinterpret_cast<void *>(
42 reinterpret_cast<uintptr_t>(m_data) + parse<s32>(node->ofsData));
43 }
44
45 return nullptr;
46 }
47
48 [[nodiscard]] void *operator[](size_t idx) const {
49 if (!m_data) {
50 return nullptr;
51 }
52
53 const NodeData *node = &m_data->data[idx + 1];
54
55 return reinterpret_cast<void *>(
56 reinterpret_cast<uintptr_t>(m_data) + parse<s32>(node->ofsData));
57 }
58
59private:
60 [[nodiscard]] const NodeData *get(const char *pName, u32 len) const;
61
62 const Data *m_data;
63};
64
65} // namespace Kinoko::Abstract::g3d
This header houses common data types such as our integral types and enums.
Essentially a lookup table to find different sections within the resource file.
Definition ResDic.hh:12