rgss 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}
|