reflexion 0.1.8 → 0.1.9

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +5 -1
  3. data/.doc/ext/reflex/arc_shape.cpp +89 -0
  4. data/.doc/ext/reflex/body.cpp +91 -12
  5. data/.doc/ext/reflex/contact_event.cpp +90 -0
  6. data/.doc/ext/reflex/ellipse_shape.cpp +89 -0
  7. data/.doc/ext/reflex/image_view.cpp +0 -16
  8. data/.doc/ext/reflex/native.cpp +18 -6
  9. data/.doc/ext/reflex/rect_shape.cpp +83 -0
  10. data/.doc/ext/reflex/shape_view.cpp +153 -0
  11. data/.doc/ext/reflex/view.cpp +63 -26
  12. data/.doc/ext/reflex/window.cpp +5 -1
  13. data/VERSION +1 -1
  14. data/ext/reflex/application.cpp +6 -2
  15. data/ext/reflex/arc_shape.cpp +94 -0
  16. data/ext/reflex/body.cpp +101 -13
  17. data/ext/reflex/contact_event.cpp +95 -0
  18. data/ext/reflex/ellipse_shape.cpp +94 -0
  19. data/ext/reflex/image_view.cpp +0 -18
  20. data/ext/reflex/native.cpp +18 -6
  21. data/ext/reflex/rect_shape.cpp +86 -0
  22. data/ext/reflex/shape_view.cpp +161 -0
  23. data/ext/reflex/view.cpp +71 -30
  24. data/ext/reflex/window.cpp +5 -1
  25. data/include/reflex/body.h +42 -12
  26. data/include/reflex/event.h +27 -1
  27. data/include/reflex/fixture.h +6 -5
  28. data/include/reflex/image_view.h +5 -5
  29. data/include/reflex/ruby/application.h +27 -6
  30. data/include/reflex/ruby/event.h +11 -0
  31. data/include/reflex/ruby/shape_view.h +96 -0
  32. data/include/reflex/ruby/view.h +60 -5
  33. data/include/reflex/ruby/window.h +12 -3
  34. data/include/reflex/shape_view.h +146 -0
  35. data/include/reflex/view.h +17 -5
  36. data/lib/reflex/application.rb +9 -9
  37. data/lib/reflex/body.rb +2 -0
  38. data/lib/reflex/contact_event.rb +38 -0
  39. data/lib/reflex/image_view.rb +1 -1
  40. data/lib/reflex/shape_view.rb +25 -0
  41. data/lib/reflex/view.rb +19 -9
  42. data/lib/reflex/window.rb +11 -10
  43. data/lib/reflex.rb +15 -13
  44. data/lib/reflexion.rb +25 -18
  45. data/samples/osx/hello/hello/main.cpp +6 -0
  46. data/samples/physics.rb +22 -12
  47. data/samples/reflexion/breakout.rb +52 -0
  48. data/samples/reflexion/hello.rb +5 -7
  49. data/samples/reflexion/paint.rb +10 -11
  50. data/samples/reflexion/physics.rb +28 -0
  51. data/samples/reflexion/pulse.rb +10 -8
  52. data/samples/shapes.rb +2 -2
  53. data/src/body.cpp +241 -40
  54. data/src/event.cpp +32 -2
  55. data/src/shape_view.cpp +306 -0
  56. data/src/view.cpp +232 -66
  57. data/src/world.cpp +110 -30
  58. data/src/world.h +61 -14
  59. metadata +24 -7
  60. data/lib/reflex/arc_shape.rb +0 -20
  61. data/lib/reflex/ellipse_shape.rb +0 -20
  62. data/lib/reflex/line_shape.rb +0 -20
  63. data/lib/reflex/rect_shape.rb +0 -20
  64. data/lib/reflex/shape.rb +0 -34
