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
@@ -1,549 +0,0 @@
1
- /*
2
- * Copyright (c) 2006-2007 Erin Catto http://www.box2d.org
3
- *
4
- * This software is provided 'as-is', without any express or implied
5
- * warranty. In no event will the authors be held liable for any damages
6
- * arising from the use of this software.
7
- * Permission is granted to anyone to use this software for any purpose,
8
- * including commercial applications, and to alter it and redistribute it
9
- * freely, subject to the following restrictions:
10
- * 1. The origin of this software must not be misrepresented; you must not
11
- * claim that you wrote the original software. If you use this software
12
- * in a product, an acknowledgment in the product documentation would be
13
- * appreciated but is not required.
14
- * 2. Altered source versions must be plainly marked as such, and must not be
15
- * misrepresented as being the original software.
16
- * 3. This notice may not be removed or altered from any source distribution.
17
- */
18
-
19
- #include <Box2D/Dynamics/b2Body.h>
20
- #include <Box2D/Dynamics/b2Fixture.h>
21
- #include <Box2D/Dynamics/b2World.h>
22
- #include <Box2D/Dynamics/Contacts/b2Contact.h>
23
- #include <Box2D/Dynamics/Joints/b2Joint.h>
24
-
25
- b2Body::b2Body(const b2BodyDef* bd, b2World* world)
26
- {
27
- b2Assert(bd->position.IsValid());
28
- b2Assert(bd->linearVelocity.IsValid());
29
- b2Assert(b2IsValid(bd->angle));
30
- b2Assert(b2IsValid(bd->angularVelocity));
31
- b2Assert(b2IsValid(bd->angularDamping) && bd->angularDamping >= 0.0f);
32
- b2Assert(b2IsValid(bd->linearDamping) && bd->linearDamping >= 0.0f);
33
-
34
- m_flags = 0;
35
-
36
- if (bd->bullet)
37
- {
38
- m_flags |= e_bulletFlag;
39
- }
40
- if (bd->fixedRotation)
41
- {
42
- m_flags |= e_fixedRotationFlag;
43
- }
44
- if (bd->allowSleep)
45
- {
46
- m_flags |= e_autoSleepFlag;
47
- }
48
- if (bd->awake)
49
- {
50
- m_flags |= e_awakeFlag;
51
- }
52
- if (bd->active)
53
- {
54
- m_flags |= e_activeFlag;
55
- }
56
-
57
- m_world = world;
58
-
59
- m_xf.p = bd->position;
60
- m_xf.q.Set(bd->angle);
61
-
62
- m_sweep.localCenter.SetZero();
63
- m_sweep.c0 = m_xf.p;
64
- m_sweep.c = m_xf.p;
65
- m_sweep.a0 = bd->angle;
66
- m_sweep.a = bd->angle;
67
- m_sweep.alpha0 = 0.0f;
68
-
69
- m_jointList = NULL;
70
- m_contactList = NULL;
71
- m_prev = NULL;
72
- m_next = NULL;
73
-
74
- m_linearVelocity = bd->linearVelocity;
75
- m_angularVelocity = bd->angularVelocity;
76
-
77
- m_linearDamping = bd->linearDamping;
78
- m_angularDamping = bd->angularDamping;
79
- m_gravityScale = bd->gravityScale;
80
-
81
- m_force.SetZero();
82
- m_torque = 0.0f;
83
-
84
- m_sleepTime = 0.0f;
85
-
86
- m_type = bd->type;
87
-
88
- if (m_type == b2_dynamicBody)
89
- {
90
- m_mass = 1.0f;
91
- m_invMass = 1.0f;
92
- }
93
- else
94
- {
95
- m_mass = 0.0f;
96
- m_invMass = 0.0f;
97
- }
98
-
99
- m_I = 0.0f;
100
- m_invI = 0.0f;
101
-
102
- m_userData = bd->userData;
103
-
104
- m_fixtureList = NULL;
105
- m_fixtureCount = 0;
106
- }
107
-
108
- b2Body::~b2Body()
109
- {
110
- // shapes and joints are destroyed in b2World::Destroy
111
- }
112
-
113
- void b2Body::SetType(b2BodyType type)
114
- {
115
- b2Assert(m_world->IsLocked() == false);
116
- if (m_world->IsLocked() == true)
117
- {
118
- return;
119
- }
120
-
121
- if (m_type == type)
122
- {
123
- return;
124
- }
125
-
126
- m_type = type;
127
-
128
- ResetMassData();
129
-
130
- if (m_type == b2_staticBody)
131
- {
132
- m_linearVelocity.SetZero();
133
- m_angularVelocity = 0.0f;
134
- m_sweep.a0 = m_sweep.a;
135
- m_sweep.c0 = m_sweep.c;
136
- SynchronizeFixtures();
137
- }
138
-
139
- SetAwake(true);
140
-
141
- m_force.SetZero();
142
- m_torque = 0.0f;
143
-
144
- // Delete the attached contacts.
145
- b2ContactEdge* ce = m_contactList;
146
- while (ce)
147
- {
148
- b2ContactEdge* ce0 = ce;
149
- ce = ce->next;
150
- m_world->m_contactManager.Destroy(ce0->contact);
151
- }
152
- m_contactList = NULL;
153
-
154
- // Touch the proxies so that new contacts will be created (when appropriate)
155
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
156
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
157
- {
158
- int32 proxyCount = f->m_proxyCount;
159
- for (int32 i = 0; i < proxyCount; ++i)
160
- {
161
- broadPhase->TouchProxy(f->m_proxies[i].proxyId);
162
- }
163
- }
164
- }
165
-
166
- b2Fixture* b2Body::CreateFixture(const b2FixtureDef* def)
167
- {
168
- b2Assert(m_world->IsLocked() == false);
169
- if (m_world->IsLocked() == true)
170
- {
171
- return NULL;
172
- }
173
-
174
- b2BlockAllocator* allocator = &m_world->m_blockAllocator;
175
-
176
- void* memory = allocator->Allocate(sizeof(b2Fixture));
177
- b2Fixture* fixture = new (memory) b2Fixture;
178
- fixture->Create(allocator, this, def);
179
-
180
- if (m_flags & e_activeFlag)
181
- {
182
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
183
- fixture->CreateProxies(broadPhase, m_xf);
184
- }
185
-
186
- fixture->m_next = m_fixtureList;
187
- m_fixtureList = fixture;
188
- ++m_fixtureCount;
189
-
190
- fixture->m_body = this;
191
-
192
- // Adjust mass properties if needed.
193
- if (fixture->m_density > 0.0f)
194
- {
195
- ResetMassData();
196
- }
197
-
198
- // Let the world know we have a new fixture. This will cause new contacts
199
- // to be created at the beginning of the next time step.
200
- m_world->m_flags |= b2World::e_newFixture;
201
-
202
- return fixture;
203
- }
204
-
205
- b2Fixture* b2Body::CreateFixture(const b2Shape* shape, float32 density)
206
- {
207
- b2FixtureDef def;
208
- def.shape = shape;
209
- def.density = density;
210
-
211
- return CreateFixture(&def);
212
- }
213
-
214
- void b2Body::DestroyFixture(b2Fixture* fixture)
215
- {
216
- b2Assert(m_world->IsLocked() == false);
217
- if (m_world->IsLocked() == true)
218
- {
219
- return;
220
- }
221
-
222
- b2Assert(fixture->m_body == this);
223
-
224
- // Remove the fixture from this body's singly linked list.
225
- b2Assert(m_fixtureCount > 0);
226
- b2Fixture** node = &m_fixtureList;
227
- bool found = false;
228
- while (*node != NULL)
229
- {
230
- if (*node == fixture)
231
- {
232
- *node = fixture->m_next;
233
- found = true;
234
- break;
235
- }
236
-
237
- node = &(*node)->m_next;
238
- }
239
-
240
- // You tried to remove a shape that is not attached to this body.
241
- b2Assert(found);
242
-
243
- // Destroy any contacts associated with the fixture.
244
- b2ContactEdge* edge = m_contactList;
245
- while (edge)
246
- {
247
- b2Contact* c = edge->contact;
248
- edge = edge->next;
249
-
250
- b2Fixture* fixtureA = c->GetFixtureA();
251
- b2Fixture* fixtureB = c->GetFixtureB();
252
-
253
- if (fixture == fixtureA || fixture == fixtureB)
254
- {
255
- // This destroys the contact and removes it from
256
- // this body's contact list.
257
- m_world->m_contactManager.Destroy(c);
258
- }
259
- }
260
-
261
- b2BlockAllocator* allocator = &m_world->m_blockAllocator;
262
-
263
- if (m_flags & e_activeFlag)
264
- {
265
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
266
- fixture->DestroyProxies(broadPhase);
267
- }
268
-
269
- fixture->Destroy(allocator);
270
- fixture->m_body = NULL;
271
- fixture->m_next = NULL;
272
- fixture->~b2Fixture();
273
- allocator->Free(fixture, sizeof(b2Fixture));
274
-
275
- --m_fixtureCount;
276
-
277
- // Reset the mass data.
278
- ResetMassData();
279
- }
280
-
281
- void b2Body::ResetMassData()
282
- {
283
- // Compute mass data from shapes. Each shape has its own density.
284
- m_mass = 0.0f;
285
- m_invMass = 0.0f;
286
- m_I = 0.0f;
287
- m_invI = 0.0f;
288
- m_sweep.localCenter.SetZero();
289
-
290
- // Static and kinematic bodies have zero mass.
291
- if (m_type == b2_staticBody || m_type == b2_kinematicBody)
292
- {
293
- m_sweep.c0 = m_xf.p;
294
- m_sweep.c = m_xf.p;
295
- m_sweep.a0 = m_sweep.a;
296
- return;
297
- }
298
-
299
- b2Assert(m_type == b2_dynamicBody);
300
-
301
- // Accumulate mass over all fixtures.
302
- b2Vec2 localCenter = b2Vec2_zero;
303
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
304
- {
305
- if (f->m_density == 0.0f)
306
- {
307
- continue;
308
- }
309
-
310
- b2MassData massData;
311
- f->GetMassData(&massData);
312
- m_mass += massData.mass;
313
- localCenter += massData.mass * massData.center;
314
- m_I += massData.I;
315
- }
316
-
317
- // Compute center of mass.
318
- if (m_mass > 0.0f)
319
- {
320
- m_invMass = 1.0f / m_mass;
321
- localCenter *= m_invMass;
322
- }
323
- else
324
- {
325
- // Force all dynamic bodies to have a positive mass.
326
- m_mass = 1.0f;
327
- m_invMass = 1.0f;
328
- }
329
-
330
- if (m_I > 0.0f && (m_flags & e_fixedRotationFlag) == 0)
331
- {
332
- // Center the inertia about the center of mass.
333
- m_I -= m_mass * b2Dot(localCenter, localCenter);
334
- b2Assert(m_I > 0.0f);
335
- m_invI = 1.0f / m_I;
336
-
337
- }
338
- else
339
- {
340
- m_I = 0.0f;
341
- m_invI = 0.0f;
342
- }
343
-
344
- // Move center of mass.
345
- b2Vec2 oldCenter = m_sweep.c;
346
- m_sweep.localCenter = localCenter;
347
- m_sweep.c0 = m_sweep.c = b2Mul(m_xf, m_sweep.localCenter);
348
-
349
- // Update center of mass velocity.
350
- m_linearVelocity += b2Cross(m_angularVelocity, m_sweep.c - oldCenter);
351
- }
352
-
353
- void b2Body::SetMassData(const b2MassData* massData)
354
- {
355
- b2Assert(m_world->IsLocked() == false);
356
- if (m_world->IsLocked() == true)
357
- {
358
- return;
359
- }
360
-
361
- if (m_type != b2_dynamicBody)
362
- {
363
- return;
364
- }
365
-
366
- m_invMass = 0.0f;
367
- m_I = 0.0f;
368
- m_invI = 0.0f;
369
-
370
- m_mass = massData->mass;
371
- if (m_mass <= 0.0f)
372
- {
373
- m_mass = 1.0f;
374
- }
375
-
376
- m_invMass = 1.0f / m_mass;
377
-
378
- if (massData->I > 0.0f && (m_flags & b2Body::e_fixedRotationFlag) == 0)
379
- {
380
- m_I = massData->I - m_mass * b2Dot(massData->center, massData->center);
381
- b2Assert(m_I > 0.0f);
382
- m_invI = 1.0f / m_I;
383
- }
384
-
385
- // Move center of mass.
386
- b2Vec2 oldCenter = m_sweep.c;
387
- m_sweep.localCenter = massData->center;
388
- m_sweep.c0 = m_sweep.c = b2Mul(m_xf, m_sweep.localCenter);
389
-
390
- // Update center of mass velocity.
391
- m_linearVelocity += b2Cross(m_angularVelocity, m_sweep.c - oldCenter);
392
- }
393
-
394
- bool b2Body::ShouldCollide(const b2Body* other) const
395
- {
396
- // At least one body should be dynamic.
397
- if (m_type != b2_dynamicBody && other->m_type != b2_dynamicBody)
398
- {
399
- return false;
400
- }
401
-
402
- // Does a joint prevent collision?
403
- for (b2JointEdge* jn = m_jointList; jn; jn = jn->next)
404
- {
405
- if (jn->other == other)
406
- {
407
- if (jn->joint->m_collideConnected == false)
408
- {
409
- return false;
410
- }
411
- }
412
- }
413
-
414
- return true;
415
- }
416
-
417
- void b2Body::SetTransform(const b2Vec2& position, float32 angle)
418
- {
419
- b2Assert(m_world->IsLocked() == false);
420
- if (m_world->IsLocked() == true)
421
- {
422
- return;
423
- }
424
-
425
- m_xf.q.Set(angle);
426
- m_xf.p = position;
427
-
428
- m_sweep.c = b2Mul(m_xf, m_sweep.localCenter);
429
- m_sweep.a = angle;
430
-
431
- m_sweep.c0 = m_sweep.c;
432
- m_sweep.a0 = angle;
433
-
434
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
435
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
436
- {
437
- f->Synchronize(broadPhase, m_xf, m_xf);
438
- }
439
- }
440
-
441
- void b2Body::SynchronizeFixtures()
442
- {
443
- b2Transform xf1;
444
- xf1.q.Set(m_sweep.a0);
445
- xf1.p = m_sweep.c0 - b2Mul(xf1.q, m_sweep.localCenter);
446
-
447
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
448
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
449
- {
450
- f->Synchronize(broadPhase, xf1, m_xf);
451
- }
452
- }
453
-
454
- void b2Body::SetActive(bool flag)
455
- {
456
- b2Assert(m_world->IsLocked() == false);
457
-
458
- if (flag == IsActive())
459
- {
460
- return;
461
- }
462
-
463
- if (flag)
464
- {
465
- m_flags |= e_activeFlag;
466
-
467
- // Create all proxies.
468
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
469
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
470
- {
471
- f->CreateProxies(broadPhase, m_xf);
472
- }
473
-
474
- // Contacts are created the next time step.
475
- }
476
- else
477
- {
478
- m_flags &= ~e_activeFlag;
479
-
480
- // Destroy all proxies.
481
- b2BroadPhase* broadPhase = &m_world->m_contactManager.m_broadPhase;
482
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
483
- {
484
- f->DestroyProxies(broadPhase);
485
- }
486
-
487
- // Destroy the attached contacts.
488
- b2ContactEdge* ce = m_contactList;
489
- while (ce)
490
- {
491
- b2ContactEdge* ce0 = ce;
492
- ce = ce->next;
493
- m_world->m_contactManager.Destroy(ce0->contact);
494
- }
495
- m_contactList = NULL;
496
- }
497
- }
498
-
499
- void b2Body::SetFixedRotation(bool flag)
500
- {
501
- bool status = (m_flags & e_fixedRotationFlag) == e_fixedRotationFlag;
502
- if (status == flag)
503
- {
504
- return;
505
- }
506
-
507
- if (flag)
508
- {
509
- m_flags |= e_fixedRotationFlag;
510
- }
511
- else
512
- {
513
- m_flags &= ~e_fixedRotationFlag;
514
- }
515
-
516
- m_angularVelocity = 0.0f;
517
-
518
- ResetMassData();
519
- }
520
-
521
- void b2Body::Dump()
522
- {
523
- int32 bodyIndex = m_islandIndex;
524
-
525
- b2Log("{\n");
526
- b2Log(" b2BodyDef bd;\n");
527
- b2Log(" bd.type = b2BodyType(%d);\n", m_type);
528
- b2Log(" bd.position.Set(%.15lef, %.15lef);\n", m_xf.p.x, m_xf.p.y);
529
- b2Log(" bd.angle = %.15lef;\n", m_sweep.a);
530
- b2Log(" bd.linearVelocity.Set(%.15lef, %.15lef);\n", m_linearVelocity.x, m_linearVelocity.y);
531
- b2Log(" bd.angularVelocity = %.15lef;\n", m_angularVelocity);
532
- b2Log(" bd.linearDamping = %.15lef;\n", m_linearDamping);
533
- b2Log(" bd.angularDamping = %.15lef;\n", m_angularDamping);
534
- b2Log(" bd.allowSleep = bool(%d);\n", m_flags & e_autoSleepFlag);
535
- b2Log(" bd.awake = bool(%d);\n", m_flags & e_awakeFlag);
536
- b2Log(" bd.fixedRotation = bool(%d);\n", m_flags & e_fixedRotationFlag);
537
- b2Log(" bd.bullet = bool(%d);\n", m_flags & e_bulletFlag);
538
- b2Log(" bd.active = bool(%d);\n", m_flags & e_activeFlag);
539
- b2Log(" bd.gravityScale = %.15lef;\n", m_gravityScale);
540
- b2Log(" bodies[%d] = m_world->CreateBody(&bd);\n", m_islandIndex);
541
- b2Log("\n");
542
- for (b2Fixture* f = m_fixtureList; f; f = f->m_next)
543
- {
544
- b2Log(" {\n");
545
- f->Dump(bodyIndex);
546
- b2Log(" }\n");
547
- }
548
- b2Log("}\n");
549
- }