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,146 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SHAPE_VIEW_H__
4
+ #define __REFLEX_SHAPE_VIEW_H__
5
+
6
+
7
+ #include <xot/pimpl.h>
8
+ #include <reflex/view.h>
9
+
10
+
11
+ namespace Reflex
12
+ {
13
+
14
+
15
+ class ShapeView : public View
16
+ {
17
+
18
+ typedef View Super;
19
+
20
+ public:
21
+
22
+ ShapeView (const char* name = NULL);
23
+
24
+ virtual ~ShapeView ();
25
+
26
+ virtual void set_fill (float red, float green, float blue, float alpha = 1);
27
+
28
+ virtual void set_fill (const Color& color);
29
+
30
+ virtual void no_fill ();
31
+
32
+ virtual const Color& fill () const;
33
+
34
+ virtual void set_stroke (float red, float green, float blue, float alpha = 1);
35
+
36
+ virtual void set_stroke (const Color& color);
37
+
38
+ virtual void no_stroke ();
39
+
40
+ virtual const Color& stroke () const;
41
+
42
+ virtual Point content_size () const;
43
+
44
+ virtual void on_draw (DrawEvent* e);
45
+
46
+ virtual void on_draw_shape (DrawEvent* e);
47
+
48
+ struct Data;
49
+
50
+ Xot::PImpl<Data> self;
51
+
52
+ };// ShapeView
53
+
54
+
55
+ class RectShape : public ShapeView
56
+ {
57
+
58
+ typedef ShapeView Super;
59
+
60
+ public:
61
+
62
+ RectShape (const char* name = NULL);
63
+
64
+ virtual ~RectShape ();
65
+
66
+ virtual void set_round (coord round);
67
+
68
+ virtual void set_round (coord width, coord height);
69
+
70
+ virtual void set_round (const Point& round);
71
+
72
+ virtual const Point& round () const;
73
+
74
+ virtual void on_draw_shape (DrawEvent* e);
75
+
76
+ struct Data;
77
+
78
+ Xot::PImpl<Data> self;
79
+
80
+ };// RectShape
81
+
82
+
83
+ class EllipseShape : public ShapeView
84
+ {
85
+
86
+ typedef ShapeView Super;
87
+
88
+ public:
89
+
90
+ EllipseShape (const char* name = NULL);
91
+
92
+ virtual ~EllipseShape ();
93
+
94
+ virtual void set_radius_min (coord radius);
95
+
96
+ virtual coord radius_min () const;
97
+
98
+ virtual void set_nsegment (uint num_of_segments);
99
+
100
+ virtual uint nsegment() const;
101
+
102
+ virtual void make_body ();
103
+
104
+ virtual void on_draw_shape (DrawEvent* e);
105
+
106
+ struct Data;
107
+
108
+ Xot::PImpl<Data> self;
109
+
110
+ };// EllipseShape
111
+
112
+
113
+ class ArcShape : public EllipseShape
114
+ {
115
+
116
+ typedef EllipseShape Super;
117
+
118
+ public:
119
+
120
+ ArcShape (const char* name = NULL);
121
+
122
+ virtual ~ArcShape ();
123
+
124
+ virtual void set_angle_from (float degree);
125
+
126
+ virtual float angle_from () const;
127
+
128
+ virtual void set_angle_to (float degree);
129
+
130
+ virtual float angle_to () const;
131
+
132
+ virtual void make_body ();
133
+
134
+ virtual void on_draw_shape (DrawEvent* e);
135
+
136
+ struct Data;
137
+
138
+ Xot::PImpl<Data> self;
139
+
140
+ };// ArcShape
141
+
142
+
143
+ }// Reflex
144
+
145
+
146
+ #endif//EOH
@@ -154,6 +154,8 @@ namespace Reflex
154
154
 
155
155
  virtual const Bounds& frame () const;
156
156
 
157
+ virtual float angle () const;
158
+
157
159
  virtual void scroll_to (coord x, coord y, coord z = 0);
158
160
 
159
161
  virtual void scroll_to (const Point& scroll);
@@ -180,11 +182,9 @@ namespace Reflex
180
182
 
181
183
  virtual const Body* body () const;
