reflexion 0.1.11 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (333) hide show
  1. checksums.yaml +5 -5
  2. data/.doc/ext/reflex/application.cpp +9 -5
  3. data/.doc/ext/reflex/capture_event.cpp +4 -9
  4. data/.doc/ext/reflex/contact_event.cpp +17 -13
  5. data/.doc/ext/reflex/draw_event.cpp +3 -8
  6. data/.doc/ext/reflex/ellipse_shape.cpp +51 -24
  7. data/.doc/ext/reflex/event.cpp +0 -4
  8. data/.doc/ext/reflex/filter.cpp +81 -0
  9. data/.doc/ext/reflex/focus_event.cpp +9 -13
  10. data/.doc/ext/reflex/frame_event.cpp +47 -14
  11. data/.doc/ext/reflex/image_view.cpp +1 -10
  12. data/.doc/ext/reflex/key_event.cpp +9 -14
  13. data/.doc/ext/reflex/line_shape.cpp +99 -0
  14. data/.doc/ext/reflex/motion_event.cpp +73 -0
  15. data/.doc/ext/reflex/native.cpp +18 -18
  16. data/.doc/ext/reflex/pointer_event.cpp +27 -25
  17. data/.doc/ext/reflex/polygon_shape.cpp +65 -0
  18. data/.doc/ext/reflex/rect_shape.cpp +102 -23
  19. data/.doc/ext/reflex/reflex.cpp +24 -3
  20. data/.doc/ext/reflex/scroll_event.cpp +8 -15
  21. data/.doc/ext/reflex/selector.cpp +43 -15
  22. data/.doc/ext/reflex/shape.cpp +211 -0
  23. data/.doc/ext/reflex/style.cpp +359 -185
  24. data/.doc/ext/reflex/style_length.cpp +163 -35
  25. data/.doc/ext/reflex/timer.cpp +101 -0
  26. data/.doc/ext/reflex/timer_event.cpp +123 -0
  27. data/.doc/ext/reflex/update_event.cpp +12 -8
  28. data/.doc/ext/reflex/view.cpp +548 -144
  29. data/.doc/ext/reflex/wheel_event.cpp +5 -28
  30. data/.doc/ext/reflex/window.cpp +7 -15
  31. data/LICENSE +21 -0
  32. data/README.md +1 -1
  33. data/Rakefile +14 -12
  34. data/VERSION +1 -1
  35. data/ext/reflex/application.cpp +10 -5
  36. data/ext/reflex/capture_event.cpp +4 -9
  37. data/ext/reflex/contact_event.cpp +18 -13
  38. data/ext/reflex/defs.h +5 -2
  39. data/ext/reflex/draw_event.cpp +3 -8
  40. data/ext/reflex/ellipse_shape.cpp +56 -25
  41. data/ext/reflex/event.cpp +0 -4
  42. data/ext/reflex/extconf.rb +1 -2
  43. data/ext/reflex/filter.cpp +86 -0
  44. data/ext/reflex/focus_event.cpp +11 -15
  45. data/ext/reflex/frame_event.cpp +52 -14
  46. data/ext/reflex/image_view.cpp +1 -10
  47. data/ext/reflex/key_event.cpp +9 -14
  48. data/ext/reflex/line_shape.cpp +104 -0
  49. data/ext/reflex/motion_event.cpp +77 -0
  50. data/ext/reflex/native.cpp +18 -18
  51. data/ext/reflex/pointer_event.cpp +27 -25
  52. data/ext/reflex/polygon_shape.cpp +68 -0
  53. data/ext/reflex/rect_shape.cpp +113 -24
  54. data/ext/reflex/reflex.cpp +24 -3
  55. data/ext/reflex/scroll_event.cpp +8 -15
  56. data/ext/reflex/selector.cpp +46 -16
  57. data/ext/reflex/selector.h +130 -0
  58. data/ext/reflex/shape.cpp +231 -0
  59. data/ext/reflex/style.cpp +363 -192
  60. data/ext/reflex/style_length.cpp +164 -37
  61. data/ext/reflex/timer.cpp +108 -0
  62. data/ext/reflex/timer_event.cpp +133 -0
  63. data/ext/reflex/update_event.cpp +13 -8
  64. data/ext/reflex/view.cpp +594 -150
  65. data/ext/reflex/wheel_event.cpp +5 -30
  66. data/ext/reflex/window.cpp +7 -15
  67. data/include/reflex.h +5 -4
  68. data/include/reflex/application.h +2 -0
  69. data/include/reflex/debug.h +22 -0
  70. data/include/reflex/defs.h +45 -2
  71. data/include/reflex/event.h +55 -11
  72. data/include/reflex/exception.h +17 -2
  73. data/include/reflex/filter.h +56 -0
  74. data/include/reflex/image_view.h +1 -1
  75. data/include/reflex/ruby.h +6 -4
  76. data/include/reflex/ruby/application.h +17 -9
  77. data/include/reflex/ruby/event.h +22 -0
  78. data/include/reflex/ruby/filter.h +69 -0
  79. data/include/reflex/ruby/reflex.h +1 -0
  80. data/include/reflex/ruby/selector.h +1 -1
  81. data/include/reflex/ruby/shape.h +140 -0
  82. data/include/reflex/ruby/style.h +1 -1
  83. data/include/reflex/ruby/timer.h +69 -0
  84. data/include/reflex/ruby/view.h +43 -76
  85. data/include/reflex/ruby/window.h +17 -32
  86. data/include/reflex/selector.h +54 -2
  87. data/include/reflex/shape.h +211 -0
  88. data/include/reflex/style.h +136 -76
  89. data/include/reflex/timer.h +73 -0
  90. data/include/reflex/view.h +181 -59
  91. data/include/reflex/window.h +4 -3
  92. data/lib/reflex.rb +13 -6
  93. data/lib/reflex/application.rb +6 -3
  94. data/lib/reflex/button.rb +2 -2
  95. data/lib/reflex/{texture.rb → camera.rb} +2 -2
  96. data/lib/reflex/capture_event.rb +7 -6
  97. data/lib/reflex/contact_event.rb +10 -12
  98. data/lib/reflex/draw_event.rb +6 -1
  99. data/lib/reflex/ellipse_shape.rb +27 -0
  100. data/lib/reflex/filter.rb +18 -0
  101. data/lib/reflex/fixture.rb +4 -0
  102. data/lib/reflex/focus_event.rb +10 -12
  103. data/lib/reflex/frame_event.rb +1 -1
  104. data/lib/reflex/helper.rb +17 -29
  105. data/lib/reflex/key_event.rb +13 -11
  106. data/lib/reflex/line_shape.rb +18 -0
  107. data/lib/reflex/matrix.rb +13 -0
  108. data/lib/reflex/module.rb +4 -19
  109. data/lib/reflex/pointer_event.rb +28 -35
  110. data/lib/reflex/polygon.rb +14 -0
  111. data/lib/reflex/polygon_shape.rb +23 -0
  112. data/lib/reflex/polyline.rb +13 -0
  113. data/lib/reflex/rect_shape.rb +20 -0
  114. data/lib/reflex/reflex.rb +1 -3
  115. data/lib/reflex/scroll_event.rb +1 -1
  116. data/lib/reflex/selector.rb +2 -2
  117. data/lib/reflex/shape.rb +62 -0
  118. data/lib/reflex/style.rb +78 -11
  119. data/lib/reflex/style_length.rb +0 -11
  120. data/lib/reflex/text_view.rb +7 -24
  121. data/lib/reflex/timer.rb +30 -0
  122. data/lib/reflex/timer_event.rb +29 -0
  123. data/lib/reflex/update_event.rb +1 -1
  124. data/lib/reflex/view.rb +127 -32
  125. data/lib/reflex/wheel_event.rb +9 -1
  126. data/lib/reflex/window.rb +29 -9
  127. data/lib/reflexion.rb +23 -7
  128. data/reflex.gemspec +7 -8
  129. data/samples/bats.rb +4 -4
  130. data/samples/camera.rb +32 -0
  131. data/samples/fans.rb +1 -1
  132. data/samples/fps.rb +5 -3
  133. data/samples/hello.rb +4 -6
  134. data/samples/image.rb +5 -4
  135. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +0 -2
  136. data/samples/layout.rb +16 -7
  137. data/samples/model.rb +10 -7
  138. data/samples/physics.rb +22 -20
  139. data/samples/reflexion/breakout.rb +4 -5
  140. data/samples/reflexion/hello.rb +2 -2
  141. data/samples/reflexion/jump_action.rb +191 -0
  142. data/samples/reflexion/noise.rb +23 -0
  143. data/samples/reflexion/paint.rb +7 -6
  144. data/samples/reflexion/physics.rb +15 -8
  145. data/samples/reflexion/pulse.rb +24 -10
  146. data/samples/shader.rb +8 -6
  147. data/samples/shapes.rb +79 -14
  148. data/samples/tree.rb +9 -10
  149. data/samples/views.rb +3 -3
  150. data/samples/visuals.rb +2 -5
  151. data/src/body.cpp +146 -345
  152. data/src/body.h +91 -0
  153. data/src/event.cpp +65 -15
  154. data/src/exception.cpp +13 -3
  155. data/src/filter.cpp +76 -0
  156. data/src/fixture.cpp +164 -39
  157. data/src/fixture.h +85 -0
  158. data/src/image_view.cpp +4 -4
  159. data/src/ios/app_delegate.h +5 -10
  160. data/src/ios/app_delegate.mm +79 -41
  161. data/src/ios/application.h +32 -0
  162. data/src/ios/application.mm +35 -25
  163. data/src/ios/event.mm +8 -4
  164. data/src/ios/reflex.mm +0 -7
  165. data/src/ios/view_controller.h +37 -0
  166. data/src/ios/view_controller.mm +424 -0
  167. data/src/ios/window.h +40 -0
  168. data/src/ios/window.mm +59 -250
  169. data/src/osx/app_delegate.h +5 -10
  170. data/src/osx/app_delegate.mm +52 -55
  171. data/src/osx/application.h +32 -0
  172. data/src/osx/application.mm +44 -39
  173. data/src/osx/native_window.h +0 -15
  174. data/src/osx/native_window.mm +127 -127
  175. data/src/osx/opengl_view.h +0 -2
  176. data/src/osx/opengl_view.mm +12 -3
  177. data/src/osx/reflex.mm +0 -9
  178. data/src/osx/window.h +42 -0
  179. data/src/osx/window.mm +45 -252
  180. data/src/selector.cpp +232 -7
  181. data/src/selector.h +52 -0
  182. data/src/shape.cpp +1191 -0
  183. data/src/shape.h +61 -0
  184. data/src/style.cpp +573 -376
  185. data/src/style.h +39 -0
  186. data/src/timer.cpp +288 -0
  187. data/src/timer.h +55 -0
  188. data/src/view.cpp +1624 -984
  189. data/src/view.h +56 -0
  190. data/src/win32/window.cpp +3 -4
  191. data/src/window.cpp +302 -20
  192. data/src/window.h +94 -0
  193. data/src/world.cpp +112 -111
  194. data/src/world.h +34 -53
  195. data/task/box2d.rake +31 -10
  196. data/test/test_capture_event.rb +8 -6
  197. data/test/test_pointer_event.rb +130 -0
  198. data/test/test_selector.rb +1 -1
  199. data/test/test_shape.rb +71 -0
  200. data/test/test_style.rb +77 -11
  201. data/test/test_style_length.rb +42 -13
  202. data/test/test_view.rb +138 -14
  203. metadata +118 -202
  204. data/.doc/ext/reflex/arc_shape.cpp +0 -89
  205. data/.doc/ext/reflex/body.cpp +0 -299
  206. data/.doc/ext/reflex/fixture.cpp +0 -101
  207. data/.doc/ext/reflex/shape_view.cpp +0 -153
  208. data/ext/reflex/arc_shape.cpp +0 -94
  209. data/ext/reflex/body.cpp +0 -328
  210. data/ext/reflex/fixture.cpp +0 -108
  211. data/ext/reflex/shape_view.cpp +0 -161
  212. data/include/reflex/bitmap.h +0 -20
  213. data/include/reflex/body.h +0 -128
  214. data/include/reflex/bounds.h +0 -20
  215. data/include/reflex/color.h +0 -20
  216. data/include/reflex/color_space.h +0 -20
  217. data/include/reflex/fixture.h +0 -117
  218. data/include/reflex/font.h +0 -20
  219. data/include/reflex/image.h +0 -20
  220. data/include/reflex/matrix.h +0 -20
  221. data/include/reflex/painter.h +0 -20
  222. data/include/reflex/point.h +0 -24
  223. data/include/reflex/ruby/body.h +0 -41
  224. data/include/reflex/ruby/fixture.h +0 -41
  225. data/include/reflex/ruby/shape_view.h +0 -96
  226. data/include/reflex/shader.h +0 -20
  227. data/include/reflex/shape_view.h +0 -146
  228. data/include/reflex/texture.h +0 -20
  229. data/lib/reflex/body.rb +0 -22
  230. data/lib/reflex/flags.rb +0 -18
  231. data/lib/reflex/shape_view.rb +0 -25
  232. data/src/ios/application_data.h +0 -45
  233. data/src/ios/native_window.h +0 -39
  234. data/src/ios/native_window.mm +0 -224
  235. data/src/ios/opengl_view.h +0 -13
  236. data/src/ios/opengl_view.mm +0 -139
  237. data/src/ios/window_data.h +0 -75
  238. data/src/osx/application_data.h +0 -45
  239. data/src/osx/window_data.h +0 -75
  240. data/src/physics/Box2D/Box2D.h +0 -68
  241. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.cpp +0 -193
  242. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.h +0 -105
  243. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.cpp +0 -99
  244. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.h +0 -91
  245. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.cpp +0 -138
  246. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.h +0 -74
  247. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.cpp +0 -467
  248. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.h +0 -101
  249. data/src/physics/Box2D/Collision/Shapes/b2Shape.h +0 -101
  250. data/src/physics/Box2D/Collision/b2BroadPhase.cpp +0 -119
  251. data/src/physics/Box2D/Collision/b2BroadPhase.h +0 -257
  252. data/src/physics/Box2D/Collision/b2CollideCircle.cpp +0 -154
  253. data/src/physics/Box2D/Collision/b2CollideEdge.cpp +0 -698
  254. data/src/physics/Box2D/Collision/b2CollidePolygon.cpp +0 -239
  255. data/src/physics/Box2D/Collision/b2Collision.cpp +0 -252
  256. data/src/physics/Box2D/Collision/b2Collision.h +0 -277
  257. data/src/physics/Box2D/Collision/b2Distance.cpp +0 -603
  258. data/src/physics/Box2D/Collision/b2Distance.h +0 -141
  259. data/src/physics/Box2D/Collision/b2DynamicTree.cpp +0 -778
  260. data/src/physics/Box2D/Collision/b2DynamicTree.h +0 -289
  261. data/src/physics/Box2D/Collision/b2TimeOfImpact.cpp +0 -486
  262. data/src/physics/Box2D/Collision/b2TimeOfImpact.h +0 -58
  263. data/src/physics/Box2D/Common/b2BlockAllocator.cpp +0 -215
  264. data/src/physics/Box2D/Common/b2BlockAllocator.h +0 -62
  265. data/src/physics/Box2D/Common/b2Draw.cpp +0 -44
  266. data/src/physics/Box2D/Common/b2Draw.h +0 -86
  267. data/src/physics/Box2D/Common/b2GrowableStack.h +0 -85
  268. data/src/physics/Box2D/Common/b2Math.cpp +0 -94
  269. data/src/physics/Box2D/Common/b2Math.h +0 -720
  270. data/src/physics/Box2D/Common/b2Settings.cpp +0 -44
  271. data/src/physics/Box2D/Common/b2Settings.h +0 -151
  272. data/src/physics/Box2D/Common/b2StackAllocator.cpp +0 -83
  273. data/src/physics/Box2D/Common/b2StackAllocator.h +0 -60
  274. data/src/physics/Box2D/Common/b2Timer.cpp +0 -101
  275. data/src/physics/Box2D/Common/b2Timer.h +0 -50
  276. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp +0 -53
  277. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.h +0 -39
  278. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp +0 -53
  279. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.h +0 -39
  280. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.cpp +0 -52
  281. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.h +0 -39
  282. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.cpp +0 -247
  283. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.h +0 -349
  284. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.cpp +0 -838
  285. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.h +0 -95
  286. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp +0 -49
  287. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.h +0 -39
  288. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp +0 -49
  289. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.h +0 -39
  290. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp +0 -49
  291. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.h +0 -38
  292. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.cpp +0 -52
  293. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.h +0 -39
  294. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.cpp +0 -260
  295. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.h +0 -169
  296. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.cpp +0 -251
  297. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.h +0 -119
  298. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.cpp +0 -419
  299. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.h +0 -125
  300. data/src/physics/Box2D/Dynamics/Joints/b2Joint.cpp +0 -211
  301. data/src/physics/Box2D/Dynamics/Joints/b2Joint.h +0 -226
  302. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.cpp +0 -304
  303. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.h +0 -133
  304. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.cpp +0 -222
  305. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.h +0 -129
  306. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp +0 -629
  307. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.h +0 -196
  308. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.cpp +0 -348
  309. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.h +0 -152
  310. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp +0 -502
  311. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.h +0 -204
  312. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.cpp +0 -241
  313. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.h +0 -114
  314. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.cpp +0 -344
  315. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.h +0 -126
  316. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.cpp +0 -419
  317. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.h +0 -210
  318. data/src/physics/Box2D/Dynamics/b2Body.cpp +0 -549
  319. data/src/physics/Box2D/Dynamics/b2Body.h +0 -860
  320. data/src/physics/Box2D/Dynamics/b2ContactManager.cpp +0 -296
  321. data/src/physics/Box2D/Dynamics/b2ContactManager.h +0 -52
  322. data/src/physics/Box2D/Dynamics/b2Fixture.cpp +0 -303
  323. data/src/physics/Box2D/Dynamics/b2Fixture.h +0 -345
  324. data/src/physics/Box2D/Dynamics/b2Island.cpp +0 -539
  325. data/src/physics/Box2D/Dynamics/b2Island.h +0 -93
  326. data/src/physics/Box2D/Dynamics/b2TimeStep.h +0 -70
  327. data/src/physics/Box2D/Dynamics/b2World.cpp +0 -1339
  328. data/src/physics/Box2D/Dynamics/b2World.h +0 -354
  329. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.cpp +0 -36
  330. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.h +0 -155
  331. data/src/physics/Box2D/Rope/b2Rope.cpp +0 -259
  332. data/src/physics/Box2D/Rope/b2Rope.h +0 -115
  333. data/src/shape_view.cpp +0 -306
