ruby2d 0.3.1 → 0.4.0

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.
data/ext/ruby2d/ruby2d.c CHANGED
@@ -59,10 +59,12 @@
59
59
  #define r_data_wrap_struct(name, data) mrb_obj_value(Data_Wrap_Struct(mrb, mrb->object_class, &name##_data_type, data))
60
60
  #define r_data_get_struct(self, var, mrb_type, rb_type, data) Data_Get_Struct(mrb, r_iv_get(self, var), mrb_type, data)
61
61
  #define r_define_module(name) mrb_module_get(mrb, name)
62
- #define r_define_class(module, name) mrb_class_get_under(mrb, module, name);
62
+ #define r_define_class(module, name) mrb_class_get_under(mrb, module, name)
63
63
  #define r_define_method(class, name, function, args) mrb_define_method(mrb, class, name, function, args)
64
64
  #define r_args_none (MRB_ARGS_NONE())
65
65
  #define r_args_req(n) MRB_ARGS_REQ(n)
66
+ // Helpers
67
+ #define r_char_to_sym(str) mrb_check_intern_cstr(mrb, str)
66
68
  #else
67
69
  // Ruby
68
70
  #define R_VAL VALUE
@@ -79,18 +81,21 @@
79
81
  #define r_data_wrap_struct(name, data) Data_Wrap_Struct(rb_cObject, NULL, (free_##name), data)
80
82
  #define r_data_get_struct(self, var, mrb_type, rb_type, data) Data_Get_Struct(r_iv_get(self, var), rb_type, data)
81
83
  #define r_define_module(name) rb_define_module(name)
82
- #define r_define_class(module, name) rb_define_class_under(module, name, rb_cObject);
84
+ #define r_define_class(module, name) rb_define_class_under(module, name, rb_cObject)
83
85
  #define r_define_method(class, name, function, args) rb_define_method(class, name, function, args)
84
86
  #define r_args_none 0
85
87
  #define r_args_req(n) n
88
+ // Helpers
89
+ #define r_char_to_sym(str) ID2SYM(rb_intern(str))
86
90
  #endif
87
91
 
88
92
  // @type_id values for rendering
89
93
  #define R2D_TRIANGLE 1
90
94
  #define R2D_QUAD 2
91
- #define R2D_IMAGE 3
92
- #define R2D_SPRITE 4
93
- #define R2D_TEXT 5
95
+ #define R2D_LINE 3
96
+ #define R2D_IMAGE 4
97
+ #define R2D_SPRITE 5
98
+ #define R2D_TEXT 6
94
99
 
95
100
  // Create the MRuby context
96
101
  #if MRUBY
@@ -143,6 +148,18 @@ static void free_window() {
143
148
  }
144
149
 
145
150
 
151
+ /*
152
+ * File#exists? for MRuby
153
+ */
154
+ #if MRUBY
155
+ static R_VAL file_exists(mrb_state* mrb, R_VAL self) {
156
+ mrb_value path;
157
+ mrb_get_args(mrb, "o", &path);
158
+ return S2D_FileExists(RSTRING_PTR(path)) ? R_TRUE : R_FALSE;
159
+ }
160
+ #endif
161
+
162
+
146
163
  /*
147
164
  * Ruby2D::Image#init
148
165
  * Initialize image structure data
@@ -157,6 +174,8 @@ static R_VAL ruby2d_image_init(R_VAL self, R_VAL path) {
157
174
  sprintf(S2D_msg, "Init image: %s", RSTRING_PTR(path));
158
175
  S2D_Log(S2D_msg, S2D_INFO);
159
176
  S2D_Image *img = S2D_CreateImage(RSTRING_PTR(path));
177
+ r_iv_set(self, "@width", INT2NUM(img->width));
178
+ r_iv_set(self, "@height", INT2NUM(img->height));
160
179
  r_iv_set(self, "@data", r_data_wrap_struct(image, img));
161
180
  return R_NIL;
162
181
  }
@@ -222,37 +241,39 @@ static R_VAL ruby2d_text_init(R_VAL self) {
222
241
  #endif
223
242
  sprintf(S2D_msg, "Init text: %s", RSTRING_PTR(r_iv_get(self, "@text")));
224
243
  S2D_Log(S2D_msg, S2D_INFO);
225
-
244
+
226
245
  S2D_Text *txt = S2D_CreateText(
227
246
  RSTRING_PTR(r_iv_get(self, "@font")),
228
247
  RSTRING_PTR(r_iv_get(self, "@text")),
229
248
  NUM2DBL(r_iv_get(self, "@size"))
230
249
  );
231
-
250
+
251
+ r_iv_set(self, "@width", INT2NUM(txt->width));
252
+ r_iv_set(self, "@height", INT2NUM(txt->height));
253
+
232
254
  r_iv_set(self, "@data", r_data_wrap_struct(text, txt));
233
255
  return R_NIL;
234
256
  }
235
257
 
236
258
 
237
259
  /*
238
- * Ruby2D::Text#text=
260
+ * Ruby2D::Text#ext_text_set
239
261
  */
