Mario Kart 64
Loading...
Searching...
No Matches
Registry.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <libultraship.h>
4
#include <string>
5
#include <unordered_map>
6
#include <functional>
7
#include <set>
8
9
struct
TrackInfo
{
10
int32_t
Id
;
11
std::string
Path
;
// Path to the custom track
12
std::string
ResourceName
;
13
std::string
Name
;
14
std::string
DebugName
;
15
std::string
Length
;
16
const
char
*
MinimapTexture
;
17
// std::string PreviewTexture;
18
};
19
20
struct
ActorInfo
{
21
int32_t
Id
;
22
std::string
ResourceName
;
23
std::string
Name
;
24
std::set<std::string>
Tags
;
// Category for filtering
25
};
26
51
52
template
<
typename
TInfo,
typename
... TArgs>
53
// ^ Scary template key word
54
class
Registry
{
55
public
:
63
using
Callback
= std::function<void(TArgs...)>;
64
65
void
Add
(TInfo& info,
Callback
func) {
66
info.Id =
mCounter
++;
67
// Needs to allow overwriting to support mod hot-reloading
68
mMap
[info.ResourceName] =
Entry
{info, std::move(func)};
69
}
70
71
const
TInfo*
GetInfo
(
const
std::string& resourceName)
const
{
72
auto
it =
mMap
.find(resourceName);
73
return
(it !=
mMap
.end()) ? &it->second.Info :
nullptr
;
74
}
75
76
void
Invoke
(
const
std::string& resourceName, TArgs... args) {
77
auto
it =
mMap
.find(resourceName);
78
if
(it !=
mMap
.end() && it->second.Func) {
79
// Using C++ variadic template expansion to call the function
80
printf(
"[Registry] Invoking %s\n"
, resourceName.c_str());
81
it->second.Func(std::forward<TArgs>(args)...);
82
}
else
{
83
printf(
"[Registry] Error: %s not found or function is null.\n"
, resourceName.c_str());
84
}
85
}
86
87
bool
Find
(
const
std::string& resourceName)
const
{
88
return
mMap
.find(resourceName) !=
mMap
.end();
89
}
90
91
std::vector<const TInfo*>
GetAllInfo
()
const
{
92
std::vector<const TInfo*> list;
93
list.reserve(
mMap
.size());
94
for
(
auto
& pair :
mMap
) {
95
list.push_back(&pair.second.Info);
96
}
97
return
list;
98
}
99
100
void
Clear
() {
101
mMap
.clear();
102
mCounter
= 0;
103
}
104
105
private
:
106
int32_t
mCounter
;
107
struct
Entry
{
108
TInfo
Info
;
109
Callback
Func
;
110
};
111
112
// key: str, value: lambda function
113
std::unordered_map<std::string, Registry::Entry>
mMap
;
114
};
Registry
Definition
Registry.h:54
Registry::GetAllInfo
std::vector< const TInfo * > GetAllInfo() const
Definition
Registry.h:91
Registry::mCounter
int32_t mCounter
Definition
Registry.h:106
Registry::GetInfo
const TInfo * GetInfo(const std::string &resourceName) const
Definition
Registry.h:71
Registry::Add
void Add(TInfo &info, Callback func)
Definition
Registry.h:65
Registry::mMap
std::unordered_map< std::string, Registry::Entry > mMap
Definition
Registry.h:113
Registry::Find
bool Find(const std::string &resourceName) const
Definition
Registry.h:87
Registry::Clear
void Clear()
Definition
Registry.h:100
Registry::Invoke
void Invoke(const std::string &resourceName, TArgs... args)
Definition
Registry.h:76
Registry::Callback
std::function< void(TArgs...)> Callback
Definition
Registry.h:63
ActorInfo
Definition
Registry.h:20
ActorInfo::Name
std::string Name
Definition
Registry.h:23
ActorInfo::Tags
std::set< std::string > Tags
Definition
Registry.h:24
ActorInfo::ResourceName
std::string ResourceName
Definition
Registry.h:22
ActorInfo::Id
int32_t Id
Definition
Registry.h:21
Registry::Entry
Definition
Registry.h:107
Registry::Entry::Func
Callback Func
Definition
Registry.h:109
Registry::Entry::Info
TInfo Info
Definition
Registry.h:108
TrackInfo
Definition
Registry.h:9
TrackInfo::Name
std::string Name
Definition
Registry.h:13
TrackInfo::MinimapTexture
const char * MinimapTexture
Definition
Registry.h:16
TrackInfo::DebugName
std::string DebugName
Definition
Registry.h:14
TrackInfo::ResourceName
std::string ResourceName
Definition
Registry.h:12
TrackInfo::Path
std::string Path
Definition
Registry.h:11
TrackInfo::Length
std::string Length
Definition
Registry.h:15
TrackInfo::Id
int32_t Id
Definition
Registry.h:10
src
engine
Registry.h
Generated by
1.13.2