@@ -0,0 +1,91 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SRC_BODY_H__
4
+ #define __REFLEX_SRC_BODY_H__
5
+
6
+
7
+ #include <xot/noncopyable.h>
8
+ #include <xot/pimpl.h>
9
+ #include <rays/point.h>
10
+ #include <reflex/defs.h>
11
+
12
+
13
+ class b2Body;
14
+
15
+
16
+ namespace Reflex
17
+ {
18
+
19
+
20
+ class World;
21
+
22
+
23
+ class Body : public Xot::NonCopyable
24
+ {
25
+
26
+ public:
27
+
28
+ Body (World* world, const Point& position = 0, float angle = 0);
29
+
30
+ ~Body ();
31
+
32
+ void apply_force (coord x, coord y);
33
+
34
+ void apply_force (const Point& force);
35
+
36
+ void apply_torque (float torque);
37
+
38
+ void apply_linear_impulse (coord x, coord y);
39
+
40
+ void apply_linear_impulse (const Point& impulse);
41
+
42
+ void apply_angular_impulse (float impulse);
43
+
44
+ float meter2pixel (float meter = 1) const;
45
+
46
+ void set_transform (coord x, coord y, float degree);
47
+
48
+ Point position () const;
49
+
50
+ float angle () const;
51
+
52
+ void set_dynamic (bool dynamic = true);
53
+
54
+ bool is_dynamic () const;
55
+
56
+ void set_linear_velocity (coord x, coord y);
57
+
58
+ void set_linear_velocity (const Point& velocity);
59
+
60
+ Point linear_velocity () const;
61
+
62
+ void set_angular_velocity (float velocity);
63
+
64
+ float angular_velocity () const;
65
+
66
+ void set_gravity_scale (float scale);
67
+
68
+ float gravity_scale () const;
69
+
70
+ struct Data;
71
+
72
+ Xot::PImpl<Data> self;
73
+
74
+ };// Body
75
+
76
+
77
+ void Body_copy_attributes (Body* to, const Body& from);
78
+
79
+ Body* Body_create_temporary ();
80
+
81
+ bool Body_is_temporary (const Body& body);
82
+
83
+ b2Body* Body_get_b2ptr ( Body* body);
84
+
85
+ const b2Body* Body_get_b2ptr (const Body* body);
86
+
87
+
88
+ }// Reflex
89
+
90
+
91
+ #endif//EOH
@@ -1,6 +1,8 @@
1
1
  #include "reflex/event.h"