@@ -0,0 +1,153 @@
1
+ #include "reflex/ruby/shape_view.h"
2
+
3
+
4
+ #include <rucy.h>
5
+ #include <rays/ruby/color.h>
6
+ #include "reflex/ruby/view.h"
7
+
8
+
9
+ using namespace Rucy;
10
+
11
+ using Reflex::coord;
12
+
13
+
14
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Reflex::ShapeView)
15
+
16
+ #define THIS to<Reflex::ShapeView*>(self)
17
+
18
+ #define CHECK RUCY_CHECK_OBJECT(Reflex::ShapeView, self)
19
+
20
+ #define CALL(fun) RUCY_WRAPPER_CALL(Reflex::ShapeView, THIS, fun)
21
+
22
+
23
+ static
24
+ VALUE alloc(VALUE klass)
25
+ {
26
+ return value(new Reflex::RubyShapeView<Reflex::ShapeView>, klass);
27
+ }
28
+
29
+ static
30
+ VALUE set_fill(VALUE self)
31
+ {
32
+ CHECK;
33
+ check_arg_count(__FILE__, __LINE__, "ShapeView#set_fill", argc, 1, 2, 3, 4);
34
+
35
+ if (argc == 1 && argv[0].is_kind_of(Rays::color_class()))
36
+ THIS->set_fill(to<Rays::Color&>(argv[0]));
37
+ else if (argc == 1 || argc == 2)
38
+ {
39
+ float v = to<float>(argv[0]);
40
+ float a = (argc >= 2) ? to<float>(argv[1]) : 1;
41
+ THIS->set_fill(v, v, v, a);
42
+ }
43
+ else
44
+ {
45
+ float r = to<float>(argv[0]);
46
+ float g = to<float>(argv[1]);
47
+ float b = to<float>(argv[2]);
48
+ float a = (argc == 4) ? to<float>(argv[3]) : 1;
49
+ THIS->set_fill(r, g, b, a);
50
+ }
51
+
52
+ return self;
53
+ }
54
+
55
+ static
56
+ VALUE no_fill(VALUE self)
57
+ {
58
+ CHECK;
59
+ THIS->no_fill();
60
+ return self;
61
+ }
62
+
63
+ static
64
+ VALUE get_fill(VALUE self)
65
+ {
66
+ CHECK;
67
+ return value(THIS->fill());
68
+ }
69
+
70
+ static
71
+ VALUE set_stroke(VALUE self)
72
+ {
73
+ CHECK;
74
+ check_arg_count(__FILE__, __LINE__, "ShapeView#set_stroke", argc, 1, 2, 3, 4);
75
+
76
+ if (argc == 1 && argv[0].is_kind_of(Rays::color_class()))
77
+ THIS->set_stroke(to<Rays::Color&>(argv[0]));
78
+ else if (argc == 1 || argc == 2)
79
+ {
80
+ float v = to<float>(argv[0]);
81
+ float a = (argc >= 2) ? to<float>(argv[1]) : 1;
82
+ THIS->set_stroke(v, v, v, a);
83
+ }
84
+ else
85
+ {
86
+ float r = to<float>(argv[0]);
87
+ float g = to<float>(argv[1]);
88
+ float b = to<float>(argv[2]);
89
+ float a = (argc == 4) ? to<float>(argv[3]) : 1;
90
+ THIS->set_stroke(r, g, b, a);
91
+ }
92
+
93
+ return self;
94
+ }
95
+
96
+ static
97
+ VALUE no_stroke(VALUE self)
98
+ {
99
+ CHECK;
100
+ THIS->no_stroke();
101
+ return self;
102
+ }
103
+
104
+ static
105
+ VALUE get_stroke(VALUE self)
106
+ {
107
+ CHECK;
108
+ return value(THIS->stroke());
109
+ }
110
+
111
+ static
112
+ VALUE on_draw_shape(VALUE self, VALUE event)
113
+ {
114
+ CHECK;
115
+ CALL(on_draw_shape(to<Reflex::DrawEvent*>(event)));
116
+ }
117
+
118
+ static
119
+ RUCY_DEF_clear_override_flags(cof, Reflex::ShapeView);
120
+
121
+
122
+ static Class cShapeView;
123
+
124
+ void
125
+ Init_shape_view ()
126
+ {
127
+ Module mReflex = rb_define_module("Reflex");
128
+
129
+ cShapeView = mReflex.define_class("ShapeView", Reflex::view_class());
130
+ rb_define_alloc_func(cShapeView, alloc);
131
+ rb_define_private_method(cShapeView, "set_fill", RUBY_METHOD_FUNC(set_fill), -1);
132
+ rb_define_method(cShapeView, "no_fill", RUBY_METHOD_FUNC(no_fill), 0);
133
+ rb_define_method(cShapeView, "fill", RUBY_METHOD_FUNC(get_fill), 0);
134
+ rb_define_private_method(cShapeView, "set_stroke", RUBY_METHOD_FUNC(set_stroke), -1);
135
+ rb_define_method(cShapeView, "no_stroke", RUBY_METHOD_FUNC(no_stroke), 0);
136
+ rb_define_method(cShapeView, "stroke", RUBY_METHOD_FUNC(get_stroke), 0);
137
+ rb_define_method(cShapeView, "on_draw_shape", RUBY_METHOD_FUNC(on_draw_shape), 1);
138
+
139
+ }
140
+
141
+
142
+ namespace Reflex
143
+ {
144
+
145
+
146
+ Class
147
+ shape_view_class ()
148
+ {
149
+ return cShapeView;
150
+ }
151
+
152
+
153
+ }// Reflex
@@ -205,7 +205,7 @@ static
205
205
  VALUE content_size(VALUE self)
