reflexion 0.1.8 → 0.1.9

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