182
184
 
183
- virtual void set_density (float density);
184
-
185
- virtual void set_friction (float friction);
185
+ virtual float meter2pixel (float meter = 1, bool create_world = true);
186
186
 
187
- virtual void set_restitution (float restitution);
187
+ virtual float meter2pixel (float meter = 1) const;
188
188
 
189
189
  virtual void set_gravity (coord x, coord y);
190
190
 
@@ -192,9 +192,13 @@ namespace Reflex
192
192
 
193
193
  virtual Point gravity () const;
194
194
 
195
+ virtual Body* wall ();
196
+
197
+ virtual const Body* wall () const;
198
+
195
199
  virtual void set_debug (bool state);
196
200
 
197
- virtual bool is_debug () const;
201
+ virtual bool debugging () const;
198
202
 
199
203
  virtual Point from_parent (const Point& point) const;
200
204
 
@@ -224,6 +228,8 @@ namespace Reflex
224
228
 
225
229
  virtual void on_resize (FrameEvent* e);
226
230
 
231
+ virtual void on_rotate (FrameEvent* e);
232
+
227
233
  virtual void on_scroll (ScrollEvent* e);
228
234
 
229
235
  virtual void on_focus (FocusEvent* e);
@@ -248,6 +254,12 @@ namespace Reflex
248
254
 
249
255
  virtual void on_capture (CaptureEvent* e);
250
256
 
257
+ virtual void on_contact (ContactEvent* e);
258
+
259
+ virtual void on_contact_begin (ContactEvent* e);
260
+
261
+ virtual void on_contact_end (ContactEvent* e);
262
+
251
263
  virtual operator bool () const;
252
264
 
253
265
  virtual bool operator ! () const;
@@ -18,21 +18,21 @@ module Reflex
18
18
  def initialize (opts = {}, &block)
19
19
  super()
20
20
  set opts
21
- @on_start = block if block
22
- end
23
-
24
- def on_start (e)
25
- if @on_start
26
- Xot::BlockUtil.instance_eval_or_block_call self, &@on_start
27
- @on_start = nil
28
- end
29
- on_start! e
21
+ @start_block = block if block
30
22
  end
31
23
 
32
24
  def self.start (*args, &block)
33
25
  self.new(*args, &block).start
34
26
  end
35
27
 
28
+ private
29
+
30
+ def call_start_block ()
31
+ return unless @start_block
32
+ Xot::BlockUtil.instance_eval_or_block_call self, &@start_block
33
+ @start_block = nil
34
+ end
35
+
36
36
  end# Application
37
37
 
38
38
 
data/lib/reflex/body.rb CHANGED
@@ -11,6 +11,8 @@ module Reflex
11
11
 
12
12
  include Xot::Setter
13
13
 
14
+ alias meter meter2pixel
15
+
14
16
  end# Body
15
17
 
16
18
 
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'reflex/ext'
5
+
6
+
7
+ module Reflex
8
+
9
+
10
+ class ContactEvent
11
+
12
+ def type ()
13
+ TYPE2SYM[get_type] || :none
14
+ end
15
+
16
+ def begin? ()
17
+ get_type == TYPE_BEGIN
18
+ end
19
+
20
+ def end? ()
21
+ get_type == TYPE_END
22
+ end
23
+
24
+ def inspect ()
25
+ "#<Reflex::ContactEvent type:#{type} view:#{view}>"
26
+ end
27
+
28
+ private
29
+
30
+ TYPE2SYM = {
31
+ TYPE_BEGIN => :begin,
32
+ TYPE_END => :end,
33
+ }
34
+
35
+ end# ContactEvent
36
+
37
+
38
+ end# Reflex
@@ -7,7 +7,7 @@ require 'reflex/view'
7
7
  module Reflex
8
8
 
9
9
 
10
- class ImageView < View
10
+ class ImageView
11
11
 
12
12
  has_model
13
13
 
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'reflex/view'
5
+
6
+
7
+ module Reflex
8
+
9
+
10
+ class ShapeView
11
+
12
+ def fill= (*args)
13
+ set_fill Color.color *args
14
+ fill
15
+ end
16
+
17
+ def stroke= (*args)
18
+ set_stroke Color.color *args
19
+ stroke
20
+ end
21
+
22
+ end# ShapeView
23
+
24
+
25
+ end# Reflex
data/lib/reflex/view.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
 