206
206
  {
207
207
  CHECK;
208
- return value(THIS->content_size());
208
+ return value(CALL(content_size()));
209
209
  }
210
210
 
211
211
  static
@@ -290,6 +290,13 @@ VALUE get_frame(VALUE self)
290
290
  return value(THIS->frame());
291
291
  }
292
292
 
293
+ static
294
+ VALUE get_angle(VALUE self)
295
+ {
296
+ CHECK;
297
+ return value(THIS->angle());
298
+ }
299
+
293
300
  static
294
301
  VALUE set_capture(VALUE self, VALUE types)
295
302
  {
@@ -372,27 +379,14 @@ VALUE body(VALUE self)
372
379
  }
373
380
 
374
381
  static
375
- VALUE set_density(VALUE self, VALUE value)
382
+ VALUE meter2pixel(VALUE self)
376
383
  {
377
384
  CHECK;
378
- THIS->set_density(value.as_f(true));
379
- return value;
380
- }
385
+ check_arg_count(__FILE__, __LINE__, "View#meter2pixel", argc, 0, 1, 2);
381
386
 
382
- static
383
- VALUE set_friction(VALUE self, VALUE value)
384
- {
385
- CHECK;
386
- THIS->set_friction(value.as_f(true));
387
- return value;
388
- }
389
-
390
- static
391
- VALUE set_restitution(VALUE self, VALUE value)
392
- {
393
- CHECK;
394
- THIS->set_restitution(value.as_f(true));
395
- return value;
387
+ float meter = argc >= 1 ? argv[0].as_f(true) : 1;
388
+ bool create_world = argc >= 2 ? (bool) argv[1] : true;
389
+ return value(THIS->meter2pixel(meter, create_world));
396
390
  }
397
391
 
398
392
  static
@@ -410,6 +404,13 @@ VALUE get_gravity(VALUE self)
410
404
  return value(THIS->gravity());
411
405
  }
412
406
 
407
+ static
408
+ VALUE wall(VALUE self)
409
+ {
410
+ CHECK;
411
+ return value(THIS->wall());
412
+ }
413
+
413
414
  static
414
415
  VALUE set_debug(VALUE self, VALUE state)
415
416
  {
@@ -419,16 +420,20 @@ VALUE set_debug(VALUE self, VALUE state)
419
420
  }
420
421
 
421
422
  static
422
- VALUE is_debug(VALUE self)
423
+ VALUE debugging(VALUE self)
423
424
  {
424
425
  CHECK;
425
- return value(THIS->is_debug());
426
+ return value(THIS->debugging());
426
427
  }
427
428
 
428
429
  static
429
430
  VALUE on_attach(VALUE self, VALUE event)
430
431
  {
431
432
  CHECK;
433
+
434
+ RUCY_SYM(call_attach_block);
435
+ self.call(call_attach_block);
436
+
432
437
  CALL(on_attach(to<Reflex::Event*>(event)));
433
438
  }
434
439
 
@@ -481,6 +486,13 @@ VALUE on_resize(VALUE self, VALUE event)
481
486
  CALL(on_resize(to<Reflex::FrameEvent*>(event)));
482
487
  }
483
488
 
489
+ static
490
+ VALUE on_rotate(VALUE self, VALUE event)
491
+ {
492
+ CHECK;
493
+ CALL(on_rotate(to<Reflex::FrameEvent*>(event)));
494
+ }
495
+
484
496
  static
485
497
  VALUE on_scroll(VALUE self, VALUE event)