2
2
 
3
3
 
4
+ #include "reflex/timer.h"
5
+ #include "reflex/shape.h"
4
6
  #include "reflex/exception.h"
5
7
 
6
8
 
@@ -26,8 +28,8 @@ namespace Reflex
26
28
  }
27
29
 
28
30
 
29
- UpdateEvent::UpdateEvent (float dt)
30
- : dt(dt)
31
+ UpdateEvent::UpdateEvent (double now, float dt)
32
+ : now(now), dt(dt)
31
33
  {
32
34
  }
33
35
 
@@ -114,8 +116,8 @@ namespace Reflex
114
116
  {
115
117
  }
116
118
 
117
- FocusEvent::FocusEvent (Type type, View* focus, View* last)
118
- : type(type), focus(focus), last(last)
119
+ FocusEvent::FocusEvent (Type type, View* current, View* last)
120
+ : type(type), current(current), last(last)
119
121
  {
120
122
  }
121
123
 
@@ -206,27 +208,27 @@ namespace Reflex
206
208
  }
207
209
 
208
210
  Point&
209
- WheelEvent::delta ()
211
+ WheelEvent::position ()
210
212
  {
211
- return *(Point*) &delta_;
213
+ return *(Point*) &position_;
212
214
  }
213
215
 
214
216
  const Point&