4
+ require 'forwardable'
4
5
  require 'xot/setter'
5
6
  require 'xot/block_util'
6
7
  require 'reflex/ext'
@@ -19,14 +20,23 @@ module Reflex
19
20
  include HasFrame
20
21
  include HasTags
21
22
 
23
+ extend Forwardable
24
+
25
+ def_delegators :body,
26
+ :static=, :static?, :dynamic=, :dynamic?,
27
+ :linear_velocity=, :linear_velocity,
28
+ :angular_velocity=, :angular_velocity,
29
+ :density=, :density, :friction=, :friction, :restitution=, :restitution
30
+
22
31
  alias add add_child
23
32
  alias remove remove_child
24
33
  alias find find_children
34
+ alias meter meter2pixel
25
35
 
26
36
  def initialize (opts = {}, &block)
27
37
  super()
28
38
  set opts
29
- @on_attach = block if block
39
+ @attach_block = block if block
30
40
  end
31
41
 
32
42
  def children ()
@@ -64,18 +74,18 @@ module Reflex
64
74
  end
65
75
  end
66
76
 
67
- def on_attach (e)
68
- on_attach! e
69
- if @on_attach
70
- Xot::BlockUtil.instance_eval_or_block_call self, &@on_attach
71
- @on_attach = nil
72
- end
73
- end
74
-
75
77
  def self.has_model ()
76
78
  include ModelView
77
79
  end
78
80
 
81
+ private
82
+
83
+ def call_attach_block ()
84
+ return unless @attach_block
85
+ Xot::BlockUtil.instance_eval_or_block_call self, &@attach_block
86
+ @attach_block = nil
87
+ end
88
+
79
89
  end# View
80
90
 
81
91
 
data/lib/reflex/window.rb CHANGED
@@ -20,7 +20,8 @@ module Reflex
20
20
  extend Forwardable
21
21
 
22
22
  def_delegators :root,
23
- :add_child, :remove_child, :find_children, :style
23
+ :add_child, :remove_child, :find_children, :style, :meter2pixel, :meter,
24
+ :gravity=, :gravity, :wall, :debug=, :debug?
24
25
 
25
26
  alias add add_child
26
27
  alias remove remove_child
@@ -29,25 +30,25 @@ module Reflex
29
30
  def initialize (opts = {}, &block)
30
31
  super()
31
32
  set opts
32
- @on_show = block if block
33
+ @show_block = block if block
33
34
  end
34
35
 
35
36
  def paint (&block)
36
37
  painter.begin &block
37
38
  end
38
39
 
39
- def on_show (e)
40
- if @on_show
41
- Xot::BlockUtil.instance_eval_or_block_call self, &@on_show
42
- @on_show = nil
43
- end
44
- on_show! e
45
- end
46
-
47
40
  def self.show (*args, &block)
48
41
  new(*args, &block).show
49
42
  end
50
43
 
44
+ private
45
+
46
+ def call_show_block ()
47
+ return unless @show_block
48
+ Xot::BlockUtil.instance_eval_or_block_call self, &@show_block
49
+ @show_block = nil
50
+ end
51
+
51
52
  end# Window
52
53
 
53
54
 
data/lib/reflex.rb CHANGED
@@ -17,24 +17,13 @@ require 'reflex/painter'
17
17
 
18
18
  require 'reflex/reflex'
19
19
  require 'reflex/helper'
20
- require 'reflex/application'
21
- require 'reflex/window'
22
- require 'reflex/view'
23
- require 'reflex/body'
24
- require 'reflex/fixture'
25
- require 'reflex/selector'
26
- require 'reflex/shape'
27
- require 'reflex/line_shape'
28
- require 'reflex/rect_shape'
29
- require 'reflex/ellipse_shape'
30
- require 'reflex/arc_shape'
31
- require 'reflex/model'
32
- require 'reflex/model_owner'
20
+
33
21
  require 'reflex/selector'