486
498
  {
@@ -565,6 +577,27 @@ VALUE on_capture(VALUE self, VALUE event)
565
577
  CALL(on_capture(to<Reflex::CaptureEvent*>(event)));
566
578
  }
567
579
 
580
+ static
581
+ VALUE on_contact(VALUE self, VALUE event)
582
+ {
583
+ CHECK;
584
+ CALL(on_contact(to<Reflex::ContactEvent*>(event)));
585
+ }
586
+
587
+ static
588
+ VALUE on_contact_begin(VALUE self, VALUE event)
589
+ {
590
+ CHECK;
591
+ CALL(on_contact_begin(to<Reflex::ContactEvent*>(event)));
592
+ }
593
+
594
+ static
595
+ VALUE on_contact_end(VALUE self, VALUE event)
596
+ {
597
+ CHECK;
598
+ CALL(on_contact_end(to<Reflex::ContactEvent*>(event)));
599
+ }
600
+
568
601
  static
569
602
  RUCY_DEF_clear_override_flags(cof, Reflex::View);
570
603
 
@@ -607,6 +640,7 @@ Init_view ()
607
640
  rb_define_method(cView, "selector", RUBY_METHOD_FUNC(get_selector), 0);
608
641
  rb_define_private_method(cView, "set_frame", RUBY_METHOD_FUNC(set_frame), 1);
609
642
  rb_define_private_method(cView, "get_frame", RUBY_METHOD_FUNC(get_frame), 0);
643
+ rb_define_method(cView, "angle", RUBY_METHOD_FUNC(get_angle), 0);
610
644
  rb_define_method(cView, "scroll_to", RUBY_METHOD_FUNC(scroll_to), -1);
611
645
  rb_define_method(cView, "scroll_by", RUBY_METHOD_FUNC(scroll_by), -1);
612
646
  rb_define_method(cView, "scroll", RUBY_METHOD_FUNC(get_scroll), 0);
@@ -615,14 +649,13 @@ Init_view ()
615
649
  rb_define_method(cView, "parent", RUBY_METHOD_FUNC(parent), 0);
616
650
  rb_define_method(cView, "window", RUBY_METHOD_FUNC(window), 0);
617
651
  rb_define_method(cView, "body", RUBY_METHOD_FUNC(body), 0);
618
- rb_define_method(cView, "density=", RUBY_METHOD_FUNC(set_density), 1);
619
- rb_define_method(cView, "friction=", RUBY_METHOD_FUNC(set_friction), 1);
620
- rb_define_method(cView, "restitution=", RUBY_METHOD_FUNC(set_restitution), 1);
652
+ rb_define_method(cView, "meter2pixel", RUBY_METHOD_FUNC(meter2pixel), -1);
621
653
  rb_define_method(cView, "set_gravity", RUBY_METHOD_FUNC(set_gravity), 2);
622
654
  rb_define_method(cView, "gravity", RUBY_METHOD_FUNC(get_gravity), 0);
655
+ rb_define_method(cView, "wall", RUBY_METHOD_FUNC(wall), 0);
623
656
  rb_define_method(cView, "debug=", RUBY_METHOD_FUNC(set_debug), 1);
624
- cView.define_method("debug?", is_debug);
625
- cView.define_method("on_attach!", on_attach);
657
+ cView.define_method("debug?", debugging);
658
+ rb_define_method(cView, "on_attach", RUBY_METHOD_FUNC(on_attach), 1);
626
659
  rb_define_method(cView, "on_detach", RUBY_METHOD_FUNC(on_detach), 1);
627
660
  rb_define_method(cView, "on_show", RUBY_METHOD_FUNC(on_show), 1);
628
661
  rb_define_method(cView, "on_hide", RUBY_METHOD_FUNC(on_hide), 1);
@@ -630,6 +663,7 @@ Init_view ()
630
663
  rb_define_method(cView, "on_draw", RUBY_METHOD_FUNC(on_draw), 1);
631
664
  rb_define_method(cView, "on_move", RUBY_METHOD_FUNC(on_move), 1);
632
665
  rb_define_method(cView, "on_resize", RUBY_METHOD_FUNC(on_resize), 1);
666
+ rb_define_method(cView, "on_rotate", RUBY_METHOD_FUNC(on_rotate), 1);
633
667
  rb_define_method(cView, "on_scroll", RUBY_METHOD_FUNC(on_scroll), 1);
