galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
LuaInput.cpp
Go to the documentation of this file.
1
7
8#include <sol/sol.hpp>
9
10#include "galaxy/core/ServiceLocator.hpp"
12#include "galaxy/input/Clipboard.hpp"
13#include "galaxy/input/Cursor.hpp"
14#include "galaxy/input/Input.hpp"
15#include "galaxy/input/InputMods.hpp"
16#include "galaxy/input/Keyboard.hpp"
17#include "galaxy/input/Mouse.hpp"
18
19#include "Lua.hpp"
20
21namespace galaxy
22{
23 namespace lua
24 {
26 {
27 auto& lua = core::ServiceLocator<sol::state>::ref();
28
29 auto camera_controller = lua.new_usertype<input::CameraController>("CameraController", sol::constructors<input::CameraController(graphics::Camera&)>());
30 camera_controller["camera"] = &input::CameraController::m_camera;
31
32 auto clipboard_type = lua.new_usertype<input::Clipboard>("Clipboard", sol::no_constructor);
33 clipboard_type["set"] = &input::Clipboard::set;
34 clipboard_type["get"] = &input::Clipboard::get;
35
36 auto cursor_type = lua.new_usertype<input::Cursor>("Cursor", sol::no_constructor);
37 cursor_type["toggle"] = &input::Cursor::toggle;
38 cursor_type["load_custom"] = &input::Cursor::load_custom;
39 cursor_type["load_custom_mem"] = &input::Cursor::load_custom_mem;
40 cursor_type["use_custom"] = &input::Cursor::use_custom;
41 cursor_type["use_pointer"] = &input::Cursor::use_pointer;
42 cursor_type["use_hand"] = &input::Cursor::use_hand;
43 cursor_type["use_cross"] = &input::Cursor::use_cross;
44 cursor_type["use_text"] = &input::Cursor::use_text;
45 cursor_type["use_custom_else_pointer"] = &input::Cursor::use_custom_else_pointer;
46 cursor_type["within_window"] = &input::Cursor::within_window;
47 cursor_type["destroy"] = &input::Cursor::destroy;
48
49 lua.set_function("galaxy_input_key_down", &input::Input::key_down);
50 lua.set_function("galaxy_input_mouse_down", &input::Input::mouse_button_down);
51 lua.set_function("galaxy_input_cursor_pos", &input::Input::get_cursor_pos);
52
53 lua.set("galaxy_camera_forward", &input::CameraKeys::FORWARD);
54 lua.set("galaxy_camera_backward", &input::CameraKeys::BACKWARD);
55 lua.set("galaxy_camera_left", &input::CameraKeys::LEFT);
56 lua.set("galaxy_camera_right", &input::CameraKeys::RIGHT);
57 lua.set("galaxy_camera_rotate_left", &input::CameraKeys::ROTATE_LEFT);
58 lua.set("galaxy_camera_rotate_right", &input::CameraKeys::ROTATE_RIGHT);
59
60 // clang-format off
61 lua.new_enum<input::InputMods>("InputMods",
62 {
63 {"UNKNOWN", input::InputMods::UNKNOWN},
64 {"SHIFT", input::InputMods::SHIFT},
65 {"CONTROL", input::InputMods::CONTROL},
66 {"ALT", input::InputMods::ALT},
67 {"SUPER", input::InputMods::SUPER},
68 {"CAPS_LOCK", input::InputMods::CAPS_LOCK},
69 {"NUM_LOCK", input::InputMods::NUM_LOCK}
70 });
71 // clang-format on
72
73 lua.set_function("galaxy_int_to_mod", &input::int_to_mod);
74 lua.set_function("galaxy_mod_to_int", &input::mod_to_int);
75
76 auto keyboard_type = lua.new_usertype<input::Keyboard>("Keyboard", sol::no_constructor);
77 keyboard_type["begin_text_input"] = &input::Keyboard::begin_text_input;
78 keyboard_type["end_text_input"] = &input::Keyboard::end_text_input;
79 keyboard_type["enable_sticky_keys"] = &input::Keyboard::enable_sticky_keys;
80 keyboard_type["disable_sticky_keys"] = &input::Keyboard::disable_sticky_keys;
81 keyboard_type["is_text_input_enabled"] = &input::Keyboard::is_text_input_enabled;
82 keyboard_type["get_scancode"] = &input::Keyboard::get_scancode;
83 keyboard_type["get_key_name"] = &input::Keyboard::get_key_name;
84 keyboard_type["get_scancode_name"] = &input::Keyboard::get_scancode_name;
85
86 // clang-format off
87 lua.new_enum<input::Keys>("Keys",
88 {
89 {"KEY_UNKNOWN", input::Keys::KEY_UNKNOWN},
90 {"KEY_SPACE", input::Keys::KEY_SPACE},
91 {"KEY_APOSTROPHE", input::Keys::KEY_APOSTROPHE},
92 {"KEY_COMMA", input::Keys::KEY_COMMA},
93 {"KEY_MINUS", input::Keys::KEY_MINUS},
94 {"KEY_PERIOD", input::Keys::KEY_PERIOD},
95 {"KEY_SLASH", input::Keys::KEY_SLASH},
96 {"KEY_0", input::Keys::KEY_0},
97 {"KEY_1", input::Keys::KEY_1},
98 {"KEY_2", input::Keys::KEY_2},
99 {"KEY_3", input::Keys::KEY_3},
100 {"KEY_4", input::Keys::KEY_4},
101 {"KEY_5", input::Keys::KEY_5},
102 {"KEY_6", input::Keys::KEY_6},
103 {"KEY_7", input::Keys::KEY_7},
104 {"KEY_8", input::Keys::KEY_8},
105 {"KEY_9", input::Keys::KEY_9},
106 {"KEY_SEMICOLON", input::Keys::KEY_SEMICOLON},
107 {"KEY_EQUAL", input::Keys::KEY_EQUAL},
108 {"KEY_A", input::Keys::KEY_A},
109 {"KEY_B", input::Keys::KEY_B},
110 {"KEY_C", input::Keys::KEY_C},
111 {"KEY_D", input::Keys::KEY_D},
112 {"KEY_E", input::Keys::KEY_E},
113 {"KEY_F", input::Keys::KEY_F},
114 {"KEY_G", input::Keys::KEY_G},
115 {"KEY_H", input::Keys::KEY_H},
116 {"KEY_I", input::Keys::KEY_I},
117 {"KEY_J", input::Keys::KEY_J},
118 {"KEY_K", input::Keys::KEY_K},
119 {"KEY_L", input::Keys::KEY_L},
120 {"KEY_M", input::Keys::KEY_M},
121 {"KEY_N", input::Keys::KEY_N},
122 {"KEY_O", input::Keys::KEY_O},
123 {"KEY_P", input::Keys::KEY_P},
124 {"KEY_Q", input::Keys::KEY_Q},
125 {"KEY_R", input::Keys::KEY_R},
126 {"KEY_S", input::Keys::KEY_S},
127 {"KEY_T", input::Keys::KEY_T},
128 {"KEY_U", input::Keys::KEY_U},
129 {"KEY_V", input::Keys::KEY_V},
130 {"KEY_W", input::Keys::KEY_W},
131 {"KEY_X", input::Keys::KEY_X},
132 {"KEY_Y", input::Keys::KEY_Y},
133 {"KEY_Z", input::Keys::KEY_Z},
134 {"KEY_LEFT_BRACKET", input::Keys::KEY_LEFT_BRACKET},
135 {"KEY_BACKSLASH", input::Keys::KEY_BACKSLASH},
136 {"KEY_RIGHT_BRACKET", input::Keys::KEY_RIGHT_BRACKET},
137 {"KEY_GRAVE_ACCENT", input::Keys::KEY_GRAVE_ACCENT},
138 {"KEY_WORLD_1", input::Keys::KEY_WORLD_1},
139 {"KEY_WORLD_2", input::Keys::KEY_WORLD_2},
140 {"KEY_ESCAPE", input::Keys::KEY_ESCAPE},
141 {"KEY_ENTER", input::Keys::KEY_ENTER},
142 {"KEY_TAB", input::Keys::KEY_TAB},
143 {"KEY_BACKSPACE", input::Keys::KEY_BACKSPACE},
144 {"KEY_INSERT", input::Keys::KEY_INSERT},
145 {"KEY_DELETE", input::Keys::KEY_DELETE},
146 {"KEY_RIGHT", input::Keys::KEY_RIGHT},
147 {"KEY_LEFT", input::Keys::KEY_LEFT},
148 {"KEY_DOWN", input::Keys::KEY_DOWN},
149 {"KEY_UP", input::Keys::KEY_UP},
150 {"KEY_PAGE_UP", input::Keys::KEY_PAGE_UP},
151 {"KEY_PAGE_DOWN", input::Keys::KEY_PAGE_DOWN},
152 {"KEY_HOME", input::Keys::KEY_HOME},
153 {"KEY_END", input::Keys::KEY_END},
154 {"KEY_CAPS_LOCK", input::Keys::KEY_CAPS_LOCK},
155 {"KEY_SCROLL_LOCK", input::Keys::KEY_SCROLL_LOCK},
156 {"KEY_NUM_LOCK", input::Keys::KEY_NUM_LOCK},
157 {"KEY_PRINT_SCREEN", input::Keys::KEY_PRINT_SCREEN},
158 {"KEY_PAUSE", input::Keys::KEY_PAUSE},
159 {"KEY_F1", input::Keys::KEY_F1},
160 {"KEY_F2", input::Keys::KEY_F2},
161 {"KEY_F3", input::Keys::KEY_F3},
162 {"KEY_F4", input::Keys::KEY_F4},
163 {"KEY_F5", input::Keys::KEY_F5},
164 {"KEY_F6", input::Keys::KEY_F6},
165 {"KEY_F7", input::Keys::KEY_F7},
166 {"KEY_F8", input::Keys::KEY_F8},
167 {"KEY_F9", input::Keys::KEY_F9},
168 {"KEY_F10", input::Keys::KEY_F10},
169 {"KEY_F11", input::Keys::KEY_F11},
170 {"KEY_F12", input::Keys::KEY_F12},
171 {"KEY_F13", input::Keys::KEY_F13},
172 {"KEY_F14", input::Keys::KEY_F14},
173 {"KEY_F15", input::Keys::KEY_F15},
174 {"KEY_F16", input::Keys::KEY_F16},
175 {"KEY_F17", input::Keys::KEY_F17},
176 {"KEY_F18", input::Keys::KEY_F18},
177 {"KEY_F19", input::Keys::KEY_F19},
178 {"KEY_F20", input::Keys::KEY_F20},
179 {"KEY_F21", input::Keys::KEY_F21},
180 {"KEY_F22", input::Keys::KEY_F22},
181 {"KEY_F23", input::Keys::KEY_F23},
182 {"KEY_F24", input::Keys::KEY_F24},
183 {"KEY_F25", input::Keys::KEY_F25},
184 {"KEY_KP_0", input::Keys::KEY_KP_0},
185 {"KEY_KP_1", input::Keys::KEY_KP_1},
186 {"KEY_KP_2", input::Keys::KEY_KP_2},
187 {"KEY_KP_3", input::Keys::KEY_KP_3},
188 {"KEY_KP_4", input::Keys::KEY_KP_4},
189 {"KEY_KP_5", input::Keys::KEY_KP_5},
190 {"KEY_KP_6", input::Keys::KEY_KP_6},
191 {"KEY_KP_7", input::Keys::KEY_KP_7},
192 {"KEY_KP_8", input::Keys::KEY_KP_8},
193 {"KEY_KP_9", input::Keys::KEY_KP_9},
194 {"KEY_KP_DECIMAL", input::Keys::KEY_KP_DECIMAL},
195 {"KEY_KP_DIVIDE", input::Keys::KEY_KP_DIVIDE},
196 {"KEY_KP_MULTIPLY", input::Keys::KEY_KP_MULTIPLY},
197 {"KEY_KP_SUBTRACT", input::Keys::KEY_KP_SUBTRACT},
198 {"KEY_KP_ADD", input::Keys::KEY_KP_ADD},
199 {"KEY_KP_ENTER", input::Keys::KEY_KP_ENTER},
200 {"KEY_KP_EQUAL", input::Keys::KEY_KP_EQUAL},
201 {"KEY_LEFT_SHIFT", input::Keys::KEY_LEFT_SHIFT},
202 {"KEY_LEFT_CONTROL", input::Keys::KEY_LEFT_CONTROL},
203 {"KEY_LEFT_ALT", input::Keys::KEY_LEFT_ALT},
204 {"KEY_LEFT_SUPER", input::Keys::KEY_LEFT_SUPER},
205 {"KEY_RIGHT_SHIFT", input::Keys::KEY_RIGHT_SHIFT},
206 {"KEY_RIGHT_CONTROL", input::Keys::KEY_RIGHT_CONTROL},
207 {"KEY_RIGHT_ALT", input::Keys::KEY_RIGHT_ALT},
208 {"KEY_RIGHT_SUPER", input::Keys::KEY_RIGHT_SUPER},
209 {"KEY_MENU", input::Keys::KEY_MENU}
210 });
211 // clang-format on
212
213 lua.set_function("galaxy_int_to_key", &input::int_to_key);
214 lua.set_function("galaxy_key_to_int", &input::key_to_int);
215
216 auto mouse_type = lua.new_usertype<input::Mouse>("Mouse", sol::no_constructor);
217 mouse_type["disable_sticky_mouse"] = &input::Mouse::disable_sticky_mouse;
218 mouse_type["enable_sticky_mouse"] = &input::Mouse::enable_sticky_mouse;
219 mouse_type["get_pos"] = &input::Mouse::get_pos;
220
221 // clang-format off
222 lua.new_enum<input::MouseButtons>("MouseButtons",
223 {
224 {"UNKNOWN", input::MouseButtons::UNKNOWN},
225 {"BTN_1", input::MouseButtons::BTN_1},
226 {"BTN_2", input::MouseButtons::BTN_2},
227 {"BTN_3", input::MouseButtons::BTN_3},
228 {"BTN_4", input::MouseButtons::BTN_4},
229 {"BTN_5", input::MouseButtons::BTN_5},
230 {"BTN_6", input::MouseButtons::BTN_6},
231 {"BTN_7", input::MouseButtons::BTN_7},
232 {"BTN_8", input::MouseButtons::BTN_8},
233 {"BTN_LAST", input::MouseButtons::BTN_LAST},
234 {"BTN_LEFT", input::MouseButtons::BTN_LEFT},
235 {"BTN_RIGHT", input::MouseButtons::BTN_RIGHT},
236 {"BTN_MIDDLE", input::MouseButtons::BTN_MIDDLE}
237 });
238 // clang-format on
239
240 lua.set_function("galaxy_int_to_mouse", &input::int_to_mouse);
241 lua.set_function("galaxy_mouse_to_int", &input::mouse_to_int);
242 }
243 } // namespace lua
244} // namespace galaxy
Orthographic camera input wrapper.
std::reference_wrapper< graphics::Camera > m_camera
Camera object being manipulated.
void inject_input()
Injects input handling into Lua.
Definition LuaInput.cpp:25
Timer.hpp galaxy.
Definition Async.hpp:17