-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDekiInputModule.cpp
More file actions
154 lines (121 loc) · 3.91 KB
/
DekiInputModule.cpp
File metadata and controls
154 lines (121 loc) · 3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**
* @file DekiInputModule.cpp
* @brief Module entry point for deki-input DLL
*
* Exports the standard Deki plugin interface so the editor
* can load deki-input.dll and register its components (InputCollider).
*/
#include "DekiInputModule.h"
#include "interop/DekiPlugin.h"
#include "DekiModuleFeatureMeta.h"
#include "InputCollider.h"
#include "DekiInputInit.h"
#include "DekiEngine.h"
#include "reflection/ComponentRegistry.h"
#include "reflection/ComponentFactory.h"
#ifdef DEKI_EDITOR
#ifndef DEKI_PLUGIN_EXPORTS
// Auto-generated registration helpers (standalone DLL only)
extern void DekiInput_RegisterComponents();
extern int DekiInput_GetAutoComponentCount();
extern const DekiComponentMeta* DekiInput_GetAutoComponentMeta(int index);
// Track if already registered to avoid duplicates
static bool s_InputRegistered = false;
extern "C" {
/**
* @brief Ensure deki-input module is loaded and components are registered
*/
DEKI_INPUT_API int DekiInput_EnsureRegistered(void)
{
if (s_InputRegistered)
return DekiInput_GetAutoComponentCount();
s_InputRegistered = true;
DekiInput_RegisterComponents();
// Initialize input system (idempotent — may already be initialized
// by deki_init_module_systems() during DekiEngine::Initialize())
DekiInput_InitSystem();
return DekiInput_GetAutoComponentCount();
}
} // extern "C"
#endif // DEKI_PLUGIN_EXPORTS
// =============================================================================
// Plugin metadata (for dynamic loading compatibility)
// =============================================================================
extern "C" {
#ifndef DEKI_PLUGIN_EXPORTS
DEKI_PLUGIN_API const char* DekiPlugin_GetName(void)
{
return "Deki Input Module";
}
DEKI_PLUGIN_API const char* DekiPlugin_GetVersion(void)
{
#ifdef DEKI_MODULE_VERSION
return DEKI_MODULE_VERSION;
#else
return "0.0.0-dev";
#endif
}
DEKI_PLUGIN_API const char* DekiPlugin_GetReflectionJson(void)
{
return "{}";
}
DEKI_PLUGIN_API int DekiPlugin_Init(void)
{
return 0;
}
DEKI_PLUGIN_API void DekiPlugin_Shutdown(void)
{
DekiInput_ShutdownSystem();
s_InputRegistered = false;
}
DEKI_PLUGIN_API int DekiPlugin_GetComponentCount(void)
{
return DekiInput_GetAutoComponentCount();
}
DEKI_PLUGIN_API const DekiComponentMeta* DekiPlugin_GetComponentMeta(int index)
{
return DekiInput_GetAutoComponentMeta(index);
}
DEKI_PLUGIN_API void DekiPlugin_RegisterComponents(void)
{
DekiInput_EnsureRegistered();
}
#endif // DEKI_PLUGIN_EXPORTS (resume after feature data)
// =============================================================================
// Module Feature API
// =============================================================================
static const char* s_InputGuids[] = { InputCollider::StaticGuid };
static const DekiModuleFeatureInfo s_Features[] = {
{"input", "Input", "Input dispatch with InputCollider hit areas", true, "DEKI_FEATURE_INPUT", s_InputGuids, 1},
};
#ifndef DEKI_PLUGIN_EXPORTS
DEKI_PLUGIN_API int DekiPlugin_GetFeatureCount(void)
{
return sizeof(s_Features) / sizeof(s_Features[0]);
}
DEKI_PLUGIN_API const DekiModuleFeatureInfo* DekiPlugin_GetFeature(int index)
{
if (index < 0 || index >= DekiPlugin_GetFeatureCount())
return nullptr;
return &s_Features[index];
}
#endif // DEKI_PLUGIN_EXPORTS
// =============================================================================
// Module-specific feature API
// =============================================================================
DEKI_INPUT_API const char* DekiInput_GetName(void)
{
return "Input";
}
DEKI_INPUT_API int DekiInput_GetFeatureCount(void)
{
return static_cast<int>(sizeof(s_Features) / sizeof(s_Features[0]));
}
DEKI_INPUT_API const DekiModuleFeatureInfo* DekiInput_GetFeature(int index)
{
if (index < 0 || index >= DekiInput_GetFeatureCount())
return nullptr;
return &s_Features[index];
}
} // extern "C"
#endif // DEKI_EDITOR