634
668
  rb_define_method(cView, "on_focus", RUBY_METHOD_FUNC(on_focus), 1);
635
669
  rb_define_method(cView, "on_blur", RUBY_METHOD_FUNC(on_blur), 1);
@@ -642,6 +676,9 @@ Init_view ()
642
676
  rb_define_method(cView, "on_pointer_move", RUBY_METHOD_FUNC(on_pointer_move), 1);
643
677
  rb_define_method(cView, "on_wheel", RUBY_METHOD_FUNC(on_wheel), 1);
644
678
  rb_define_method(cView, "on_capture", RUBY_METHOD_FUNC(on_capture), 1);
679
+ rb_define_method(cView, "on_contact", RUBY_METHOD_FUNC(on_contact), 1);
680
+ rb_define_method(cView, "on_contact_begin", RUBY_METHOD_FUNC(on_contact_begin), 1);
681
+ rb_define_method(cView, "on_contact_end", RUBY_METHOD_FUNC(on_contact_end), 1);
645
682
  cView.define_const("CAPTURE_NONE", Reflex::View::CAPTURE_NONE);
646
683
  cView.define_const("CAPTURE_KEY", Reflex::View::CAPTURE_KEY);
647
684
  cView.define_const("CAPTURE_POINTER", Reflex::View::CAPTURE_POINTER);
@@ -120,6 +120,10 @@ static
120
120
  VALUE on_show(VALUE self, VALUE event)
121
121
  {
122
122
  CHECK;
123
+
124
+ RUCY_SYM(call_show_block);
125
+ self.call(call_show_block);
126
+
123
127
  CALL(on_show(to<Reflex::Event*>(event)));
124
128
  }
125
129
 
@@ -246,7 +250,7 @@ Init_window ()
246
250
  rb_define_method(cWindow, "root", RUBY_METHOD_FUNC(root), 0);
247
251
  rb_define_method(cWindow, "focus", RUBY_METHOD_FUNC(focus), 0);
248
252
  rb_define_method(cWindow, "painter", RUBY_METHOD_FUNC(painter), 0);
249
- cWindow.define_method("on_show!", on_show);
253
+ rb_define_method(cWindow, "on_show", RUBY_METHOD_FUNC(on_show), 1);
250
254
  rb_define_method(cWindow, "on_hide", RUBY_METHOD_FUNC(on_hide), 1);
251
255
  rb_define_method(cWindow, "on_close", RUBY_METHOD_FUNC(on_close), 1);
252
256
  rb_define_method(cWindow, "on_update", RUBY_METHOD_FUNC(on_update), 1);
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.9
@@ -63,6 +63,10 @@ static
63
63
  RUCY_DEF1(on_start, event)
64
64
  {
65
65
  CHECK;
66
+
67
+ RUCY_SYM(call_start_block);
68
+ self.call(call_start_block);
69
+
66
70
  CALL(on_start(to<Reflex::Event*>(event)));
67
71
  }
68
72
  RUCY_END
@@ -112,8 +116,8 @@ Init_application ()
112
116
  cApplication.define_method("quit", quit);
113
117
  cApplication.define_method("name=", set_name);
114
118
  cApplication.define_method("name", get_name);
115
- cApplication.define_method("on_start!", on_start);
116
- cApplication.define_method("on_quit", on_quit);
119
+ cApplication.define_method("on_start", on_start);
120
+ cApplication.define_method("on_quit", on_quit);
117
121
  cApplication.define_method("on_preference", on_preference);
118
122
  cApplication.define_method("on_about", on_about);
119
123
  cApplication.define_singleton_method("instance", instance);