34
22
  require 'reflex/style'
35
23
  require 'reflex/style_length'
36
24
  require 'reflex/style_length2'
37
25
  require 'reflex/style_length4'
26
+
38
27
  require 'reflex/update_event'
39
28
  require 'reflex/draw_event'
40
29
  require 'reflex/frame_event'
@@ -44,7 +33,20 @@ require 'reflex/key_event'
44
33
  require 'reflex/pointer_event'
45
34
  require 'reflex/wheel_event'
46
35
  require 'reflex/capture_event'
36
+ require 'reflex/contact_event'
37
+
38
+ require 'reflex/body'
39
+ require 'reflex/fixture'
40
+
41
+ require 'reflex/model'
42
+ require 'reflex/model_owner'
43
+
44
+ require 'reflex/application'
45
+ require 'reflex/window'
46
+ require 'reflex/view'
47
47
 
48
48
  require 'reflex/button'
49
49
  require 'reflex/text_view'
50
50
  require 'reflex/image_view'
51
+
52
+ require 'reflex/shape_view'
data/lib/reflexion.rb CHANGED
@@ -17,80 +17,87 @@ module Reflexion
17
17
  }
18
18
 
19
19
 
20
- class Screen < Window
20
+ class MainWindow < Window
21
21
 
22
22
  attr_accessor :update, :draw, :key, :pointer
23
23
 
24
24
  attr_reader :setup
25
25
 
26
+ attr_reader :event
27
+
26
28
  def setup= (block)
27
29
  @setup = block
28
- call_block self, &@setup
30
+ call_event nil, self, &@setup
29
31
  end
30
32
 
31
33
  def on_update (e)
32
34
  super
33
35
  redraw
34
- call_block e, &@update
36
+ call_event e, e, &@update
35
37
  end
36
38
 
37
39
  def on_draw (e)
38
40
  super
39
- call_block e, &@draw
41
+ call_event e, e.painter, &@draw
40
42
  end
41
43
 
42
44
  def on_key (e)
43
45
  super
44
- call_block e, &@key
46
+ call_event e, e, &@key
45
47
  end
46
48
 
47
49
  def on_pointer (e)
48
50
  super
49
- call_block e, &@pointer
51
+ call_event e, e, &@pointer
50
52
  end
51
53
 
52
- def call_block (*args, &block)
54
+ def call_event (event, *args, &block)
55
+ @event = event
53
56
  Xot::BlockUtil.instance_eval_or_block_call *args, &block if block
54
57
  end
55
58
 
56
- end# Screen
59
+ end# MainWindow
57
60
 
58
61
 
59
62
  module_function
60
63
 
61
- @@screen = Screen.new DEFAULTS
64
+ @@window = MainWindow.new DEFAULTS
65
+
66
+ def window ()
67
+ @@window
68
+ end
62
69
 
63
- def screen ()
64
- @@screen
70
+ def event ()
71
+ window.event
65
72
  end
66
73
 
67
74
  def setup (&block)
68
- screen.setup = block
75
+ window.setup = block
69
76
  end
70
77
 
71
78
  def update (&block)
72
- screen.update = block
79
+ window.update = block
73
80
  end
74
81
 
75
82
  def draw (&block)
76
- screen.draw = block
83
+ window.draw = block
77
84
  end
78
85
 
79
86
  def key (&block)
80
- screen.key = block
87
+ window.key = block
81
88
  end
82
89
 
83
90
  def pointer (&block)
84
- screen.pointer = block
91
+ window.pointer = block
85
92
  end
86
93
 
87
94
  def start ()
88
- screen.show
95
+ window.show
89
96
  Reflex.start
90
97
  end
91
98
 
92
99
  def quit ()
93
- screen.close
100
+ window.close
94
101
  end
95
102
 
96
103
 
@@ -40,6 +40,7 @@ class App : public Application
40
40
  win->show();
41
41
 
42
42
  win->root()->set_gravity(0, 9.8);
43
+ win->root()->set_debug(true);
43
44
 
44
45
  Image image(32, 32);
45
46
  Painter painter = image.painter();
@@ -67,6 +68,11 @@ class App : public Application
67
68
  view->body()->set_dynamic(true);