240
262
  #if MRUBY
241
- static R_VAL ruby2d_text_equals(mrb_state* mrb, R_VAL self) {
263
+ static R_VAL ruby2d_text_set(mrb_state* mrb, R_VAL self) {
242
264
  mrb_value text;
243
265
  mrb_get_args(mrb, "o", &text);
244
266
  #else
245
- static R_VAL ruby2d_text_equals(R_VAL self, R_VAL text) {
246
- r_iv_set(self, "@text", text);
267
+ static R_VAL ruby2d_text_set(R_VAL self, R_VAL text) {
247
268
  #endif
248
-
249
- // If called before window is shown, return
250
- if (!r_test(ruby2d_window)) return R_NIL;
251
-
252
269
  S2D_Text *txt;
253
270
  r_data_get_struct(self, "@data", &text_data_type, S2D_Text, txt);
254
-
271
+
255
272
  S2D_SetText(txt, RSTRING_PTR(text));
273
+
274
+ r_iv_set(self, "@width", INT2NUM(txt->width));
275
+ r_iv_set(self, "@height", INT2NUM(txt->height));
276
+
256
277
  return R_NIL;
257
278
  }
258
279
 
@@ -427,39 +448,106 @@ static void free_music(S2D_Music *mus) {
427
448
  /*
428
449
  * Simple 2D `on_key` input callback function
429
450
  */
430
- static void on_key(S2D_Event e, const char *key) {
431
- switch (e) {
432
- case S2D_KEYDOWN:
433
- r_funcall(ruby2d_window, "key_down_callback", 1, r_str_new(key));
451
+ static void on_key(S2D_Event e) {
452
+
453
+ R_VAL type;
454
+
455
+ switch (e.type) {
456
+ case S2D_KEY_DOWN:
457
+ type = r_char_to_sym("down");
434
458
  break;
435
-
436
- case S2D_KEY:
437
- r_funcall(ruby2d_window, "key_callback", 1, r_str_new(key));
459
+ case S2D_KEY_HELD:
460
+ type = r_char_to_sym("held");
438
461
  break;
439
-
440
- case S2D_KEYUP:
441
- r_funcall(ruby2d_window, "key_up_callback", 1, r_str_new(key));
462
+ case S2D_KEY_UP:
463
+ type = r_char_to_sym("up");
442
464
  break;
443
465
  }
466
+
467
+ r_funcall(ruby2d_window, "key_callback", 2, type, r_str_new(e.key));
444
468
  }
445
469
 
446
470
 
447
471
  /*
448
472
  * Simple 2D `on_mouse` input callback function
449
473
  */
450
- void on_mouse(int x, int y) {
451
- r_funcall(ruby2d_window, "mouse_callback", 3, r_str_new("any"), INT2NUM(x), INT2NUM(y));
474
+ void on_mouse(S2D_Event e) {
475
+
476
+ R_VAL type = R_NIL; R_VAL button = R_NIL; R_VAL direction = R_NIL;
477
+
478
+ switch (e.type) {
479
+ case S2D_MOUSE_DOWN:
480
+ // type, button, x, y
481
+ type = r_char_to_sym("down");
482
+ break;
483
+ case S2D_MOUSE_UP:
484
+ // type, button, x, y
485
+ type = r_char_to_sym("up");
486
+ break;
487
+ case S2D_MOUSE_SCROLL:
488
+ // type, direction, delta_x, delta_y
489
+ type = r_char_to_sym("scroll");
490
+ direction = e.direction == S2D_MOUSE_SCROLL_NORMAL ?
491
+ r_str_new("normal") : r_str_new("inverted");
492
+ break;
493
+ case S2D_MOUSE_MOVE:
494
+ // type, x, y, delta_x, delta_y
495
+ type = r_char_to_sym("move");
496
+ break;
497
+ }
498
+
499
+ if (e.type == S2D_MOUSE_DOWN || e.type == S2D_MOUSE_UP) {
500
+ switch (e.button) {
501
+ case S2D_MOUSE_LEFT:
502
+ button = r_str_new("left");
503
+ break;
504
+ case S2D_MOUSE_MIDDLE:
505
+ button = r_str_new("middle");
506
+ break;
507
+ case S2D_MOUSE_RIGHT:
508
+ button = r_str_new("right");
509
+ break;
510
+ case S2D_MOUSE_X1:
511
+ button = r_str_new("x1");
512
+ break;
513
+ case S2D_MOUSE_X2:
514
+ button = r_str_new("x2");
515
+ break;
516
+ }
517
+ }
518
+
519
+ // Bug in MRuby: If `button` or `direction` are symbols (created with
520
+ // r_char_to_sym), they will always both be `nil`. Use `r_str_new` for now.
521
+
522
+ r_funcall(
523
+ ruby2d_window, "mouse_callback", 7, type, button, direction,
524
+ INT2NUM(e.x), INT2NUM(e.y), INT2NUM(e.delta_x), INT2NUM(e.delta_y)
525
+ );
452
526
  }
453
527
 
454
528
 
455
529
  /*
456
530
  * Simple 2D `on_controller` input callback function
457
531
  */
458
- static void on_controller(int which, bool is_axis, int axis, int val, bool is_btn, int btn, bool pressed) {
459
- r_funcall(ruby2d_window, "controller_callback", 7,
460
- INT2NUM(which),
461
- is_axis ? R_TRUE : R_FALSE, INT2NUM(axis), INT2NUM(val),
462
- is_btn ? R_TRUE : R_FALSE, INT2NUM(btn), pressed ? R_TRUE : R_FALSE
532
+ static void on_controller(S2D_Event e) {
533
+
534
+ R_VAL type = R_NIL;
535
+
536
+ switch (e.type) {
537
+ case S2D_AXIS:
538
+ type = r_char_to_sym("axis");
539
+ break;
540
+ case S2D_BUTTON_DOWN:
541
+ type = r_char_to_sym("button_down");
542
+ break;
543
+ case S2D_BUTTON_UP:
544
+ type = r_char_to_sym("button_up");
545
+ break;
546
+ }
547
+
548
+ r_funcall(
549
+ ruby2d_window, "controller_callback", 5, INT2NUM(e.which), type,
550
+ INT2NUM(e.axis), INT2NUM(e.value), INT2NUM(e.button)
463
551
  );
464
552
  }
465
553
 
@@ -468,17 +556,17 @@ static void on_controller(int which, bool is_axis, int axis, int val, bool is_bt
468
556
  * Simple 2D `update` callback function
469
557
  */
470
558
  static void update() {
471
-
559
+
472
560
  // Set the cursor
473
561
  r_iv_set(ruby2d_window, "@mouse_x", INT2NUM(window->mouse.x));
474
562
  r_iv_set(ruby2d_window, "@mouse_y", INT2NUM(window->mouse.y));
475
-
563
+
476
564
  // Store frames
477
565
  r_iv_set(ruby2d_window, "@frames", DBL2NUM(window->frames));
478
-
566
+
479
567
  // Store frame rate
480
568
  r_iv_set(ruby2d_window, "@fps", DBL2NUM(window->fps));
481
-
569
+
482
570
  // Call update proc, `window.update`
483
571
  r_funcall(ruby2d_window, "update_callback", 0);
484
572
  }
@@ -488,32 +576,32 @@ static void update() {
488
576
  * Simple 2D `render` callback function
489
577
  */
490
578
  static void render() {
491
-
579
+
492
580
  // Set background color
493
581
  R_VAL bc = r_iv_get(ruby2d_window, "@background");
494
582
  window->background.r = NUM2DBL(r_iv_get(bc, "@r"));
495
583
  window->background.g = NUM2DBL(r_iv_get(bc, "@g"));
496
584
  window->background.b = NUM2DBL(r_iv_get(bc, "@b"));
497
585
  window->background.a = NUM2DBL(r_iv_get(bc, "@a"));
498
-
586
+
499
587
  // Read window objects
500
588
  R_VAL objects = r_iv_get(ruby2d_window, "@objects");
501
589
  int num_objects = NUM2INT(r_funcall(objects, "length", 0));
502
-
590
+
503
591
  // Switch on each object type
504
592
  for (int i = 0; i < num_objects; ++i) {
505
-
593
+
506
594
  R_VAL el = r_ary_entry(objects, i);
507
595
  int type_id = NUM2INT(r_iv_get(el, "@type_id"));
508
-
596
+
509
597
  // Switch on the object's type_id
510
598
  switch(type_id) {
511
-
599
+
512
600
  case R2D_TRIANGLE: {
513
601
  R_VAL c1 = r_iv_get(el, "@c1");
514
602
  R_VAL c2 = r_iv_get(el, "@c2");
515
603
  R_VAL c3 = r_iv_get(el, "@c3");
516
-
604
+
517
605
  S2D_DrawTriangle(
518
606
  NUM2DBL(r_iv_get(el, "@x1")),
519
607
  NUM2DBL(r_iv_get(el, "@y1")),
@@ -521,14 +609,14 @@ static void render() {
521
609
  NUM2DBL(r_iv_get(c1, "@g")),
522
610
  NUM2DBL(r_iv_get(c1, "@b")),
523
611
  NUM2DBL(r_iv_get(c1, "@a")),
524
-
612
+
525
613
  NUM2DBL(r_iv_get(el, "@x2")),
526
614
  NUM2DBL(r_iv_get(el, "@y2")),
527
615
  NUM2DBL(r_iv_get(c2, "@r")),
528
616
  NUM2DBL(r_iv_get(c2, "@g")),
529
617
  NUM2DBL(r_iv_get(c2, "@b")),
530
618
  NUM2DBL(r_iv_get(c2, "@a")),
531
-
619
+
532
620
  NUM2DBL(r_iv_get(el, "@x3")),
533
621
  NUM2DBL(r_iv_get(el, "@y3")),
534
622
  NUM2DBL(r_iv_get(c3, "@r")),
@@ -538,13 +626,13 @@ static void render() {
538
626
  );
539
627
  }
540
628
  break;
541
-
629
+
542
630
  case R2D_QUAD: {
543
631
  R_VAL c1 = r_iv_get(el, "@c1");
544
632
  R_VAL c2 = r_iv_get(el, "@c2");
545
633
  R_VAL c3 = r_iv_get(el, "@c3");
546
634
  R_VAL c4 = r_iv_get(el, "@c4");
547
-
635
+
548
636
  S2D_DrawQuad(
549
637
  NUM2DBL(r_iv_get(el, "@x1")),
550
638
  NUM2DBL(r_iv_get(el, "@y1")),
@@ -552,21 +640,21 @@ static void render() {
552
640
  NUM2DBL(r_iv_get(c1, "@g")),
553
641
  NUM2DBL(r_iv_get(c1, "@b")),
554
642
  NUM2DBL(r_iv_get(c1, "@a")),
555
-
643
+
556
644
  NUM2DBL(r_iv_get(el, "@x2")),
557
645
  NUM2DBL(r_iv_get(el, "@y2")),
558
646
  NUM2DBL(r_iv_get(c2, "@r")),
559
647
  NUM2DBL(r_iv_get(c2, "@g")),
560
648
  NUM2DBL(r_iv_get(c2, "@b")),
561
649
  NUM2DBL(r_iv_get(c2, "@a")),
562
-
650
+
563
651
  NUM2DBL(r_iv_get(el, "@x3")),
564
652
  NUM2DBL(r_iv_get(el, "@y3")),
565
653
  NUM2DBL(r_iv_get(c3, "@r")),
566
654
  NUM2DBL(r_iv_get(c3, "@g")),
567
655
  NUM2DBL(r_iv_get(c3, "@b")),
568
656
  NUM2DBL(r_iv_get(c3, "@a")),
569
-
657
+
570
658
  NUM2DBL(r_iv_get(el, "@x4")),
571
659
  NUM2DBL(r_iv_get(el, "@y4")),
572
660
  NUM2DBL(r_iv_get(c4, "@r")),
@@ -576,36 +664,72 @@ static void render() {
576
664
  );
577
665
  }
578
666
  break;
579
-
667
+
668
+ case R2D_LINE: {
669
+ R_VAL c1 = r_iv_get(el, "@c1");
670
+ R_VAL c2 = r_iv_get(el, "@c2");
671
+ R_VAL c3 = r_iv_get(el, "@c3");
672
+ R_VAL c4 = r_iv_get(el, "@c4");
673
+
674
+ S2D_DrawLine(
675
+ NUM2DBL(r_iv_get(el, "@x1")),
676
+ NUM2DBL(r_iv_get(el, "@y1")),
677
+ NUM2DBL(r_iv_get(el, "@x2")),
678
+ NUM2DBL(r_iv_get(el, "@y2")),
679
+ NUM2DBL(r_iv_get(el, "@width")),
680
+
681
+ NUM2DBL(r_iv_get(c1, "@r")),
682
+ NUM2DBL(r_iv_get(c1, "@g")),
683
+ NUM2DBL(r_iv_get(c1, "@b")),
684
+ NUM2DBL(r_iv_get(c1, "@a")),
685
+
686
+ NUM2DBL(r_iv_get(c2, "@r")),
687
+ NUM2DBL(r_iv_get(c2, "@g")),
688
+ NUM2DBL(r_iv_get(c2, "@b")),
689
+ NUM2DBL(r_iv_get(c2, "@a")),
690
+
691
+ NUM2DBL(r_iv_get(c3, "@r")),
692
+ NUM2DBL(r_iv_get(c3, "@g")),
693
+ NUM2DBL(r_iv_get(c3, "@b")),
694
+ NUM2DBL(r_iv_get(c3, "@a")),
695
+
696
+ NUM2DBL(r_iv_get(c4, "@r")),
697
+ NUM2DBL(r_iv_get(c4, "@g")),
698
+ NUM2DBL(r_iv_get(c4, "@b")),
699
+ NUM2DBL(r_iv_get(c4, "@a"))
700
+ );
701
+ }
702
+ break;
703
+
580
704
  case R2D_IMAGE: {
581
705
  S2D_Image *img;
582
706
  r_data_get_struct(el, "@data", &image_data_type, S2D_Image, img);
583
-
707
+
584
708
  img->x = NUM2DBL(r_iv_get(el, "@x"));
585
709
  img->y = NUM2DBL(r_iv_get(el, "@y"));
586
-
710
+
587
711
  R_VAL w = r_iv_get(el, "@width");
588
712
  R_VAL h = r_iv_get(el, "@height");
589
713
  if (r_test(w)) img->width = NUM2INT(w);
590
714
  if (r_test(h)) img->height = NUM2INT(h);
591
-
715
+
592
716
  R_VAL c = r_iv_get(el, "@color");
593
717
  img->color.r = NUM2DBL(r_iv_get(c, "@r"));
594
718
  img->color.g = NUM2DBL(r_iv_get(c, "@g"));
595
719
  img->color.b = NUM2DBL(r_iv_get(c, "@b"));
596
720
  img->color.a = NUM2DBL(r_iv_get(c, "@a"));
597
-
721
+
598
722
  S2D_DrawImage(img);
599
723
  }
600
724
  break;
601
-
725
+
602
726
  case R2D_SPRITE: {
603
727
  S2D_Sprite *spr;
604
728
  r_data_get_struct(el, "@data", &sprite_data_type, S2D_Sprite, spr);
605
-
729
+
606
730
  spr->x = NUM2DBL(r_iv_get(el, "@x"));
607
731
  spr->y = NUM2DBL(r_iv_get(el, "@y"));
608
-
732
+
609
733
  S2D_ClipSprite(
610
734
  spr,
611
735
  NUM2INT(r_iv_get(el, "@clip_x")),
@@ -613,24 +737,24 @@ static void render() {
613
737
  NUM2INT(r_iv_get(el, "@clip_w")),
614
738
  NUM2INT(r_iv_get(el, "@clip_h"))
615
739
  );
616
-
740
+
617
741
  S2D_DrawSprite(spr);
618
742
  }
619
743
  break;
620
-
744
+
621
745
  case R2D_TEXT: {
622
746
  S2D_Text *txt;
623
747
  r_data_get_struct(el, "@data", &text_data_type, S2D_Text, txt);
624
-
748
+
625
749
  txt->x = NUM2DBL(r_iv_get(el, "@x"));
626
750
  txt->y = NUM2DBL(r_iv_get(el, "@y"));
627
-
751
+
628
752
  R_VAL c = r_iv_get(el, "@color");
629
753
  txt->color.r = NUM2DBL(r_iv_get(c, "@r"));
630
754
  txt->color.g = NUM2DBL(r_iv_get(c, "@g"));
631
755
  txt->color.b = NUM2DBL(r_iv_get(c, "@b"));
632
756
  txt->color.a = NUM2DBL(r_iv_get(c, "@a"));
633
-
757
+
634
758
  S2D_DrawText(txt);
635
759
  }
636
760
  break;
@@ -648,17 +772,17 @@ static R_VAL ruby2d_show(mrb_state* mrb, R_VAL self) {
648
772
  static R_VAL ruby2d_show(R_VAL self) {
649
773
  #endif
650
774
  ruby2d_window = self;
651
-
775
+
652
776
  if (r_test(r_iv_get(self, "@diagnostics"))) {
653
777
  S2D_Diagnostics(true);
654
778
  }
655
-
779
+
656
780
  // Get window attributes
657
781
  char *title = RSTRING_PTR(r_iv_get(self, "@title"));
658
782
  int width = NUM2INT(r_iv_get(self, "@width"));
659
783
  int height = NUM2INT(r_iv_get(self, "@height"));
660
784
  int flags = 0;
661
-
785
+
662
786
  // Get window flags
663
787
  if (r_test(r_iv_get(self, "@resizable"))) {
664
788
  flags = flags | S2D_RESIZABLE;
@@ -672,29 +796,29 @@ static R_VAL ruby2d_show(R_VAL self) {
672
796
  if (r_test(r_iv_get(self, "@highdpi"))) {
673
797
  flags = flags | S2D_HIGHDPI;
674
798
  }
675
-
799
+
676
800
  // Check viewport size and set
677
-
801
+
678
802
  R_VAL vp_w = r_iv_get(self, "@viewport_width");
679
803
  int viewport_width = r_test(vp_w) ? NUM2INT(vp_w) : width;
680
-
804
+
681
805
  R_VAL vp_h = r_iv_get(self, "@viewport_height");
682
806
  int viewport_height = r_test(vp_h) ? NUM2INT(vp_h) : height;
683
-
807
+
684
808
  // Create and show window
685
-
809
+
686
810
  window = S2D_CreateWindow(
687
811
  title, width, height, update, render, flags
688
812
  );
689
-
813
+
690
814
  window->viewport.width = viewport_width;
691
815
  window->viewport.height = viewport_height;
692
816
  window->on_key = on_key;
693
817
  window->on_mouse = on_mouse;
694
818
  window->on_controller = on_controller;
695
-
819
+
696
820
  S2D_Show(window);
697
-
821
+
698
822
  atexit(free_window);
699
823
  return R_NIL;
700
824
  }
@@ -717,83 +841,91 @@ int main(void) {
717
841
  // Open the MRuby environment
718
842
  mrb = mrb_open();
719
843
  if (!mrb) { /* handle error */ }
720
-
844
+
721
845
  // Load the Ruby 2D library
722
846
  mrb_load_irep(mrb, ruby2d_lib);
847
+
848
+ // Add missing MRuby classes, methods
849
+ R_CLASS file_class = mrb_define_class(mrb, "File", mrb->object_class);
850
+ mrb_define_class_method(mrb, file_class, "exists?", file_exists, r_args_req(1));
851
+
723
852
  #else
724
853
  /*
725
854
  * Ruby C extension init
726
855
  */
727
856
  void Init_ruby2d() {
728
857
  #endif
729
-
858
+
730
859
  // Ruby2D
731
860
  R_CLASS ruby2d_module = r_define_module("Ruby2D");
732
-
861
+
733
862
  // Ruby2D::Image
734
863
  R_CLASS ruby2d_image_class = r_define_class(ruby2d_module, "Image");
735
-
864
+
736
865
  // Ruby2D::Image#init
737
- r_define_method(ruby2d_image_class, "init", ruby2d_image_init, r_args_req(1));
738
-
866
+ r_define_method(ruby2d_image_class, "ext_image_init", ruby2d_image_init, r_args_req(1));
867
+
739
868
  // Ruby2D::Sprite
740
869
  R_CLASS ruby2d_sprite_class = r_define_class(ruby2d_module, "Sprite");
741
-
870
+
742
871
  // Ruby2D::Sprite#init
743
- r_define_method(ruby2d_sprite_class, "init", ruby2d_sprite_init, r_args_req(1));
744
-
872
+ r_define_method(ruby2d_sprite_class, "ext_sprite_init", ruby2d_sprite_init, r_args_req(1));
873
+
745
874
  // Ruby2D::Text
746
875
  R_CLASS ruby2d_text_class = r_define_class(ruby2d_module, "Text");
747
-
876
+
748
877
  // Ruby2D::Text#init
749
- r_define_method(ruby2d_text_class, "init", ruby2d_text_init, r_args_none);
750
-
751
- // Ruby2D::Text#text=
752
- r_define_method(ruby2d_text_class, "text=", ruby2d_text_equals, r_args_req(1));
753
-
878
+ r_define_method(ruby2d_text_class, "ext_text_init", ruby2d_text_init, r_args_none);
879
+
880
+ // Ruby2D::Text#ext_text_set
881
+ r_define_method(ruby2d_text_class, "ext_text_set", ruby2d_text_set, r_args_req(1));
882
+
754
883
  // Ruby2D::Sound
755
884
  R_CLASS ruby2d_sound_class = r_define_class(ruby2d_module, "Sound");
756
-
885
+
757
886
  // Ruby2D::Sound#init
758
- r_define_method(ruby2d_sound_class, "init", ruby2d_sound_init, r_args_req(1));
759
-
887
+ r_define_method(ruby2d_sound_class, "ext_sound_init", ruby2d_sound_init, r_args_req(1));
888
+
760
889
  // Ruby2D::Sound#play
761
- r_define_method(ruby2d_sound_class, "play", ruby2d_sound_play, r_args_none);
762
-
890
+ r_define_method(ruby2d_sound_class, "ext_sound_play", ruby2d_sound_play, r_args_none);
891
+
763
892
  // Ruby2D::Music
764
893
  R_CLASS ruby2d_music_class = r_define_class(ruby2d_module, "Music");
765
-
894
+
766
895
  // Ruby2D::Music#init
767
- r_define_method(ruby2d_music_class, "init", ruby2d_music_init, r_args_req(1));
768
-
896
+ r_define_method(ruby2d_music_class, "ext_music_init", ruby2d_music_init, r_args_req(1));
897
+
769
898
  // Ruby2D::Music#play
770
- r_define_method(ruby2d_music_class, "play", ruby2d_music_play, r_args_none);
771
-
899
+ r_define_method(ruby2d_music_class, "ext_music_play", ruby2d_music_play, r_args_none);
900
+
772
901
  // Ruby2D::Music#pause
773
- r_define_method(ruby2d_music_class, "pause", ruby2d_music_pause, r_args_none);
774
-
902
+ r_define_method(ruby2d_music_class, "ext_music_pause", ruby2d_music_pause, r_args_none);
903
+
775
904
  // Ruby2D::Music#resume
776
- r_define_method(ruby2d_music_class, "resume", ruby2d_music_resume, r_args_none);
777
-
905
+ r_define_method(ruby2d_music_class, "ext_music_resume", ruby2d_music_resume, r_args_none);
906
+
778
907
  // Ruby2D::Music#stop
779
- r_define_method(ruby2d_music_class, "stop", ruby2d_music_stop, r_args_none);
780
-
908
+ r_define_method(ruby2d_music_class, "ext_music_stop", ruby2d_music_stop, r_args_none);
909
+
781
910
  // Ruby2D::Music#fadeout
782
- r_define_method(ruby2d_music_class, "fadeout", ruby2d_music_fadeout, r_args_req(1));
783
-
911
+ r_define_method(ruby2d_music_class, "ext_music_fadeout", ruby2d_music_fadeout, r_args_req(1));
912
+
784
913
  // Ruby2D::Window
785
914
  R_CLASS ruby2d_window_class = r_define_class(ruby2d_module, "Window");
786
-
915
+
787
916
  // Ruby2D::Window#show
788
- r_define_method(ruby2d_window_class, "show", ruby2d_show, r_args_none);
789
-
917
+ r_define_method(ruby2d_window_class, "ext_window_show", ruby2d_show, r_args_none);
918
+
790
919
  // Ruby2D::Window#close
791
- r_define_method(ruby2d_window_class, "close", ruby2d_close, r_args_none);
792
-
920
+ r_define_method(ruby2d_window_class, "ext_window_close", ruby2d_close, r_args_none);
921
+
793
922
  #if MRUBY
794
923
  // Load the Ruby 2D app
795
924
  mrb_load_irep(mrb, ruby2d_app);
796
-
925
+
926
+ // If an exception, print error
927
+ if (mrb->exc) mrb_print_error(mrb);
928
+
797
929
  // Close the MRuby environment
798
930
  mrb_close(mrb);
799
931
  #endif