215
- WheelEvent::delta () const
217
+ WheelEvent::position () const
216
218
  {
217
- return const_cast<WheelEvent*>(this)->delta();
219
+ return const_cast<WheelEvent*>(this)->position();
218
220
  }
219
221
 
220
222
  Point&
221
- WheelEvent::position ()
223
+ WheelEvent::delta ()
222
224
  {
223
- return *(Point*) &position_;
225
+ return *(Point*) &delta_;
224
226
  }
225
227
 
226
228
  const Point&
227
- WheelEvent::position () const
229
+ WheelEvent::delta () const
228
230
  {
229
- return const_cast<WheelEvent*>(this)->position();
231
+ return const_cast<WheelEvent*>(this)->delta();
230
232
  }
231
233
 
232
234
 
@@ -241,13 +243,61 @@ namespace Reflex
241
243
  }
242
244
 
243
245
 
246
+ TimerEvent::TimerEvent (Timer* timer)
247
+ : timer(timer)
248
+ {
249
+ }
250
+
251
+ View*
252
+ TimerEvent::owner () const
253
+ {
254
+ return timer ? timer->owner() : NULL;
255
+ }
256
+
257
+ int
258
+ TimerEvent::id () const
259
+ {
260
+ return timer ? timer->id() : Timer::ID_INVALID;
261
+ }
262
+
263
+ float
264
+ TimerEvent::interval () const
265
+ {
266
+ return timer ? timer->interval() : -1;
267
+ }
268
+
269
+ void
270
+ TimerEvent::set_count (int count)
271
+ {
272
+ if (timer) timer->set_count(count);
273
+ }
274
+
275
+ int
276
+ TimerEvent::count () const
277
+ {
278
+ return timer ? timer->count() : 0;
279
+ }
280
+
281
+ bool
282
+ TimerEvent::is_finished () const
283
+ {
284
+ return timer ? timer->is_finished() : true;
285
+ }
286
+
287
+
244
288
  ContactEvent::ContactEvent ()