@@ -0,0 +1,94 @@
1
+ #include "reflex/ruby/shape_view.h"
2
+
3
+
4
+ #include <rucy.h>
5
+
6
+
7
+ using namespace Rucy;
8
+
9
+ using Reflex::coord;
10
+
11
+
12
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Reflex::ArcShape)
13
+
14
+ #define THIS to<Reflex::ArcShape*>(self)
15
+
16
+ #define CHECK RUCY_CHECK_OBJECT(Reflex::ArcShape, self)
17
+
18
+ #define CALL(fun) RUCY_WRAPPER_CALL(Reflex::ArcShape, THIS, fun)
19
+
20
+
21
+ static
22
+ RUCY_DEF_ALLOC(alloc, klass)
23
+ {
24
+ return value(new Reflex::RubyShapeView<Reflex::ArcShape>, klass);
25
+ }
26
+ RUCY_END
27
+
28
+ static
29
+ RUCY_DEF1(set_angle_from, degree)
30
+ {
31
+ CHECK;
32
+ THIS->set_angle_from(degree.as_f(true));
33
+ return self;
34
+ }
35
+ RUCY_END
36
+
37
+ static
38
+ RUCY_DEF0(get_angle_from)
39
+ {
40
+ CHECK;
41
+ return value(THIS->angle_from());
42
+ }
43
+ RUCY_END
44
+
45
+ static
46
+ RUCY_DEF1(set_angle_to, degree)
47
+ {
48
+ CHECK;
49
+ THIS->set_angle_to(degree.as_f(true));
50
+ return self;
51
+ }
52
+ RUCY_END
53
+
54
+ static
55
+ RUCY_DEF0(get_angle_to)
56
+ {
57
+ CHECK;
58
+ return value(THIS->angle_to());
59
+ }
60
+ RUCY_END
61
+
62
+ static
63
+ RUCY_DEF_clear_override_flags(cof, Reflex::ArcShape);
64
+
65
+
66
+ static Class cArcShape;
67
+
68
+ void
69
+ Init_arc_shape ()
70
+ {
71
+ Module mReflex = define_module("Reflex");
72
+
73
+ cArcShape = mReflex.define_class("ArcShape", Reflex::ellipse_shape_class());
74
+ cArcShape.define_alloc_func(alloc);
75
+ cArcShape.define_method("angle_from=", set_angle_from);
76
+ cArcShape.define_method("angle_from", get_angle_from);
77
+ cArcShape.define_method("angle_to=", set_angle_to);
78
+ cArcShape.define_method("angle_to=", get_angle_to);
79
+ cArcShape.define_clear_override_flags(cof);
80
+ }
81
+
82
+
83
+ namespace Reflex
84
+ {
85
+
86
+
87
+ Class
88
+ arc_shape_class ()
89
+ {
90
+ return cArcShape;
91
+ }
92
+
93
+
94
+ }// Reflex
data/ext/reflex/body.cpp CHANGED
@@ -35,35 +35,40 @@ RUCY_DEF2(add_box, width, height)
35
35
  RUCY_END
36
36
 
37
37
  static
38
- RUCY_DEF1(add_circle, size)
38
+ RUCY_DEF2(add_ellipse, width, height)
39
39
  {
40
40
  CHECK;
41
- return value(THIS->add_circle(size.as_f(true)));
41
+ return value(THIS->add_ellipse(width.as_f(true), height.as_f(true)));
42
42
  }
43
43
  RUCY_END
44
44
 
45
45
  static
46
- RUCY_DEF0(clear_fixtures)
46
+ RUCY_DEF4(add_arc, width, height, angle_from, angle_to)
47
47
  {
48
48
  CHECK;
49
- THIS->clear_fixtures();
50
- return self;
49
+ return value(THIS->add_arc(
50
+ width.as_f(true), height.as_f(true),
51
+ angle_from.as_f(true), angle_to.as_f(true)));
51
52
  }
52
53
  RUCY_END
53
54
 
54
55
  static
55
- RUCY_DEF0(get_position)
56
+ RUCY_DEF0(clear_fixtures)
56
57
  {
57
58
  CHECK;
58
- return value(THIS->position());
59
+ THIS->clear_fixtures();
60
+ return self;
59
61
  }
60
62
  RUCY_END
61
63
 
62
64
  static
63
- RUCY_DEF0(get_angle)
65
+ RUCY_DEFN(meter2pixel)
64
66
  {
65
67
  CHECK;
66
- return value(THIS->angle());
68
+ check_arg_count(__FILE__, __LINE__, "View#meter2pixel", argc, 0, 1);
69
+
70
+ float meter = argc >= 1 ? argv[0].as_f(true) : 1;
71
+ return value(THIS->meter2pixel(meter));
67
72
  }
68
73
  RUCY_END
69
74
 
@@ -101,6 +106,56 @@ RUCY_DEF0(is_dynamic)
101
106
  }
102
107
  RUCY_END
103
108
 