68
69
  view->body()->set_density(1);
69
70
  }
71
+
72
+ View* ground = new View();
73
+ ground->set_frame(10, 400, 300, 10);
74
+ win->root()->add_child(ground);
75
+ ground->body()->set_static(true);
70
76
  }
71
77
 
72
78
  };// App
data/samples/physics.rb CHANGED
@@ -12,26 +12,36 @@ Reflex.start name: "Physics" do |app|
12
12
  Reflex::Window.show title: app.name, frame: [100, 100, 500, 500] do
13
13
  root.set gravity: Reflex::Point.new(0, 9.8), debug: true
14
14
 
15
- image = Reflex::Image.new(32, 32).paint do |p, img|
16
- p.fill :green
17
- p.ellipse img.bounds
15
+ add_dynamic = -> size = 50, x = rand(10..400), y = rand(10..100) do
16
+ add Reflex::EllipseShape.new {
17
+ set :fill, [:red, :green, :blue, :yellow, :cyan, :magenta, :gray].sample
18
+ set :pos, [x, y]
19
+ set :size, [rand(5..size)] * 2
20
+ body.set dynamic: true, density: 1
21
+ }
18
22
  end
19
23
 
20
- add Reflex::RectShape.new {
21
- set color: :blue, frame: [5, 300, 300, 10]
22
- body.set static: true
23
- }
24
-
25
- 10.times do |n|
26
- add Reflex::ImageView.new {
27
- set image: image, size: image.size, pos: [40 * n, 20 * n]
28
- body.set dynamic: true, density: 1
24
+ add_static = -> size = 50 do
25
+ add Reflex::RectShape.new {
26
+ set :fill, :white
27
+ set :pos, [rand(10..400), rand(200..400)]
28
+ set :size, [rand(5..(size * 2)), rand(5..size)]
29
+ body.set static: true
29
30
  }
30
31
  end
31
32
 
33
+ 50.times {|n| add_dynamic.call}
34
+ 5.times {|n| add_static.call}
35
+
32
36
  after :draw do |e|
33
37
  e.painter.fill :white
34
38
  e.painter.text "#{e.fps.to_i} FPS", 10, 10
35
39
  end
40
+
41
+ on :pointer do |e|
42
+ if e.down? || e.drag?
43
+ add_dynamic.call 50, *e.pos.to_a
44
+ end
45
+ end
36
46
  end
37
47
  end
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[xot rays reflex]
5
+ .map {|s| File.expand_path "../../../../#{s}/lib", __FILE__}
6
+ .each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
7
+
8
+ require 'reflexion/include'
9
+
10
+
11
+ $garbages = []
12
+
13
+ class View
14
+ def setup (frame: [0, 0, 100, 100], color: :white, type: :static)
15
+ set frame: frame, fill: color, density: 1, friction: 0, restitution: 1, type => true
16
+ end
17
+ end
18
+
19
+ setup do
20
+ set size: [600, 400]
21
+ wall.set friction: 0
22
+ 5.times do |y|
23
+ 10.times do |x|
24
+ add RectShape.new {
25
+ setup frame: [(x + 1) * 50, (y + 1) * 20, 30, 10], color: [:white, :red, :green, :blue, :yellow][y]
26
+ on(:contact) {$garbages << self}
27
+ }
28
+ end
29
+ end
30
+ $bar = add RectShape.new {
31
+ setup frame: [0, 350, 100, 20], color: :blue
32
+ }
33
+ end
34
+
35
+ update do
36
+ $garbages.uniq.each {|o| o.parent.remove o}
37
+ $garbages.clear
38
+ end
39
+
40
+ draw do
41
+ text "#{event.fps.to_i} FPS", 10, 10
42
+ end
43
+
44
+ pointer do |e|
45
+ $bar.x = e.x - $bar.w / 2
46
+ if e.down?
47
+ window.add [EllipseShape, RectShape].sample.new {
48
+ setup frame: [e.x, $bar.y - 20, 20, 20], type: :dynamic
49
+ set :linear_velocity, Point.new(rand(-1.0..1.0), -1).normal * 500
50
+ }
51
+ end
52
+ end