245
- : type(NONE), view(NULL)
289
+ : type(NONE), shape(NULL), view(NULL)
246
290
  {
247
291
  }
248
292
 
249
- ContactEvent::ContactEvent (Type type, View* view)
250
- : type(type), view(view)
293
+ ContactEvent::ContactEvent (Type type, Shape* shape)
294
+ : type(type), shape(shape), view(shape ? shape->owner() : NULL)
295
+ {
296
+ }
297
+
298
+
299
+ MotionEvent::MotionEvent (const Point& gravity)
300
+ : gravity(gravity)
251
301
  {
252
302
  }
253
303
 
@@ -1,9 +1,6 @@
1
1
  #include "reflex/exception.h"
2
2
 
3
3
 
4
- #include <xot/string.h>
5
-
6
-
7
4
  namespace Reflex
8
5
  {
9
6
 
@@ -20,6 +17,12 @@ namespace Reflex
20
17
  }
21
18
 
22
19
 
20
+ PhysicsError::PhysicsError (const char* str)
21
+ : Super(str)
22
+ {
23
+ }
24
+
25
+
23
26
  namespace ErrorFunctions
24
27
  {
25
28
 
@@ -37,6 +40,13 @@ namespace Reflex
37
40
  throw LayoutError(Xot::error_text(file, line, s));
38
41
  }
