rgss 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.clang-format +6 -0
- data/.gitignore +167 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/Rakefile +9 -0
- data/ext/rgss/cglm-v0.7.9.tar.gz +0 -0
- data/ext/rgss/color.c +599 -0
- data/ext/rgss/entity.c +373 -0
- data/ext/rgss/extconf.rb +53 -0
- data/ext/rgss/font.c +135 -0
- data/ext/rgss/game.c +469 -0
- data/ext/rgss/game.h +99 -0
- data/ext/rgss/gl.c +3217 -0
- data/ext/rgss/glad.c +1140 -0
- data/ext/rgss/glad.h +2129 -0
- data/ext/rgss/glfw.c +1453 -0
- data/ext/rgss/graphics.c +324 -0
- data/ext/rgss/image.c +274 -0
- data/ext/rgss/input.c +745 -0
- data/ext/rgss/khrplatform.h +290 -0
- data/ext/rgss/mat4.c +279 -0
- data/ext/rgss/pax_global_header +1 -0
- data/ext/rgss/point.c +253 -0
- data/ext/rgss/rect.c +449 -0
- data/ext/rgss/rgss.c +56 -0
- data/ext/rgss/rgss.h +241 -0
- data/ext/rgss/stb_image.h +7762 -0
- data/ext/rgss/stb_image_write.h +1690 -0
- data/ext/rgss/stb_rect_pack.h +628 -0
- data/ext/rgss/stb_truetype.h +5011 -0
- data/ext/rgss/utf8.h +1652 -0
- data/ext/rgss/uthash.h +1133 -0
- data/ext/rgss/vec.c +114 -0
- data/ext/rgss/vec.h +192 -0
- data/ext/rgss/vec2.c +489 -0
- data/ext/rgss/vec3.c +751 -0
- data/ext/rgss/vec4.c +681 -0
- data/lib/rgss.rb +140 -0
- data/lib/rgss/batch.rb +57 -0
- data/lib/rgss/blend.rb +47 -0
- data/lib/rgss/game_object.rb +28 -0
- data/lib/rgss/plane.rb +95 -0
- data/lib/rgss/renderable.rb +158 -0
- data/lib/rgss/rgss.so +0 -0
- data/lib/rgss/shader.rb +94 -0
- data/lib/rgss/shaders/sprite-frag.glsl +40 -0
- data/lib/rgss/shaders/sprite-vert.glsl +17 -0
- data/lib/rgss/sprite.rb +139 -0
- data/lib/rgss/stubs/color.rb +318 -0
- data/lib/rgss/stubs/gl.rb +1999 -0
- data/lib/rgss/stubs/glfw.rb +626 -0
- data/lib/rgss/stubs/rect.rb +324 -0
- data/lib/rgss/stubs/rpg.rb +267 -0
- data/lib/rgss/stubs/tone.rb +65 -0
- data/lib/rgss/texture.rb +132 -0
- data/lib/rgss/tilemap.rb +116 -0
- data/lib/rgss/version.rb +3 -0
- data/lib/rgss/viewport.rb +67 -0
- data/rgss.gemspec +44 -0
- data/test.png +0 -0
- metadata +178 -0
data/ext/rgss/input.c
ADDED
@@ -0,0 +1,745 @@
|
|
1
|
+
#include "game.h"
|
2
|
+
#include "utf8.h"
|
3
|
+
|
4
|
+
#define INPUT RGSS_GAME.input
|
5
|
+
#define INPUT_RELEASE -2
|
6
|
+
#define INPUT_NONE -1
|
7
|
+
#define INPUT_PRESS 0
|
8
|
+
#define INPUT_DOWN 1
|
9
|
+
#define INPUT_REPEAT_RATE 3
|
10
|
+
|
11
|
+
#define RGSS_TEXT_CALLBACK "@on_text"
|
12
|
+
#define RGSS_FOCUS_CALLBACK "@on_focus"
|
13
|
+
|
14
|
+
#define KEY(k) RGSS_GAME.input.state.key[k]
|
15
|
+
#define MBTN(btn) RGSS_GAME.input.state.mouse[btn]
|
16
|
+
#define GPBTN(btn) RGSS_GAME.input.state.gamepad[btn]
|
17
|
+
|
18
|
+
VALUE rb_mInput;
|
19
|
+
|
20
|
+
|
21
|
+
static inline void RGSS_Mapping_Init(vec_int_t *array, VALUE inputs, int max_value)
|
22
|
+
{
|
23
|
+
if (!RTEST(inputs))
|
24
|
+
return;
|
25
|
+
|
26
|
+
int value;
|
27
|
+
vec_init(array);
|
28
|
+
if (RB_TYPE_P(inputs, T_ARRAY))
|
29
|
+
{
|
30
|
+
long len = rb_array_len(inputs);
|
31
|
+
for (long i = 0; i < len; i++)
|
32
|
+
{
|
33
|
+
value = NUM2INT(rb_ary_entry(inputs, i));
|
34
|
+
if (value < 0 || value > max_value)
|
35
|
+
{
|
36
|
+
rb_warn("invalid input specified: %d (out of range)", value);
|
37
|
+
continue;
|
38
|
+
}
|
39
|
+
vec_push(array, value);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
else
|
43
|
+
{
|
44
|
+
value = NUM2INT(inputs);
|
45
|
+
if (value < 0 || value > max_value)
|
46
|
+
{
|
47
|
+
rb_warn("invalid input specified: %d (out of range)", value);
|
48
|
+
return;
|
49
|
+
}
|
50
|
+
vec_push(array, value);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
|
55
|
+
static VALUE RGSS_Input_Bind(int argc, VALUE *argv, VALUE input)
|
56
|
+
{
|
57
|
+
|
58
|
+
RGSS_ASSERT_GAME;
|
59
|
+
|
60
|
+
VALUE name, keys, mouse, gamepad;
|
61
|
+
rb_scan_args(argc, argv, "13", &name, &keys, &mouse, &gamepad);
|
62
|
+
|
63
|
+
RGSS_Mapping *mapping;
|
64
|
+
ID id = RB_TYPE_P(name, T_SYMBOL) ? SYM2ID(name) : rb_intern_str(name);;
|
65
|
+
|
66
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
67
|
+
if (mapping)
|
68
|
+
{
|
69
|
+
// Free any mapping that may exist at key
|
70
|
+
HASH_DEL(RGSS_GAME.input.bindings, mapping);
|
71
|
+
xfree(mapping);
|
72
|
+
}
|
73
|
+
|
74
|
+
mapping = ALLOC(RGSS_Mapping);
|
75
|
+
memset(mapping, 0, sizeof(RGSS_Mapping));
|
76
|
+
|
77
|
+
mapping->id = id;
|
78
|
+
RGSS_Mapping_Init(&mapping->keys, keys, GLFW_KEY_LAST);
|
79
|
+
RGSS_Mapping_Init(&mapping->mouse_buttons, mouse, GLFW_MOUSE_BUTTON_LAST);
|
80
|
+
RGSS_Mapping_Init(&mapping->gamepad_buttons, gamepad, GLFW_GAMEPAD_BUTTON_LAST);
|
81
|
+
|
82
|
+
HASH_ADD(hh, RGSS_GAME.input.bindings, id, sizeof(ID), mapping);
|
83
|
+
return Qtrue;
|
84
|
+
}
|
85
|
+
|
86
|
+
static VALUE RGSS_Input_Unbind(VALUE input, VALUE name)
|
87
|
+
{
|
88
|
+
|
89
|
+
RGSS_Mapping *mapping;
|
90
|
+
ID id = RB_TYPE_P(name, T_SYMBOL) ? SYM2ID(name) : rb_intern(StringValueCStr(name));
|
91
|
+
|
92
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
93
|
+
|
94
|
+
if (mapping)
|
95
|
+
{
|
96
|
+
HASH_DEL(RGSS_GAME.input.bindings, mapping);
|
97
|
+
|
98
|
+
vec_deinit(&mapping->keys);
|
99
|
+
vec_deinit(&mapping->mouse_buttons);
|
100
|
+
vec_deinit(&mapping->gamepad_buttons);
|
101
|
+
xfree(mapping);
|
102
|
+
return Qtrue;
|
103
|
+
}
|
104
|
+
|
105
|
+
return Qfalse;
|
106
|
+
}
|
107
|
+
|
108
|
+
static VALUE RGSS_Input_EachBinding(VALUE input)
|
109
|
+
{
|
110
|
+
RETURN_ENUMERATOR(input, 0, NULL);
|
111
|
+
|
112
|
+
RGSS_Mapping *mapping, *temp;
|
113
|
+
VALUE name, keys, mouse, gamepad;
|
114
|
+
|
115
|
+
int i, value;
|
116
|
+
|
117
|
+
HASH_ITER(hh, RGSS_GAME.input.bindings, mapping, temp)
|
118
|
+
{
|
119
|
+
name = ID2SYM(mapping->id);
|
120
|
+
keys = rb_ary_new_capa(mapping->keys.length);
|
121
|
+
mouse = rb_ary_new_capa(mapping->mouse_buttons.length);
|
122
|
+
gamepad = rb_ary_new_capa(mapping->gamepad_buttons.length);
|
123
|
+
|
124
|
+
vec_foreach(&mapping->keys, value, i)
|
125
|
+
rb_ary_push(keys, INT2NUM(value));
|
126
|
+
|
127
|
+
vec_foreach(&mapping->mouse_buttons, value, i)
|
128
|
+
rb_ary_push(mouse, INT2NUM(value));
|
129
|
+
|
130
|
+
vec_foreach(&mapping->gamepad_buttons, value, i)
|
131
|
+
rb_ary_push(gamepad, INT2NUM(value));
|
132
|
+
|
133
|
+
rb_yield_values(4, name, keys, mouse, gamepad);
|
134
|
+
}
|
135
|
+
|
136
|
+
return Qnil;
|
137
|
+
}
|
138
|
+
|
139
|
+
static void RGSS_Input_KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
140
|
+
{
|
141
|
+
|
142
|
+
if (key == GLFW_KEY_UNKNOWN)
|
143
|
+
return;
|
144
|
+
|
145
|
+
if (action == GLFW_PRESS)
|
146
|
+
RGSS_GAME.input.state.key[key] = INPUT_PRESS;
|
147
|
+
else if (action == GLFW_RELEASE)
|
148
|
+
RGSS_GAME.input.state.key[key] = INPUT_RELEASE;
|
149
|
+
}
|
150
|
+
|
151
|
+
static void RGSS_Input_MouseCallback(GLFWwindow *window, int key, int action, int mods)
|
152
|
+
{
|
153
|
+
|
154
|
+
if (key == GLFW_KEY_UNKNOWN)
|
155
|
+
return;
|
156
|
+
|
157
|
+
if (action == GLFW_PRESS)
|
158
|
+
RGSS_GAME.input.state.mouse[key] = INPUT_PRESS;
|
159
|
+
else if (action == GLFW_RELEASE)
|
160
|
+
RGSS_GAME.input.state.mouse[key] = INPUT_RELEASE;
|
161
|
+
}
|
162
|
+
|
163
|
+
void RGSS_Input_Update(void)
|
164
|
+
{
|
165
|
+
|
166
|
+
for (int i = 0; i < GLFW_KEY_LAST + 1; i++)
|
167
|
+
{
|
168
|
+
if (KEY(i) >= INPUT_PRESS)
|
169
|
+
{
|
170
|
+
if (++KEY(i) > INPUT_REPEAT_RATE)
|
171
|
+
KEY(i) = INPUT_DOWN;
|
172
|
+
}
|
173
|
+
else if (KEY(i) == INPUT_RELEASE)
|
174
|
+
KEY(i) = INPUT_NONE;
|
175
|
+
}
|
176
|
+
|
177
|
+
for (int i = 0; i < GLFW_MOUSE_BUTTON_LAST + 1; i++)
|
178
|
+
{
|
179
|
+
if (MBTN(i) >= INPUT_PRESS)
|
180
|
+
{
|
181
|
+
if (++MBTN(i) > INPUT_REPEAT_RATE)
|
182
|
+
MBTN(i) = INPUT_DOWN;
|
183
|
+
}
|
184
|
+
else if (MBTN(i) == INPUT_RELEASE)
|
185
|
+
MBTN(i) = INPUT_NONE;
|
186
|
+
}
|
187
|
+
|
188
|
+
RGSS_GAME.input.state.scroll_x = 0.0;
|
189
|
+
RGSS_GAME.input.state.scroll_y = 0.0;
|
190
|
+
}
|
191
|
+
|
192
|
+
static VALUE RGSS_Input_IsTriggered(VALUE input, VALUE sym)
|
193
|
+
{
|
194
|
+
ID id = SYM2ID(sym);
|
195
|
+
|
196
|
+
RGSS_Mapping *mapping;
|
197
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
198
|
+
|
199
|
+
if (mapping == NULL)
|
200
|
+
return Qfalse;
|
201
|
+
|
202
|
+
int state, value, i;
|
203
|
+
|
204
|
+
// Check keyboard keys
|
205
|
+
vec_foreach(&mapping->keys, value, i)
|
206
|
+
{
|
207
|
+
state = RGSS_GAME.input.state.key[value];
|
208
|
+
if (state == INPUT_PRESS)
|
209
|
+
return Qtrue;
|
210
|
+
}
|
211
|
+
|
212
|
+
// Check mouse input
|
213
|
+
vec_foreach(&mapping->mouse_buttons, value, i)
|
214
|
+
{
|
215
|
+
state = RGSS_GAME.input.state.mouse[value];
|
216
|
+
if (state == INPUT_PRESS)
|
217
|
+
return Qtrue;
|
218
|
+
}
|
219
|
+
|
220
|
+
// TODO: Check if gamepad connected, then query for input if so
|
221
|
+
|
222
|
+
return Qfalse;
|
223
|
+
}
|
224
|
+
|
225
|
+
static VALUE RGSS_Input_IsDown(VALUE input, VALUE sym)
|
226
|
+
{
|
227
|
+
ID id = SYM2ID(sym);
|
228
|
+
|
229
|
+
RGSS_Mapping *mapping;
|
230
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
231
|
+
|
232
|
+
if (mapping == NULL)
|
233
|
+
return Qfalse;
|
234
|
+
|
235
|
+
int state, value, i;
|
236
|
+
|
237
|
+
// Check keyboard keys
|
238
|
+
vec_foreach(&mapping->keys, value, i)
|
239
|
+
{
|
240
|
+
state = RGSS_GAME.input.state.key[value];
|
241
|
+
if (state >= INPUT_PRESS)
|
242
|
+
return Qtrue;
|
243
|
+
}
|
244
|
+
|
245
|
+
// Check mouse input
|
246
|
+
vec_foreach(&mapping->mouse_buttons, value, i)
|
247
|
+
{
|
248
|
+
state = RGSS_GAME.input.state.mouse[value];
|
249
|
+
if (state >= INPUT_PRESS)
|
250
|
+
return Qtrue;
|
251
|
+
}
|
252
|
+
|
253
|
+
// TODO: Check if gamepad connected, then query for input if so
|
254
|
+
|
255
|
+
return Qfalse;
|
256
|
+
}
|
257
|
+
|
258
|
+
static VALUE RGSS_Input_IsRepeated(VALUE input, VALUE sym)
|
259
|
+
{
|
260
|
+
ID id = SYM2ID(sym);
|
261
|
+
|
262
|
+
RGSS_Mapping *mapping;
|
263
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
264
|
+
|
265
|
+
if (mapping == NULL)
|
266
|
+
return Qfalse;
|
267
|
+
|
268
|
+
int state, value, i;
|
269
|
+
|
270
|
+
// Check keyboard keys
|
271
|
+
vec_foreach(&mapping->keys, value, i)
|
272
|
+
{
|
273
|
+
state = RGSS_GAME.input.state.key[value];
|
274
|
+
if (state == INPUT_REPEAT_RATE)
|
275
|
+
return Qtrue;
|
276
|
+
}
|
277
|
+
|
278
|
+
// Check mouse input
|
279
|
+
vec_foreach(&mapping->mouse_buttons, value, i)
|
280
|
+
{
|
281
|
+
state = RGSS_GAME.input.state.mouse[value];
|
282
|
+
if (state == INPUT_REPEAT_RATE)
|
283
|
+
return Qtrue;
|
284
|
+
}
|
285
|
+
|
286
|
+
// TODO: Check if gamepad connected, then query for input if so
|
287
|
+
|
288
|
+
return Qfalse;
|
289
|
+
}
|
290
|
+
|
291
|
+
static VALUE RGSS_Input_IsReleased(VALUE input, VALUE sym)
|
292
|
+
{
|
293
|
+
ID id = SYM2ID(sym);
|
294
|
+
|
295
|
+
RGSS_Mapping *mapping;
|
296
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
297
|
+
|
298
|
+
if (mapping == NULL)
|
299
|
+
return Qfalse;
|
300
|
+
|
301
|
+
int state, value, i;
|
302
|
+
|
303
|
+
// Check keyboard keys
|
304
|
+
vec_foreach(&mapping->keys, value, i)
|
305
|
+
{
|
306
|
+
state = RGSS_GAME.input.state.key[value];
|
307
|
+
if (state == INPUT_RELEASE)
|
308
|
+
return Qtrue;
|
309
|
+
}
|
310
|
+
|
311
|
+
// Check mouse input
|
312
|
+
vec_foreach(&mapping->mouse_buttons, value, i)
|
313
|
+
{
|
314
|
+
state = RGSS_GAME.input.state.mouse[value];
|
315
|
+
if (state == INPUT_RELEASE)
|
316
|
+
return Qtrue;
|
317
|
+
}
|
318
|
+
|
319
|
+
// TODO: Check if gamepad connected, then query for input if so
|
320
|
+
|
321
|
+
return Qfalse;
|
322
|
+
}
|
323
|
+
|
324
|
+
static VALUE RGSS_Input_IsUp(VALUE input, VALUE sym)
|
325
|
+
{
|
326
|
+
ID id = SYM2ID(sym);
|
327
|
+
|
328
|
+
RGSS_Mapping *mapping;
|
329
|
+
HASH_FIND(hh, RGSS_GAME.input.bindings, &id, sizeof(ID), mapping);
|
330
|
+
|
331
|
+
if (mapping == NULL)
|
332
|
+
return Qfalse;
|
333
|
+
|
334
|
+
int state, value, i;
|
335
|
+
|
336
|
+
// Check keyboard keys
|
337
|
+
vec_foreach(&mapping->keys, value, i)
|
338
|
+
{
|
339
|
+
state = RGSS_GAME.input.state.key[value];
|
340
|
+
if (state <= INPUT_NONE)
|
341
|
+
return Qtrue;
|
342
|
+
}
|
343
|
+
|
344
|
+
// Check mouse input
|
345
|
+
vec_foreach(&mapping->mouse_buttons, value, i)
|
346
|
+
{
|
347
|
+
state = RGSS_GAME.input.state.mouse[value];
|
348
|
+
if (state <= INPUT_NONE)
|
349
|
+
return Qtrue;
|
350
|
+
}
|
351
|
+
|
352
|
+
// TODO: Check if gamepad connected, then query for input if so
|
353
|
+
|
354
|
+
return Qfalse;
|
355
|
+
}
|
356
|
+
|
357
|
+
static VALUE RGSS_Input_GetCursorX(VALUE input)
|
358
|
+
{
|
359
|
+
// TODO: Translate to world space
|
360
|
+
double x;
|
361
|
+
glfwGetCursorPos(RGSS_GAME.window, &x, NULL);
|
362
|
+
|
363
|
+
return DBL2NUM(x);
|
364
|
+
}
|
365
|
+
|
366
|
+
static VALUE RGSS_Input_GetCursorY(VALUE input)
|
367
|
+
{
|
368
|
+
// TODO: Translate to world space
|
369
|
+
double y;
|
370
|
+
glfwGetCursorPos(RGSS_GAME.window, NULL, &y);
|
371
|
+
|
372
|
+
return DBL2NUM(y);
|
373
|
+
}
|
374
|
+
|
375
|
+
static VALUE RGSS_Input_GetScrollX(VALUE inpue)
|
376
|
+
{
|
377
|
+
return DBL2NUM(RGSS_GAME.input.state.scroll_x);
|
378
|
+
}
|
379
|
+
|
380
|
+
static VALUE RGSS_Input_GetScrollY(VALUE inpue)
|
381
|
+
{
|
382
|
+
return DBL2NUM(RGSS_GAME.input.state.scroll_y);
|
383
|
+
}
|
384
|
+
|
385
|
+
static void RGSS_Input_ScrollCallback(GLFWwindow *window, double x, double y)
|
386
|
+
{
|
387
|
+
RGSS_GAME.input.state.scroll_x += x;
|
388
|
+
RGSS_GAME.input.state.scroll_y += y;
|
389
|
+
}
|
390
|
+
|
391
|
+
static VALUE RGSS_Input_Clear(VALUE input)
|
392
|
+
{
|
393
|
+
memset(RGSS_GAME.input.state.key, INPUT_NONE, sizeof(RGSS_GAME.input.state.key));
|
394
|
+
memset(RGSS_GAME.input.state.mouse, INPUT_NONE, sizeof(RGSS_GAME.input.state.mouse));
|
395
|
+
memset(RGSS_GAME.input.state.gamepad, INPUT_NONE, sizeof(RGSS_GAME.input.state.gamepad));
|
396
|
+
|
397
|
+
RGSS_GAME.input.state.scroll_x = 0.0;
|
398
|
+
RGSS_GAME.input.state.scroll_y = 0.0;
|
399
|
+
}
|
400
|
+
|
401
|
+
static void RGSS_Input_FocusCallback(GLFWwindow *window, int focused)
|
402
|
+
{
|
403
|
+
if (!focused)
|
404
|
+
RGSS_Input_Clear(rb_mInput);
|
405
|
+
|
406
|
+
VALUE proc = rb_iv_get(rb_mInput, RGSS_FOCUS_CALLBACK);
|
407
|
+
if (RTEST(proc))
|
408
|
+
{
|
409
|
+
rb_proc_call(proc, rb_ary_new_from_args(1, RB_BOOL(focused)));
|
410
|
+
}
|
411
|
+
}
|
412
|
+
|
413
|
+
static VALUE RGSS_Input_OnFocus(VALUE input)
|
414
|
+
{
|
415
|
+
VALUE proc, current;
|
416
|
+
|
417
|
+
current = rb_iv_get(rb_mInput, RGSS_FOCUS_CALLBACK);
|
418
|
+
proc = rb_block_given_p() ? rb_block_proc() : Qnil;
|
419
|
+
|
420
|
+
rb_iv_set(rb_mInput, RGSS_FOCUS_CALLBACK, proc);
|
421
|
+
return current;
|
422
|
+
}
|
423
|
+
|
424
|
+
void RGSS_Input_Init(GLFWwindow *window)
|
425
|
+
{
|
426
|
+
glfwSetKeyCallback(window, RGSS_Input_KeyCallback);
|
427
|
+
glfwSetMouseButtonCallback(window, RGSS_Input_MouseCallback);
|
428
|
+
glfwSetScrollCallback(window, RGSS_Input_ScrollCallback);
|
429
|
+
glfwSetWindowFocusCallback(window, RGSS_Input_FocusCallback);
|
430
|
+
|
431
|
+
RGSS_GAME.input.bindings = NULL;
|
432
|
+
RGSS_GAME.input.cursor = NULL;
|
433
|
+
RGSS_Input_Clear(rb_mInput);
|
434
|
+
}
|
435
|
+
|
436
|
+
void RGSS_Input_Deinit(GLFWwindow *window)
|
437
|
+
{
|
438
|
+
if (window == NULL)
|
439
|
+
return;
|
440
|
+
|
441
|
+
glfwSetKeyCallback(window, NULL);
|
442
|
+
glfwSetMouseButtonCallback(window, NULL);
|
443
|
+
glfwSetScrollCallback(window, NULL);
|
444
|
+
glfwSetWindowFocusCallback(window, NULL);
|
445
|
+
|
446
|
+
RGSS_GAME.input.bindings = NULL;
|
447
|
+
RGSS_GAME.input.cursor = NULL;
|
448
|
+
RGSS_Input_Clear(rb_mInput);
|
449
|
+
}
|
450
|
+
|
451
|
+
|
452
|
+
static void RGSS_Input_TextCallback(GLFWwindow *window, unsigned int codepoint)
|
453
|
+
{
|
454
|
+
VALUE proc = rb_iv_get(rb_mInput, RGSS_TEXT_CALLBACK);
|
455
|
+
if (!RTEST(proc))
|
456
|
+
{
|
457
|
+
glfwSetCharCallback(RGSS_GAME.window, NULL);
|
458
|
+
return;
|
459
|
+
}
|
460
|
+
|
461
|
+
size_t size = utf8codepointcalcsize(&codepoint);
|
462
|
+
|
463
|
+
VALUE args = rb_utf8_str_new((char *)&codepoint, size);
|
464
|
+
rb_proc_call(proc, rb_ary_new_from_args(1, args));
|
465
|
+
}
|
466
|
+
|
467
|
+
static VALUE RGSS_Input_OnText(VALUE input)
|
468
|
+
{
|
469
|
+
GLFWcharfun callback;
|
470
|
+
VALUE proc, current;
|
471
|
+
|
472
|
+
current = rb_iv_get(input, RGSS_TEXT_CALLBACK);
|
473
|
+
if (rb_block_given_p())
|
474
|
+
{
|
475
|
+
proc = rb_block_proc();
|
476
|
+
callback = RGSS_Input_TextCallback;
|
477
|
+
}
|
478
|
+
else
|
479
|
+
{
|
480
|
+
proc = Qnil;
|
481
|
+
callback = NULL;
|
482
|
+
}
|
483
|
+
|
484
|
+
rb_iv_set(input, RGSS_TEXT_CALLBACK, proc);
|
485
|
+
glfwSetCharCallback(RGSS_GAME.window, callback);
|
486
|
+
|
487
|
+
return current;
|
488
|
+
}
|
489
|
+
|
490
|
+
static VALUE RGSS_Input_IsCursorEnabled(VALUE input)
|
491
|
+
{
|
492
|
+
RGSS_ASSERT_GAME;
|
493
|
+
int mode = glfwGetInputMode(RGSS_GAME.window, GLFW_CURSOR);
|
494
|
+
return RB_BOOL(mode != GLFW_CURSOR_DISABLED);
|
495
|
+
}
|
496
|
+
|
497
|
+
static VALUE RGSS_Input_IsCursorHidden(VALUE input)
|
498
|
+
{
|
499
|
+
RGSS_ASSERT_GAME;
|
500
|
+
int mode = glfwGetInputMode(RGSS_GAME.window, GLFW_CURSOR);
|
501
|
+
return RB_BOOL(mode != GLFW_CURSOR_HIDDEN);
|
502
|
+
}
|
503
|
+
|
504
|
+
static VALUE RGSS_Input_IsCursorVisible(VALUE input)
|
505
|
+
{
|
506
|
+
RGSS_ASSERT_GAME;
|
507
|
+
int mode = glfwGetInputMode(RGSS_GAME.window, GLFW_CURSOR);
|
508
|
+
return RB_BOOL(mode == GLFW_CURSOR_NORMAL);
|
509
|
+
}
|
510
|
+
|
511
|
+
static VALUE RGSS_Input_EnableCursor(VALUE input, VALUE value)
|
512
|
+
{
|
513
|
+
RGSS_ASSERT_GAME;
|
514
|
+
glfwSetInputMode(RGSS_GAME.window, GLFW_CURSOR, RTEST(value) ? GLFW_CURSOR_DISABLED : GLFW_CURSOR_NORMAL);
|
515
|
+
return Qnil;
|
516
|
+
}
|
517
|
+
|
518
|
+
static VALUE RGSS_Input_HideCursor(VALUE input, VALUE value)
|
519
|
+
{
|
520
|
+
RGSS_ASSERT_GAME;
|
521
|
+
glfwSetInputMode(RGSS_GAME.window, GLFW_CURSOR, RTEST(value) ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL);
|
522
|
+
return Qnil;
|
523
|
+
}
|
524
|
+
|
525
|
+
static VALUE RGSS_Input_GetCursor(VALUE input)
|
526
|
+
{
|
527
|
+
RGSS_ASSERT_GAME;
|
528
|
+
double x, y;
|
529
|
+
glfwGetCursorPos(RGSS_GAME.window, &x, &y);
|
530
|
+
return RGSS_Point_New((int) round(x), (int) round(y));
|
531
|
+
}
|
532
|
+
|
533
|
+
static VALUE RGSS_Input_SetCursorImage(int argc, VALUE *argv, VALUE input)
|
534
|
+
{
|
535
|
+
RGSS_ASSERT_GAME;
|
536
|
+
|
537
|
+
VALUE source, x, y;
|
538
|
+
rb_scan_args(argc, argv, "12", &source, &x, &y);
|
539
|
+
|
540
|
+
GLFWimage image;
|
541
|
+
GLFWcursor *cursor = NULL;
|
542
|
+
|
543
|
+
if (RTEST(source))
|
544
|
+
{
|
545
|
+
int xhot = RTEST(x) ? NUM2INT(x) : 0;
|
546
|
+
int yhot = RTEST(y) ? NUM2INT(y) : 0;
|
547
|
+
|
548
|
+
|
549
|
+
if (RB_TYPE_P(source, T_DATA))
|
550
|
+
{
|
551
|
+
image = *((GLFWimage*) DATA_PTR(source));
|
552
|
+
cursor = glfwCreateCursor(&image, xhot, yhot);
|
553
|
+
}
|
554
|
+
else if (RB_TYPE_P(source, T_STRING))
|
555
|
+
{
|
556
|
+
RGSS_Image_Load(StringValueCStr(source), &image.width, &image.height, &image.pixels);
|
557
|
+
cursor = glfwCreateCursor(&image, xhot, yhot);
|
558
|
+
xfree(image.pixels);
|
559
|
+
}
|
560
|
+
else
|
561
|
+
{
|
562
|
+
int shape = NUM2INT(source);
|
563
|
+
cursor = glfwCreateStandardCursor(shape);
|
564
|
+
}
|
565
|
+
}
|
566
|
+
|
567
|
+
if (RGSS_GAME.input.cursor)
|
568
|
+
{
|
569
|
+
glfwDestroyCursor(RGSS_GAME.input.cursor);
|
570
|
+
}
|
571
|
+
|
572
|
+
RGSS_GAME.input.cursor = cursor;
|
573
|
+
glfwSetCursor(RGSS_GAME.window, cursor);
|
574
|
+
|
575
|
+
return source;
|
576
|
+
}
|
577
|
+
|
578
|
+
void RGSS_Init_Input(VALUE parent)
|
579
|
+
{
|
580
|
+
rb_mInput = rb_define_module_under(parent, "Input");
|
581
|
+
|
582
|
+
rb_define_singleton_methodm1(rb_mInput, "bind", RGSS_Input_Bind, -1);
|
583
|
+
rb_define_singleton_method1(rb_mInput, "unbind", RGSS_Input_Unbind, 1);
|
584
|
+
rb_define_singleton_method0(rb_mInput, "each_binding", RGSS_Input_EachBinding, 0);
|
585
|
+
rb_define_singleton_method1(rb_mInput, "trigger?", RGSS_Input_IsTriggered, 1);
|
586
|
+
rb_define_singleton_method1(rb_mInput, "down?", RGSS_Input_IsDown, 1);
|
587
|
+
rb_define_singleton_method1(rb_mInput, "repeat?", RGSS_Input_IsRepeated, 1);
|
588
|
+
rb_define_singleton_method1(rb_mInput, "release?", RGSS_Input_IsReleased, 1);
|
589
|
+
rb_define_singleton_method1(rb_mInput, "up?", RGSS_Input_IsUp, 1);
|
590
|
+
rb_define_singleton_method0(rb_mInput, "scroll_x", RGSS_Input_GetScrollX, 0);
|
591
|
+
rb_define_singleton_method0(rb_mInput, "scroll_y", RGSS_Input_GetScrollY, 0);
|
592
|
+
|
593
|
+
VALUE singleton = rb_singleton_class(rb_mInput);
|
594
|
+
|
595
|
+
rb_define_alias(singleton, "press?", "down?");
|
596
|
+
rb_define_alias(singleton, "none?", "up?");
|
597
|
+
|
598
|
+
rb_define_singleton_method0(rb_mInput, "on_text", RGSS_Input_OnText, 0);
|
599
|
+
rb_define_singleton_method0(rb_mInput, "on_focus", RGSS_Input_OnFocus, 0);
|
600
|
+
|
601
|
+
rb_define_singleton_method0(rb_mInput, "cursor", RGSS_Input_GetCursor, 0);
|
602
|
+
rb_define_singleton_method1(rb_mInput, "enable_cursor", RGSS_Input_EnableCursor, 1);
|
603
|
+
rb_define_singleton_method1(rb_mInput, "hide_cursor", RGSS_Input_HideCursor, 1);
|
604
|
+
rb_define_singleton_method0(rb_mInput, "cursor_enabled?", RGSS_Input_IsCursorEnabled, 0);
|
605
|
+
rb_define_singleton_method0(rb_mInput, "cursor_hidden?", RGSS_Input_IsCursorHidden, 0);
|
606
|
+
rb_define_singleton_method0(rb_mInput, "cursor_visible?", RGSS_Input_IsCursorVisible, 0);
|
607
|
+
rb_define_singleton_method0(rb_mInput, "cursor_x", RGSS_Input_GetCursorX, 0);
|
608
|
+
rb_define_singleton_method0(rb_mInput, "cursor_y", RGSS_Input_GetCursorY, 0);
|
609
|
+
rb_define_singleton_methodm1(rb_mInput, "cursor_image", RGSS_Input_SetCursorImage, -1);
|
610
|
+
|
611
|
+
rb_define_const(rb_mInput, "KEY_SPACE", INT2NUM(GLFW_KEY_SPACE));
|
612
|
+
rb_define_const(rb_mInput, "KEY_APOSTROPHE", INT2NUM(GLFW_KEY_APOSTROPHE));
|
613
|
+
rb_define_const(rb_mInput, "KEY_COMMA", INT2NUM(GLFW_KEY_COMMA));
|
614
|
+
rb_define_const(rb_mInput, "KEY_MINUS", INT2NUM(GLFW_KEY_MINUS));
|
615
|
+
rb_define_const(rb_mInput, "KEY_PERIOD", INT2NUM(GLFW_KEY_PERIOD));
|
616
|
+
rb_define_const(rb_mInput, "KEY_SLASH", INT2NUM(GLFW_KEY_SLASH));
|
617
|
+
rb_define_const(rb_mInput, "KEY_0", INT2NUM(GLFW_KEY_0));
|
618
|
+
rb_define_const(rb_mInput, "KEY_1", INT2NUM(GLFW_KEY_1));
|
619
|
+
rb_define_const(rb_mInput, "KEY_2", INT2NUM(GLFW_KEY_2));
|
620
|
+
rb_define_const(rb_mInput, "KEY_3", INT2NUM(GLFW_KEY_3));
|
621
|
+
rb_define_const(rb_mInput, "KEY_4", INT2NUM(GLFW_KEY_4));
|
622
|
+
rb_define_const(rb_mInput, "KEY_5", INT2NUM(GLFW_KEY_5));
|
623
|
+
rb_define_const(rb_mInput, "KEY_6", INT2NUM(GLFW_KEY_6));
|
624
|
+
rb_define_const(rb_mInput, "KEY_7", INT2NUM(GLFW_KEY_7));
|
625
|
+
rb_define_const(rb_mInput, "KEY_8", INT2NUM(GLFW_KEY_8));
|
626
|
+
rb_define_const(rb_mInput, "KEY_9", INT2NUM(GLFW_KEY_9));
|
627
|
+
rb_define_const(rb_mInput, "KEY_SEMICOLON", INT2NUM(GLFW_KEY_SEMICOLON));
|
628
|
+
rb_define_const(rb_mInput, "KEY_EQUAL", INT2NUM(GLFW_KEY_EQUAL));
|
629
|
+
rb_define_const(rb_mInput, "KEY_A", INT2NUM(GLFW_KEY_A));
|
630
|
+
rb_define_const(rb_mInput, "KEY_B", INT2NUM(GLFW_KEY_B));
|
631
|
+
rb_define_const(rb_mInput, "KEY_C", INT2NUM(GLFW_KEY_C));
|
632
|
+
rb_define_const(rb_mInput, "KEY_D", INT2NUM(GLFW_KEY_D));
|
633
|
+
rb_define_const(rb_mInput, "KEY_E", INT2NUM(GLFW_KEY_E));
|
634
|
+
rb_define_const(rb_mInput, "KEY_F", INT2NUM(GLFW_KEY_F));
|
635
|
+
rb_define_const(rb_mInput, "KEY_G", INT2NUM(GLFW_KEY_G));
|
636
|
+
rb_define_const(rb_mInput, "KEY_H", INT2NUM(GLFW_KEY_H));
|
637
|
+
rb_define_const(rb_mInput, "KEY_I", INT2NUM(GLFW_KEY_I));
|
638
|
+
rb_define_const(rb_mInput, "KEY_J", INT2NUM(GLFW_KEY_J));
|
639
|
+
rb_define_const(rb_mInput, "KEY_K", INT2NUM(GLFW_KEY_K));
|
640
|
+
rb_define_const(rb_mInput, "KEY_L", INT2NUM(GLFW_KEY_L));
|
641
|
+
rb_define_const(rb_mInput, "KEY_M", INT2NUM(GLFW_KEY_M));
|
642
|
+
rb_define_const(rb_mInput, "KEY_N", INT2NUM(GLFW_KEY_N));
|
643
|
+
rb_define_const(rb_mInput, "KEY_O", INT2NUM(GLFW_KEY_O));
|
644
|
+
rb_define_const(rb_mInput, "KEY_P", INT2NUM(GLFW_KEY_P));
|
645
|
+
rb_define_const(rb_mInput, "KEY_Q", INT2NUM(GLFW_KEY_Q));
|
646
|
+
rb_define_const(rb_mInput, "KEY_R", INT2NUM(GLFW_KEY_R));
|
647
|
+
rb_define_const(rb_mInput, "KEY_S", INT2NUM(GLFW_KEY_S));
|
648
|
+
rb_define_const(rb_mInput, "KEY_T", INT2NUM(GLFW_KEY_T));
|
649
|
+
rb_define_const(rb_mInput, "KEY_U", INT2NUM(GLFW_KEY_U));
|
650
|
+
rb_define_const(rb_mInput, "KEY_V", INT2NUM(GLFW_KEY_V));
|
651
|
+
rb_define_const(rb_mInput, "KEY_W", INT2NUM(GLFW_KEY_W));
|
652
|
+
rb_define_const(rb_mInput, "KEY_X", INT2NUM(GLFW_KEY_X));
|
653
|
+
rb_define_const(rb_mInput, "KEY_Y", INT2NUM(GLFW_KEY_Y));
|
654
|
+
rb_define_const(rb_mInput, "KEY_Z", INT2NUM(GLFW_KEY_Z));
|
655
|
+
rb_define_const(rb_mInput, "KEY_LEFT_BRACKET", INT2NUM(GLFW_KEY_LEFT_BRACKET));
|
656
|
+
rb_define_const(rb_mInput, "KEY_BACKSLASH", INT2NUM(GLFW_KEY_BACKSLASH));
|
657
|
+
rb_define_const(rb_mInput, "KEY_RIGHT_BRACKET", INT2NUM(GLFW_KEY_RIGHT_BRACKET));
|
658
|
+
rb_define_const(rb_mInput, "KEY_GRAVE_ACCENT", INT2NUM(GLFW_KEY_GRAVE_ACCENT));
|
659
|
+
rb_define_const(rb_mInput, "KEY_WORLD_1", INT2NUM(GLFW_KEY_WORLD_1));
|
660
|
+
rb_define_const(rb_mInput, "KEY_WORLD_2", INT2NUM(GLFW_KEY_WORLD_2));
|
661
|
+
|
662
|
+
/* Function keys */
|
663
|
+
rb_define_const(rb_mInput, "KEY_ESCAPE", INT2NUM(GLFW_KEY_ESCAPE));
|
664
|
+
rb_define_const(rb_mInput, "KEY_ENTER", INT2NUM(GLFW_KEY_ENTER));
|
665
|
+
rb_define_const(rb_mInput, "KEY_TAB", INT2NUM(GLFW_KEY_TAB));
|
666
|
+
rb_define_const(rb_mInput, "KEY_BACKSPACE", INT2NUM(GLFW_KEY_BACKSPACE));
|
667
|
+
rb_define_const(rb_mInput, "KEY_INSERT", INT2NUM(GLFW_KEY_INSERT));
|
668
|
+
rb_define_const(rb_mInput, "KEY_DELETE", INT2NUM(GLFW_KEY_DELETE));
|
669
|
+
rb_define_const(rb_mInput, "KEY_RIGHT", INT2NUM(GLFW_KEY_RIGHT));
|
670
|
+
rb_define_const(rb_mInput, "KEY_LEFT", INT2NUM(GLFW_KEY_LEFT));
|
671
|
+
rb_define_const(rb_mInput, "KEY_DOWN", INT2NUM(GLFW_KEY_DOWN));
|
672
|
+
rb_define_const(rb_mInput, "KEY_UP", INT2NUM(GLFW_KEY_UP));
|
673
|
+
rb_define_const(rb_mInput, "KEY_PAGE_UP", INT2NUM(GLFW_KEY_PAGE_UP));
|
674
|
+
rb_define_const(rb_mInput, "KEY_PAGE_DOWN", INT2NUM(GLFW_KEY_PAGE_DOWN));
|
675
|
+
rb_define_const(rb_mInput, "KEY_HOME", INT2NUM(GLFW_KEY_HOME));
|
676
|
+
rb_define_const(rb_mInput, "KEY_END", INT2NUM(GLFW_KEY_END));
|
677
|
+
rb_define_const(rb_mInput, "KEY_CAPS_LOCK", INT2NUM(GLFW_KEY_CAPS_LOCK));
|
678
|
+
rb_define_const(rb_mInput, "KEY_SCROLL_LOCK", INT2NUM(GLFW_KEY_SCROLL_LOCK));
|
679
|
+
rb_define_const(rb_mInput, "KEY_NUM_LOCK", INT2NUM(GLFW_KEY_NUM_LOCK));
|
680
|
+
rb_define_const(rb_mInput, "KEY_PRINT_SCREEN", INT2NUM(GLFW_KEY_PRINT_SCREEN));
|
681
|
+
rb_define_const(rb_mInput, "KEY_PAUSE", INT2NUM(GLFW_KEY_PAUSE));
|
682
|
+
rb_define_const(rb_mInput, "KEY_F1", INT2NUM(GLFW_KEY_F1));
|
683
|
+
rb_define_const(rb_mInput, "KEY_F2", INT2NUM(GLFW_KEY_F2));
|
684
|
+
rb_define_const(rb_mInput, "KEY_F3", INT2NUM(GLFW_KEY_F3));
|
685
|
+
rb_define_const(rb_mInput, "KEY_F4", INT2NUM(GLFW_KEY_F4));
|
686
|
+
rb_define_const(rb_mInput, "KEY_F5", INT2NUM(GLFW_KEY_F5));
|
687
|
+
rb_define_const(rb_mInput, "KEY_F6", INT2NUM(GLFW_KEY_F6));
|
688
|
+
rb_define_const(rb_mInput, "KEY_F7", INT2NUM(GLFW_KEY_F7));
|
689
|
+
rb_define_const(rb_mInput, "KEY_F8", INT2NUM(GLFW_KEY_F8));
|
690
|
+
rb_define_const(rb_mInput, "KEY_F9", INT2NUM(GLFW_KEY_F9));
|
691
|
+
rb_define_const(rb_mInput, "KEY_F10", INT2NUM(GLFW_KEY_F10));
|
692
|
+
rb_define_const(rb_mInput, "KEY_F11", INT2NUM(GLFW_KEY_F11));
|
693
|
+
rb_define_const(rb_mInput, "KEY_F12", INT2NUM(GLFW_KEY_F12));
|
694
|
+
rb_define_const(rb_mInput, "KEY_F13", INT2NUM(GLFW_KEY_F13));
|
695
|
+
rb_define_const(rb_mInput, "KEY_F14", INT2NUM(GLFW_KEY_F14));
|
696
|
+
rb_define_const(rb_mInput, "KEY_F15", INT2NUM(GLFW_KEY_F15));
|
697
|
+
rb_define_const(rb_mInput, "KEY_F16", INT2NUM(GLFW_KEY_F16));
|
698
|
+
rb_define_const(rb_mInput, "KEY_F17", INT2NUM(GLFW_KEY_F17));
|
699
|
+
rb_define_const(rb_mInput, "KEY_F18", INT2NUM(GLFW_KEY_F18));
|
700
|
+
rb_define_const(rb_mInput, "KEY_F19", INT2NUM(GLFW_KEY_F19));
|
701
|
+
rb_define_const(rb_mInput, "KEY_F20", INT2NUM(GLFW_KEY_F20));
|
702
|
+
rb_define_const(rb_mInput, "KEY_F21", INT2NUM(GLFW_KEY_F21));
|
703
|
+
rb_define_const(rb_mInput, "KEY_F22", INT2NUM(GLFW_KEY_F22));
|
704
|
+
rb_define_const(rb_mInput, "KEY_F23", INT2NUM(GLFW_KEY_F23));
|
705
|
+
rb_define_const(rb_mInput, "KEY_F24", INT2NUM(GLFW_KEY_F24));
|
706
|
+
rb_define_const(rb_mInput, "KEY_F25", INT2NUM(GLFW_KEY_F25));
|
707
|
+
rb_define_const(rb_mInput, "KEY_KP_0", INT2NUM(GLFW_KEY_KP_0));
|
708
|
+
rb_define_const(rb_mInput, "KEY_KP_1", INT2NUM(GLFW_KEY_KP_1));
|
709
|
+
rb_define_const(rb_mInput, "KEY_KP_2", INT2NUM(GLFW_KEY_KP_2));
|
710
|
+
rb_define_const(rb_mInput, "KEY_KP_3", INT2NUM(GLFW_KEY_KP_3));
|
711
|
+
rb_define_const(rb_mInput, "KEY_KP_4", INT2NUM(GLFW_KEY_KP_4));
|
712
|
+
rb_define_const(rb_mInput, "KEY_KP_5", INT2NUM(GLFW_KEY_KP_5));
|
713
|
+
rb_define_const(rb_mInput, "KEY_KP_6", INT2NUM(GLFW_KEY_KP_6));
|
714
|
+
rb_define_const(rb_mInput, "KEY_KP_7", INT2NUM(GLFW_KEY_KP_7));
|
715
|
+
rb_define_const(rb_mInput, "KEY_KP_8", INT2NUM(GLFW_KEY_KP_8));
|
716
|
+
rb_define_const(rb_mInput, "KEY_KP_9", INT2NUM(GLFW_KEY_KP_9));
|
717
|
+
rb_define_const(rb_mInput, "KEY_KP_DECIMAL", INT2NUM(GLFW_KEY_KP_DECIMAL));
|
718
|
+
rb_define_const(rb_mInput, "KEY_KP_DIVIDE", INT2NUM(GLFW_KEY_KP_DIVIDE));
|
719
|
+
rb_define_const(rb_mInput, "KEY_KP_MULTIPLY", INT2NUM(GLFW_KEY_KP_MULTIPLY));
|
720
|
+
rb_define_const(rb_mInput, "KEY_KP_SUBTRACT", INT2NUM(GLFW_KEY_KP_SUBTRACT));
|
721
|
+
rb_define_const(rb_mInput, "KEY_KP_ADD", INT2NUM(GLFW_KEY_KP_ADD));
|
722
|
+
rb_define_const(rb_mInput, "KEY_KP_ENTER", INT2NUM(GLFW_KEY_KP_ENTER));
|
723
|
+
rb_define_const(rb_mInput, "KEY_KP_EQUAL", INT2NUM(GLFW_KEY_KP_EQUAL));
|
724
|
+
rb_define_const(rb_mInput, "KEY_LEFT_SHIFT", INT2NUM(GLFW_KEY_LEFT_SHIFT));
|
725
|
+
rb_define_const(rb_mInput, "KEY_LEFT_CONTROL", INT2NUM(GLFW_KEY_LEFT_CONTROL));
|
726
|
+
rb_define_const(rb_mInput, "KEY_LEFT_ALT", INT2NUM(GLFW_KEY_LEFT_ALT));
|
727
|
+
rb_define_const(rb_mInput, "KEY_LEFT_SUPER", INT2NUM(GLFW_KEY_LEFT_SUPER));
|
728
|
+
rb_define_const(rb_mInput, "KEY_RIGHT_SHIFT", INT2NUM(GLFW_KEY_RIGHT_SHIFT));
|
729
|
+
rb_define_const(rb_mInput, "KEY_RIGHT_CONTROL", INT2NUM(GLFW_KEY_RIGHT_CONTROL));
|
730
|
+
rb_define_const(rb_mInput, "KEY_RIGHT_ALT", INT2NUM(GLFW_KEY_RIGHT_ALT));
|
731
|
+
rb_define_const(rb_mInput, "KEY_RIGHT_SUPER", INT2NUM(GLFW_KEY_RIGHT_SUPER));
|
732
|
+
rb_define_const(rb_mInput, "KEY_MENU", INT2NUM(GLFW_KEY_MENU));
|
733
|
+
|
734
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_1", INT2NUM(GLFW_MOUSE_BUTTON_1));
|
735
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_2", INT2NUM(GLFW_MOUSE_BUTTON_2));
|
736
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_3", INT2NUM(GLFW_MOUSE_BUTTON_3));
|
737
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_4", INT2NUM(GLFW_MOUSE_BUTTON_4));
|
738
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_5", INT2NUM(GLFW_MOUSE_BUTTON_5));
|
739
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_6", INT2NUM(GLFW_MOUSE_BUTTON_6));
|
740
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_7", INT2NUM(GLFW_MOUSE_BUTTON_7));
|
741
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_8", INT2NUM(GLFW_MOUSE_BUTTON_8));
|
742
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_LEFT", INT2NUM(GLFW_MOUSE_BUTTON_LEFT));
|
743
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_RIGHT", INT2NUM(GLFW_MOUSE_BUTTON_RIGHT));
|
744
|
+
rb_define_const(rb_mInput, "MOUSE_BUTTON_MIDDLE", INT2NUM(GLFW_MOUSE_BUTTON_MIDDLE));
|
745
|
+
}
|