109
+ static
110
+ RUCY_DEF0(get_position)
111
+ {
112
+ CHECK;
113
+ return value(THIS->position());
114
+ }
115
+ RUCY_END
116
+
117
+ static
118
+ RUCY_DEF0(get_angle)
119
+ {
120
+ CHECK;
121
+ return value(THIS->angle());
122
+ }
123
+ RUCY_END
124
+
125
+ static
126
+ RUCY_DEF1(set_linear_velocity, velocity)
127
+ {
128
+ CHECK;
129
+ THIS->set_linear_velocity(to<Rays::Point&>(velocity));
130
+ return self;
131
+ }
132
+ RUCY_END
133
+
134
+ static
135
+ RUCY_DEF0(get_linear_velocity)
136
+ {
137
+ CHECK;
138
+ return value(THIS->linear_velocity());
139
+ }
140
+ RUCY_END
141
+
142
+ static
143
+ RUCY_DEF1(set_angular_velocity, velocity)
144
+ {
145
+ CHECK;
146
+ THIS->set_angular_velocity(velocity.as_f(true));
147
+ return self;
148
+ }
149
+ RUCY_END
150
+
151
+ static
152
+ RUCY_DEF0(get_angular_velocity)
153
+ {
154
+ CHECK;
155
+ return value(THIS->angular_velocity());
156
+ }
157
+ RUCY_END
158
+
104
159
  static
105
160
  RUCY_DEF1(set_density, density)
106
161
  {
@@ -110,6 +165,14 @@ RUCY_DEF1(set_density, density)
110
165
  }
111
166
  RUCY_END
112
167
 
168
+ static
169
+ RUCY_DEF0(get_density)
170
+ {
171
+ CHECK;
172
+ return value(THIS->density());
173
+ }
174
+ RUCY_END
175
+
113
176
  static
114
177
  RUCY_DEF1(set_friction, friction)
115
178
  {
@@ -119,6 +182,14 @@ RUCY_DEF1(set_friction, friction)
119
182
  }
120
183
  RUCY_END
121
184
 
185
+ static
186
+ RUCY_DEF0(get_friction)
187
+ {
188
+ CHECK;
189
+ return value(THIS->friction());
190
+ }
191
+ RUCY_END
192
+
122
193
  static
123
194
  RUCY_DEF1(set_restitution, restitution)
124
195
  {
@@ -128,6 +199,14 @@ RUCY_DEF1(set_restitution, restitution)
128
199
  }
129
200
  RUCY_END
130
201
 
202
+ static
203
+ RUCY_DEF0(get_restitution)
204
+ {
205
+ CHECK;
206
+ return value(THIS->restitution());
207
+ }
208
+ RUCY_END
209
+
131
210
  static
132
211
  RUCY_DEF0(each)
133
212
  {
@@ -151,18 +230,27 @@ Init_body ()
151
230
 
152
231
  cBody = mReflex.define_class("Body");
153
232
  cBody.define_private_method("initialize_copy", initialize_copy);
154
- cBody.define_method("add_box", add_box);
155
- cBody.define_method("add_circle", add_circle);
233
+ cBody.define_method("add_box", add_box);
234
+ cBody.define_method("add_ellipse", add_ellipse);
235
+ cBody.define_method("add_arc", add_arc);
156
236
  cBody.define_method("clear_fixtures", clear_fixtures);
157
- cBody.define_method("position", get_position);
158
- cBody.define_method("angle", get_angle);
237
+ cBody.define_method("meter2pixel", meter2pixel);
159
238
  cBody.define_method("static=", set_static);
160
239
  cBody.define_method("static?", is_static);
161
240
  cBody.define_method("dynamic=", set_dynamic);
162
241
  cBody.define_method("dynamic?", is_dynamic);
242
+ cBody.define_method("position", get_position);
243
+ cBody.define_method("angle", get_angle);
244
+ cBody.define_method("linear_velocity=", set_linear_velocity);
245
+ cBody.define_method("linear_velocity", get_linear_velocity);
246
+ cBody.define_method("angular_velocity=", set_angular_velocity);
247
+ cBody.define_method("angular_velocity", get_angular_velocity);
163
248
  cBody.define_method("density=", set_density);
249
+ cBody.define_method("density", get_density);
164
250
  cBody.define_method("friction=", set_friction);
251
+ cBody.define_method("friction", get_friction);
165
252
  cBody.define_method("restitution=", set_restitution);
253
+ cBody.define_method("restitution", get_restitution);
166
254
  cBody.define_method("each", each);
167
255
  }
168
256