39
42
 
43
+ void
44
+ physics_error (const char* file, int line, const char* format, ...)
45
+ {
46
+ XOT_STRINGF(format, s);
47
+ throw PhysicsError(Xot::error_text(file, line, s));
48
+ }
49
+
40
50
  }// ErrorFunctions
41
51
 
42
52
 
@@ -0,0 +1,76 @@
1
+ #include "reflex/filter.h"
2
+
3
+
4
+ #include "reflex/exception.h"
5
+ #include "reflex/debug.h"
6
+
7
+
8
+ namespace Reflex
9
+ {
10
+
11
+
12
+ struct Filter::Data
13
+ {
14
+
15
+ Shader shader;
16
+
17
+ };// Filter::Data
18
+
19
+
20
+ Filter::Filter ()
21
+ {
22
+ }
23
+
24
+ Filter::Filter (const Shader& shader)
25
+ {
26
+ self->shader = shader;
27
+ }
28
+
29
+ Filter::~Filter ()
30
+ {
31
+ }
32
+
33
+ void
34
+ Filter::apply (Painter* painter, const Image& image) const
35
+ {
36
+ if (!self->shader)
37
+ return;
38
+
39
+ if (!painter || !image)
40
+ argument_error(__FILE__, __LINE__);
41
+
42
+ painter->set_shader(self->shader);
43
+ painter->image(image);
44
+ }
45
+
46
+ void
47
+ Filter::set_shader (const Shader& shader)
48
+ {
49
+ self->shader = shader;
50
+ }
51
+
52
+ Shader&
53
+ Filter::shader ()
54
+ {
55
+ return self->shader;
56
+ }
57
+
58
+ const Shader&
59
+ Filter::shader () const
60
+ {
61
+ return const_cast<Filter*>(this)->shader();
62
+ }
63
+
64
+ Filter::operator bool () const
65
+ {
66
+ return self->shader;
67
+ }
68
+
69
+ bool
70
+ Filter::operator ! () const
71
+ {
72
+ return !operator bool();
73
+ }
74
+
75
+
76
+ }// Reflex
@@ -1,107 +1,232 @@
1
- #include "reflex/fixture.h"
1
+ #include "fixture.h"
2
2
 
3
3
 
4
4
  #include <assert.h>
5
5
  #include <Box2D/Dynamics/b2Fixture.h>
6
-
7
-
8
- #define PTR ((b2Fixture*) handle)
6
+ #include <Box2D/Collision/Shapes/b2CircleShape.h>
7
+ #include "reflex/exception.h"
8
+ #include "reflex/debug.h"
9
+ #include "view.h"
10
+ #include "world.h"
11
+ #include "body.h"
9
12
 
10
13
 
11
14
  namespace Reflex
12
15
  {
13
16
 
14
17
 
15
- Fixture::Fixture (Handle h)
16
- : handle(h)
18
+ Fixture::Fixture (Body* body, const b2Shape* b2shape, void* userdata)
19
+ : b2fixture(NULL)
17
20
  {
21
+ assert(body);
22
+
23
+ b2Body* b2body = Body_get_b2ptr(body);
24
+ assert(b2body);
25
+
26
+ b2fixture = b2body->CreateFixture(b2shape, 0);
27
+ if (!b2fixture)
28
+ system_error(__FILE__, __LINE__);
29
+
30
+ b2fixture->SetUserData(userdata);
18
31
  }
19
32
 
20
- Fixture&
21
- Fixture::operator = (Handle h)
33
+ Fixture::~Fixture ()
22
34
  {
23
- handle = h;
24
- return *this;
35
+ b2fixture->SetUserData(NULL);
36
+ b2fixture->GetBody()->DestroyFixture(b2fixture);
25
37
  }
26
38
 
27
39
  void
28
40
  Fixture::set_density (float density)
29
41
  {
30
- assert(PTR && PTR->GetBody());
42
+ if (density == this->density())
43
+ return;
44
+
45
+ for (Fixture* p = this; p; p = p->pnext.get())
46
+ p->b2fixture->SetDensity(density);
31
47
 
32
- PTR->SetDensity(density);
33
- PTR->GetBody()->ResetMassData();
48
+ b2fixture->GetBody()->ResetMassData();
34
49
  }
35
50
 
36
51
  float
37
52
  Fixture::density () const
38
53
  {
39
- assert(PTR);
40
-
41
- return PTR->GetDensity();
54
+ return b2fixture->GetDensity();
42
55
  }
43
56
 
44
57
  void
45
58
  Fixture::set_friction (float friction)
46
59
  {
47
- assert(PTR);
60
+ if (friction == this->friction())
61
+ return;
48
62
 
49
- PTR->SetFriction(friction);
63
+ for (Fixture* p = this; p; p = p->pnext.get())
64
+ p->b2fixture->SetFriction(friction);
50
65
  }
51
66
 
52
67
  float
53
68
  Fixture::friction () const
54
69
  {
55
- assert(PTR);
56
-
57
- return PTR->GetFriction();
70
+ return b2fixture->GetFriction();
58
71
  }
59
72
 
60
73
  void
61
74
  Fixture::set_restitution (float restitution)
62
75
  {
63
- assert(PTR);
76
+ if (restitution == this->restitution())
77
+ return;
64
78
 
65
- PTR->SetRestitution(restitution);
79
+ for (Fixture* p = this; p; p = p->pnext.get())
80
+ p->b2fixture->SetRestitution(restitution);
66
81
  }
67
82
 
68
83
  float
69
84
  Fixture::restitution () const
70
85
  {
71
- assert(PTR);
86
+ return b2fixture->GetRestitution();
87
+ }
88
+
89
+ void
90
+ Fixture::set_sensor (bool state)
91
+ {
92
+ if (state == is_sensor())
93
+ return;
72
94
 
73
- return PTR->GetRestitution();
95
+ for (Fixture* p = this; p; p = p->pnext.get())
96
+ p->b2fixture->SetSensor(state);
74
97
  }
75
98
 
76
- Fixture::Handle
77
- Fixture::next () const
99
+ bool
100
+ Fixture::is_sensor () const
78
101
  {
79
- assert(PTR);
102
+ return b2fixture->IsSensor();
103
+ }
80
104
 
81
- return PTR->GetNext();
105
+ void
106
+ Fixture::set_category_bits (uint bits)
107
+ {
108
+ if (bits > USHRT_MAX)
109
+ {
110
+ argument_error(
111
+ __FILE__, __LINE__, "category_bits must be less then USHRT_MAX.");
112
+ }
113
+
114
+ if (bits == category_bits())
115
+ return;
116
+
117
+ for (Fixture* p = this; p; p = p->pnext.get())
118
+ {
119
+ b2Filter f = p->b2fixture->GetFilterData();
120
+ f.categoryBits = bits;
121
+ p->b2fixture->SetFilterData(f);
122
+ }
82
123
  }
83
124
 
84
- Fixture::operator bool () const
125
+ uint
126
+ Fixture::category_bits () const
85
127
  {
86
- return PTR;
128
+ return b2fixture->GetFilterData().categoryBits;
87
129
  }
88
130
 
89
- bool
90
- Fixture::operator ! () const
131
+ void
132
+ Fixture::set_collision_mask (uint mask)
91
133
  {
92
- return !operator bool();
134
+ if (mask > USHRT_MAX)
135
+ {
136
+ argument_error(
137
+ __FILE__, __LINE__, "collision_mask must be less then USHRT_MAX.");
138
+ }
139
+
140
+ if (mask == collision_mask())
141
+ return;
142
+
143
+ for (Fixture* p = this; p; p = p->pnext.get())
144
+ {
145
+ b2Filter f = b2fixture->GetFilterData();
146
+ f.maskBits = mask;
147
+ b2fixture->SetFilterData(f);
148
+ }
93
149
  }
94
150
 
95
- bool
96
- operator == (const Fixture& lhs, const Fixture& rhs)
151
+ uint
152
+ Fixture::collision_mask () const
153
+ {
154
+ return b2fixture->GetFilterData().maskBits;
155
+ }
156
+
157
+ b2Fixture*
158
+ Fixture::b2ptr ()
159
+ {
160
+ return b2fixture;
161
+ }
162
+
163
+ const b2Fixture*
164
+ Fixture::b2ptr () const
97
165
  {
98
- return lhs.handle == rhs.handle;
166
+ return const_cast<Fixture*>(this)->b2ptr();
167
+ }
168
+
169
+ void
170
+ Fixture::set_next (Fixture* fixture)
171
+ {
172
+ if (fixture)
173
+ Fixture_copy_attributes(fixture, *this);
174
+
175
+ pnext.reset(fixture);
176
+ }
177
+
178
+ Fixture*
179
+ Fixture::next ()
180
+ {
181
+ return pnext.get();
182
+ }
183
+
184
+ const Fixture*
185
+ Fixture::next () const
186
+ {
187
+ return const_cast<Fixture*>(this)->next();
188
+ }
189
+
190
+
191
+ void
192
+ Fixture_copy_attributes (Fixture* to, const Fixture& from)
193
+ {
194
+ if (!to)
195
+ return;
196
+
197
+ to->set_density( from.density());
198
+ to->set_friction( from.friction());
199
+ to->set_restitution( from.restitution());
200
+ to->set_sensor( from.is_sensor());
201
+ to->set_category_bits( from.category_bits());
202
+ to->set_collision_mask(from.collision_mask());
203
+ }
204
+
205
+ static Body*
206
+ get_temporary_body ()
207
+ {
208
+ static Body* body = NULL;
209
+ if (!body) body = Body_create_temporary();
210
+ return body;
211
+ }
212
+
213
+ Fixture*
214
+ Fixture_create_temporary ()
215
+ {
216
+ Body* body = get_temporary_body();
217
+ if (!body)
218
+ invalid_state_error(__FILE__, __LINE__);
219
+
220
+ b2CircleShape b2shape;
221
+ b2shape.m_radius = 1;
222
+
223
+ return new Fixture(body, &b2shape);
99
224
  }
100
225
 
101
226
  bool
102
- operator != (const Fixture& lhs, const Fixture& rhs)
227
+ Fixture_is_temporary (const Fixture& fixture)
103
228
  {
104
- return !(lhs == rhs);
229
+ return fixture.b2ptr()->GetBody() == Body_get_b2ptr(get_temporary_body());
105
230
  }
106
231
 
107
232