reflexion 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (329) hide show
  1. checksums.yaml +5 -5
  2. data/.doc/ext/reflex/application.cpp +9 -5
  3. data/.doc/ext/reflex/capture_event.cpp +0 -4
  4. data/.doc/ext/reflex/contact_event.cpp +17 -10
  5. data/.doc/ext/reflex/draw_event.cpp +1 -5
  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 +40 -6
  11. data/.doc/ext/reflex/image_view.cpp +1 -10
  12. data/.doc/ext/reflex/key_event.cpp +2 -6
  13. data/.doc/ext/reflex/line_shape.cpp +99 -0
  14. data/.doc/ext/reflex/motion_event.cpp +75 -0
  15. data/.doc/ext/reflex/native.cpp +18 -18
  16. data/.doc/ext/reflex/pointer_event.cpp +5 -11
  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 +21 -2
  20. data/.doc/ext/reflex/scroll_event.cpp +0 -6
  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 +11 -6
  28. data/.doc/ext/reflex/view.cpp +548 -144
  29. data/.doc/ext/reflex/wheel_event.cpp +0 -22
  30. data/.doc/ext/reflex/window.cpp +7 -15
  31. data/README.md +1 -1
  32. data/Rakefile +14 -12
  33. data/VERSION +1 -1
  34. data/ext/reflex/application.cpp +10 -5
  35. data/ext/reflex/capture_event.cpp +1 -5
  36. data/ext/reflex/contact_event.cpp +19 -11
  37. data/ext/reflex/defs.h +5 -2
  38. data/ext/reflex/draw_event.cpp +2 -6
  39. data/ext/reflex/ellipse_shape.cpp +56 -25
  40. data/ext/reflex/event.cpp +0 -4
  41. data/ext/reflex/extconf.rb +1 -2
  42. data/ext/reflex/filter.cpp +86 -0
  43. data/ext/reflex/focus_event.cpp +11 -15
  44. data/ext/reflex/frame_event.cpp +46 -7
  45. data/ext/reflex/image_view.cpp +1 -10
  46. data/ext/reflex/key_event.cpp +3 -7
  47. data/ext/reflex/line_shape.cpp +104 -0
  48. data/ext/reflex/motion_event.cpp +79 -0
  49. data/ext/reflex/native.cpp +18 -18
  50. data/ext/reflex/pointer_event.cpp +6 -12
  51. data/ext/reflex/polygon_shape.cpp +68 -0
  52. data/ext/reflex/rect_shape.cpp +113 -24
  53. data/ext/reflex/reflex.cpp +21 -2
  54. data/ext/reflex/scroll_event.cpp +1 -7
  55. data/ext/reflex/selector.cpp +46 -16
  56. data/ext/reflex/selector.h +130 -0
  57. data/ext/reflex/shape.cpp +231 -0
  58. data/ext/reflex/style.cpp +363 -192
  59. data/ext/reflex/style_length.cpp +164 -37
  60. data/ext/reflex/timer.cpp +108 -0
  61. data/ext/reflex/timer_event.cpp +133 -0
  62. data/ext/reflex/update_event.cpp +13 -7
  63. data/ext/reflex/view.cpp +594 -150
  64. data/ext/reflex/wheel_event.cpp +1 -25
  65. data/ext/reflex/window.cpp +7 -15
  66. data/include/reflex/application.h +2 -0
  67. data/include/reflex/debug.h +22 -0
  68. data/include/reflex/defs.h +45 -0
  69. data/include/reflex/event.h +60 -16
  70. data/include/reflex/exception.h +9 -0
  71. data/include/reflex/filter.h +56 -0
  72. data/include/reflex/image_view.h +1 -1
  73. data/include/reflex/ruby/application.h +17 -9
  74. data/include/reflex/ruby/event.h +22 -0
  75. data/include/reflex/ruby/filter.h +69 -0
  76. data/include/reflex/ruby/selector.h +1 -1
  77. data/include/reflex/ruby/shape.h +140 -0
  78. data/include/reflex/ruby/style.h +1 -1
  79. data/include/reflex/ruby/timer.h +69 -0
  80. data/include/reflex/ruby/view.h +43 -76
  81. data/include/reflex/ruby/window.h +17 -32
  82. data/include/reflex/ruby.h +6 -4
  83. data/include/reflex/selector.h +54 -2
  84. data/include/reflex/shape.h +211 -0
  85. data/include/reflex/style.h +111 -77
  86. data/include/reflex/timer.h +73 -0
  87. data/include/reflex/view.h +181 -59
  88. data/include/reflex/window.h +4 -3
  89. data/include/reflex.h +5 -4
  90. data/lib/reflex/application.rb +6 -3
  91. data/lib/reflex/button.rb +2 -2
  92. data/lib/reflex/capture_event.rb +7 -6
  93. data/lib/reflex/contact_event.rb +10 -12
  94. data/lib/reflex/draw_event.rb +6 -1
  95. data/lib/reflex/ellipse_shape.rb +27 -0
  96. data/lib/reflex/filter.rb +18 -0
  97. data/lib/reflex/fixture.rb +4 -0
  98. data/lib/reflex/focus_event.rb +10 -12
  99. data/lib/reflex/frame_event.rb +1 -1
  100. data/lib/reflex/helper.rb +17 -29
  101. data/lib/reflex/key_event.rb +13 -11
  102. data/lib/reflex/line_shape.rb +18 -0
  103. data/lib/reflex/{texture.rb → matrix.rb} +2 -2
  104. data/lib/reflex/module.rb +4 -19
  105. data/lib/reflex/pointer_event.rb +26 -37
  106. data/lib/reflex/polygon.rb +14 -0
  107. data/lib/reflex/polygon_shape.rb +23 -0
  108. data/lib/reflex/polyline.rb +13 -0
  109. data/lib/reflex/rect_shape.rb +20 -0
  110. data/lib/reflex/reflex.rb +1 -3
  111. data/lib/reflex/scroll_event.rb +1 -1
  112. data/lib/reflex/selector.rb +2 -2
  113. data/lib/reflex/shape.rb +62 -0
  114. data/lib/reflex/style.rb +78 -11
  115. data/lib/reflex/style_length.rb +0 -11
  116. data/lib/reflex/text_view.rb +7 -24
  117. data/lib/reflex/timer.rb +30 -0
  118. data/lib/reflex/timer_event.rb +29 -0
  119. data/lib/reflex/update_event.rb +1 -1
  120. data/lib/reflex/view.rb +127 -32
  121. data/lib/reflex/wheel_event.rb +9 -1
  122. data/lib/reflex/window.rb +29 -9
  123. data/lib/reflex.rb +11 -5
  124. data/lib/reflexion.rb +23 -7
  125. data/reflex.gemspec +8 -10
  126. data/samples/bats.rb +4 -4
  127. data/samples/fans.rb +1 -1
  128. data/samples/fps.rb +5 -3
  129. data/samples/hello.rb +4 -6
  130. data/samples/image.rb +5 -4
  131. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +0 -2
  132. data/samples/layout.rb +16 -7
  133. data/samples/model.rb +10 -7
  134. data/samples/physics.rb +22 -20
  135. data/samples/reflexion/breakout.rb +4 -5
  136. data/samples/reflexion/hello.rb +2 -2
  137. data/samples/reflexion/jump_action.rb +191 -0
  138. data/samples/reflexion/noise.rb +23 -0
  139. data/samples/reflexion/paint.rb +7 -6
  140. data/samples/reflexion/physics.rb +15 -8
  141. data/samples/reflexion/pulse.rb +24 -10
  142. data/samples/shader.rb +8 -6
  143. data/samples/shapes.rb +63 -14
  144. data/samples/tree.rb +9 -10
  145. data/samples/views.rb +3 -3
  146. data/samples/visuals.rb +2 -5
  147. data/src/body.cpp +146 -345
  148. data/src/body.h +91 -0
  149. data/src/event.cpp +66 -16
  150. data/src/exception.cpp +13 -3
  151. data/src/filter.cpp +76 -0
  152. data/src/fixture.cpp +164 -39
  153. data/src/fixture.h +85 -0
  154. data/src/image_view.cpp +4 -4
  155. data/src/ios/app_delegate.h +5 -10
  156. data/src/ios/app_delegate.mm +79 -41
  157. data/src/ios/application.h +32 -0
  158. data/src/ios/application.mm +35 -25
  159. data/src/ios/event.mm +8 -4
  160. data/src/ios/reflex.mm +0 -7
  161. data/src/ios/view_controller.h +33 -0
  162. data/src/ios/view_controller.mm +436 -0
  163. data/src/ios/window.h +40 -0
  164. data/src/ios/window.mm +59 -250
  165. data/src/osx/app_delegate.h +5 -10
  166. data/src/osx/app_delegate.mm +52 -55
  167. data/src/osx/application.h +32 -0
  168. data/src/osx/application.mm +44 -39
  169. data/src/osx/native_window.h +0 -15
  170. data/src/osx/native_window.mm +131 -115
  171. data/src/osx/opengl_view.h +0 -2
  172. data/src/osx/opengl_view.mm +12 -3
  173. data/src/osx/reflex.mm +0 -9
  174. data/src/osx/window.h +42 -0
  175. data/src/osx/window.mm +45 -252
  176. data/src/selector.cpp +232 -7
  177. data/src/selector.h +52 -0
  178. data/src/shape.cpp +1191 -0
  179. data/src/shape.h +61 -0
  180. data/src/style.cpp +571 -374
  181. data/src/style.h +39 -0
  182. data/src/timer.cpp +291 -0
  183. data/src/timer.h +55 -0
  184. data/src/view.cpp +1624 -984
  185. data/src/view.h +56 -0
  186. data/src/win32/window.cpp +3 -4
  187. data/src/window.cpp +275 -20
  188. data/src/window.h +92 -0
  189. data/src/world.cpp +112 -111
  190. data/src/world.h +34 -53
  191. data/task/box2d.rake +31 -10
  192. data/test/test_capture_event.rb +8 -6
  193. data/test/test_pointer_event.rb +85 -0
  194. data/test/test_selector.rb +1 -1
  195. data/test/test_shape.rb +71 -0
  196. data/test/test_style.rb +77 -11
  197. data/test/test_style_length.rb +42 -13
  198. data/test/test_view.rb +138 -14
  199. metadata +109 -210
  200. data/.doc/ext/reflex/arc_shape.cpp +0 -89
  201. data/.doc/ext/reflex/body.cpp +0 -299
  202. data/.doc/ext/reflex/fixture.cpp +0 -101
  203. data/.doc/ext/reflex/shape_view.cpp +0 -153
  204. data/ext/reflex/arc_shape.cpp +0 -94
  205. data/ext/reflex/body.cpp +0 -328
  206. data/ext/reflex/fixture.cpp +0 -108
  207. data/ext/reflex/shape_view.cpp +0 -161
  208. data/include/reflex/bitmap.h +0 -20
  209. data/include/reflex/body.h +0 -128
  210. data/include/reflex/bounds.h +0 -20
  211. data/include/reflex/color.h +0 -20
  212. data/include/reflex/color_space.h +0 -20
  213. data/include/reflex/fixture.h +0 -117
  214. data/include/reflex/font.h +0 -20
  215. data/include/reflex/image.h +0 -20
  216. data/include/reflex/matrix.h +0 -20
  217. data/include/reflex/painter.h +0 -20
  218. data/include/reflex/point.h +0 -24
  219. data/include/reflex/ruby/body.h +0 -41
  220. data/include/reflex/ruby/fixture.h +0 -41
  221. data/include/reflex/ruby/shape_view.h +0 -96
  222. data/include/reflex/shader.h +0 -20
  223. data/include/reflex/shape_view.h +0 -146
  224. data/include/reflex/texture.h +0 -20
  225. data/lib/reflex/body.rb +0 -22
  226. data/lib/reflex/flags.rb +0 -18
  227. data/lib/reflex/shape_view.rb +0 -25
  228. data/src/ios/application_data.h +0 -45
  229. data/src/ios/native_window.h +0 -39
  230. data/src/ios/native_window.mm +0 -224
  231. data/src/ios/opengl_view.h +0 -13
  232. data/src/ios/opengl_view.mm +0 -139
  233. data/src/ios/window_data.h +0 -75
  234. data/src/osx/application_data.h +0 -45
  235. data/src/osx/window_data.h +0 -75
  236. data/src/physics/Box2D/Box2D.h +0 -68
  237. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.cpp +0 -193
  238. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.h +0 -105
  239. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.cpp +0 -99
  240. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.h +0 -91
  241. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.cpp +0 -138
  242. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.h +0 -74
  243. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.cpp +0 -467
  244. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.h +0 -101
  245. data/src/physics/Box2D/Collision/Shapes/b2Shape.h +0 -101
  246. data/src/physics/Box2D/Collision/b2BroadPhase.cpp +0 -119
  247. data/src/physics/Box2D/Collision/b2BroadPhase.h +0 -257
  248. data/src/physics/Box2D/Collision/b2CollideCircle.cpp +0 -154
  249. data/src/physics/Box2D/Collision/b2CollideEdge.cpp +0 -698
  250. data/src/physics/Box2D/Collision/b2CollidePolygon.cpp +0 -239
  251. data/src/physics/Box2D/Collision/b2Collision.cpp +0 -252
  252. data/src/physics/Box2D/Collision/b2Collision.h +0 -277
  253. data/src/physics/Box2D/Collision/b2Distance.cpp +0 -603
  254. data/src/physics/Box2D/Collision/b2Distance.h +0 -141
  255. data/src/physics/Box2D/Collision/b2DynamicTree.cpp +0 -778
  256. data/src/physics/Box2D/Collision/b2DynamicTree.h +0 -289
  257. data/src/physics/Box2D/Collision/b2TimeOfImpact.cpp +0 -486
  258. data/src/physics/Box2D/Collision/b2TimeOfImpact.h +0 -58
  259. data/src/physics/Box2D/Common/b2BlockAllocator.cpp +0 -215
  260. data/src/physics/Box2D/Common/b2BlockAllocator.h +0 -62
  261. data/src/physics/Box2D/Common/b2Draw.cpp +0 -44
  262. data/src/physics/Box2D/Common/b2Draw.h +0 -86
  263. data/src/physics/Box2D/Common/b2GrowableStack.h +0 -85
  264. data/src/physics/Box2D/Common/b2Math.cpp +0 -94
  265. data/src/physics/Box2D/Common/b2Math.h +0 -720
  266. data/src/physics/Box2D/Common/b2Settings.cpp +0 -44
  267. data/src/physics/Box2D/Common/b2Settings.h +0 -151
  268. data/src/physics/Box2D/Common/b2StackAllocator.cpp +0 -83
  269. data/src/physics/Box2D/Common/b2StackAllocator.h +0 -60
  270. data/src/physics/Box2D/Common/b2Timer.cpp +0 -101
  271. data/src/physics/Box2D/Common/b2Timer.h +0 -50
  272. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp +0 -53
  273. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.h +0 -39
  274. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp +0 -53
  275. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.h +0 -39
  276. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.cpp +0 -52
  277. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.h +0 -39
  278. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.cpp +0 -247
  279. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.h +0 -349
  280. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.cpp +0 -838
  281. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.h +0 -95
  282. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp +0 -49
  283. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.h +0 -39
  284. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp +0 -49
  285. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.h +0 -39
  286. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp +0 -49
  287. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.h +0 -38
  288. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.cpp +0 -52
  289. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.h +0 -39
  290. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.cpp +0 -260
  291. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.h +0 -169
  292. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.cpp +0 -251
  293. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.h +0 -119
  294. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.cpp +0 -419
  295. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.h +0 -125
  296. data/src/physics/Box2D/Dynamics/Joints/b2Joint.cpp +0 -211
  297. data/src/physics/Box2D/Dynamics/Joints/b2Joint.h +0 -226
  298. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.cpp +0 -304
  299. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.h +0 -133
  300. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.cpp +0 -222
  301. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.h +0 -129
  302. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp +0 -629
  303. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.h +0 -196
  304. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.cpp +0 -348
  305. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.h +0 -152
  306. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp +0 -502
  307. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.h +0 -204
  308. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.cpp +0 -241
  309. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.h +0 -114
  310. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.cpp +0 -344
  311. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.h +0 -126
  312. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.cpp +0 -419
  313. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.h +0 -210
  314. data/src/physics/Box2D/Dynamics/b2Body.cpp +0 -549
  315. data/src/physics/Box2D/Dynamics/b2Body.h +0 -860
  316. data/src/physics/Box2D/Dynamics/b2ContactManager.cpp +0 -296
  317. data/src/physics/Box2D/Dynamics/b2ContactManager.h +0 -52
  318. data/src/physics/Box2D/Dynamics/b2Fixture.cpp +0 -303
  319. data/src/physics/Box2D/Dynamics/b2Fixture.h +0 -345
  320. data/src/physics/Box2D/Dynamics/b2Island.cpp +0 -539
  321. data/src/physics/Box2D/Dynamics/b2Island.h +0 -93
  322. data/src/physics/Box2D/Dynamics/b2TimeStep.h +0 -70
  323. data/src/physics/Box2D/Dynamics/b2World.cpp +0 -1339
  324. data/src/physics/Box2D/Dynamics/b2World.h +0 -354
  325. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.cpp +0 -36
  326. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.h +0 -155
  327. data/src/physics/Box2D/Rope/b2Rope.cpp +0 -259
  328. data/src/physics/Box2D/Rope/b2Rope.h +0 -115
  329. data/src/shape_view.cpp +0 -306
@@ -1,860 +0,0 @@
1
- /*
2
- * Copyright (c) 2006-2011 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
- #ifndef B2_BODY_H
20
- #define B2_BODY_H
21
-
22
- #include <Box2D/Common/b2Math.h>
23
- #include <Box2D/Collision/Shapes/b2Shape.h>
24
- #include <memory>
25
-
26
- class b2Fixture;
27
- class b2Joint;
28
- class b2Contact;
29
- class b2Controller;
30
- class b2World;
31
- struct b2FixtureDef;
32
- struct b2JointEdge;
33
- struct b2ContactEdge;
34
-
35
- /// The body type.
36
- /// static: zero mass, zero velocity, may be manually moved
37
- /// kinematic: zero mass, non-zero velocity set by user, moved by solver
38
- /// dynamic: positive mass, non-zero velocity determined by forces, moved by solver
39
- enum b2BodyType
40
- {
41
- b2_staticBody = 0,
42
- b2_kinematicBody,
43
- b2_dynamicBody
44
-
45
- // TODO_ERIN
46
- //b2_bulletBody,
47
- };
48
-
49
- /// A body definition holds all the data needed to construct a rigid body.
50
- /// You can safely re-use body definitions. Shapes are added to a body after construction.
51
- struct b2BodyDef
52
- {
53
- /// This constructor sets the body definition default values.
54
- b2BodyDef()
55
- {
56
- userData = NULL;
57
- position.Set(0.0f, 0.0f);
58
- angle = 0.0f;
59
- linearVelocity.Set(0.0f, 0.0f);
60
- angularVelocity = 0.0f;
61
- linearDamping = 0.0f;
62
- angularDamping = 0.0f;
63
- allowSleep = true;
64
- awake = true;
65
- fixedRotation = false;
66
- bullet = false;
67
- type = b2_staticBody;
68
- active = true;
69
- gravityScale = 1.0f;
70
- }
71
-
72
- /// The body type: static, kinematic, or dynamic.
73
- /// Note: if a dynamic body would have zero mass, the mass is set to one.
74
- b2BodyType type;
75
-
76
- /// The world position of the body. Avoid creating bodies at the origin
77
- /// since this can lead to many overlapping shapes.
78
- b2Vec2 position;
79
-
80
- /// The world angle of the body in radians.
81
- float32 angle;
82
-
83
- /// The linear velocity of the body's origin in world co-ordinates.
84
- b2Vec2 linearVelocity;
85
-
86
- /// The angular velocity of the body.
87
- float32 angularVelocity;
88
-
89
- /// Linear damping is use to reduce the linear velocity. The damping parameter
90
- /// can be larger than 1.0f but the damping effect becomes sensitive to the
91
- /// time step when the damping parameter is large.
92
- float32 linearDamping;
93
-
94
- /// Angular damping is use to reduce the angular velocity. The damping parameter
95
- /// can be larger than 1.0f but the damping effect becomes sensitive to the
96
- /// time step when the damping parameter is large.
97
- float32 angularDamping;
98
-
99
- /// Set this flag to false if this body should never fall asleep. Note that
100
- /// this increases CPU usage.
101
- bool allowSleep;
102
-
103
- /// Is this body initially awake or sleeping?
104
- bool awake;
105
-
106
- /// Should this body be prevented from rotating? Useful for characters.
107
- bool fixedRotation;
108
-
109
- /// Is this a fast moving body that should be prevented from tunneling through
110
- /// other moving bodies? Note that all bodies are prevented from tunneling through
111
- /// kinematic and static bodies. This setting is only considered on dynamic bodies.
112
- /// @warning You should use this flag sparingly since it increases processing time.
113
- bool bullet;
114
-
115
- /// Does this body start out active?
116
- bool active;
117
-
118
- /// Use this to store application specific body data.
119
- void* userData;
120
-
121
- /// Scale the gravity applied to this body.
122
- float32 gravityScale;
123
- };
124
-
125
- /// A rigid body. These are created via b2World::CreateBody.
126
- class b2Body
127
- {
128
- public:
129
- /// Creates a fixture and attach it to this body. Use this function if you need
130
- /// to set some fixture parameters, like friction. Otherwise you can create the
131
- /// fixture directly from a shape.
132
- /// If the density is non-zero, this function automatically updates the mass of the body.
133
- /// Contacts are not created until the next time step.
134
- /// @param def the fixture definition.
135
- /// @warning This function is locked during callbacks.
136
- b2Fixture* CreateFixture(const b2FixtureDef* def);
137
-
138
- /// Creates a fixture from a shape and attach it to this body.
139
- /// This is a convenience function. Use b2FixtureDef if you need to set parameters
140
- /// like friction, restitution, user data, or filtering.
141
- /// If the density is non-zero, this function automatically updates the mass of the body.
142
- /// @param shape the shape to be cloned.
143
- /// @param density the shape density (set to zero for static bodies).
144
- /// @warning This function is locked during callbacks.
145
- b2Fixture* CreateFixture(const b2Shape* shape, float32 density);
146
-
147
- /// Destroy a fixture. This removes the fixture from the broad-phase and
148
- /// destroys all contacts associated with this fixture. This will
149
- /// automatically adjust the mass of the body if the body is dynamic and the
150
- /// fixture has positive density.
151
- /// All fixtures attached to a body are implicitly destroyed when the body is destroyed.
152
- /// @param fixture the fixture to be removed.
153
- /// @warning This function is locked during callbacks.
154
- void DestroyFixture(b2Fixture* fixture);
155
-
156
- /// Set the position of the body's origin and rotation.
157
- /// Manipulating a body's transform may cause non-physical behavior.
158
- /// Note: contacts are updated on the next call to b2World::Step.
159
- /// @param position the world position of the body's local origin.
160
- /// @param angle the world rotation in radians.
161
- void SetTransform(const b2Vec2& position, float32 angle);
162
-
163
- /// Get the body transform for the body's origin.
164
- /// @return the world transform of the body's origin.
165
- const b2Transform& GetTransform() const;
166
-
167
- /// Get the world body origin position.
168
- /// @return the world position of the body's origin.
169
- const b2Vec2& GetPosition() const;
170
-
171
- /// Get the angle in radians.
172
- /// @return the current world rotation angle in radians.
173
- float32 GetAngle() const;
174
-
175
- /// Get the world position of the center of mass.
176
- const b2Vec2& GetWorldCenter() const;
177
-
178
- /// Get the local position of the center of mass.
179
- const b2Vec2& GetLocalCenter() const;
180
-
181
- /// Set the linear velocity of the center of mass.
182
- /// @param v the new linear velocity of the center of mass.
183
- void SetLinearVelocity(const b2Vec2& v);
184
-
185
- /// Get the linear velocity of the center of mass.
186
- /// @return the linear velocity of the center of mass.
187
- const b2Vec2& GetLinearVelocity() const;
188
-
189
- /// Set the angular velocity.
190
- /// @param omega the new angular velocity in radians/second.
191
- void SetAngularVelocity(float32 omega);
192
-
193
- /// Get the angular velocity.
194
- /// @return the angular velocity in radians/second.
195
- float32 GetAngularVelocity() const;
196
-
197
- /// Apply a force at a world point. If the force is not
198
- /// applied at the center of mass, it will generate a torque and
199
- /// affect the angular velocity. This wakes up the body.
200
- /// @param force the world force vector, usually in Newtons (N).
201
- /// @param point the world position of the point of application.
202
- /// @param wake also wake up the body
203
- void ApplyForce(const b2Vec2& force, const b2Vec2& point, bool wake);
204
-
205
- /// Apply a force to the center of mass. This wakes up the body.
206
- /// @param force the world force vector, usually in Newtons (N).
207
- /// @param wake also wake up the body
208
- void ApplyForceToCenter(const b2Vec2& force, bool wake);
209
-
210
- /// Apply a torque. This affects the angular velocity
211
- /// without affecting the linear velocity of the center of mass.
212
- /// This wakes up the body.
213
- /// @param torque about the z-axis (out of the screen), usually in N-m.
214
- /// @param wake also wake up the body
215
- void ApplyTorque(float32 torque, bool wake);
216
-
217
- /// Apply an impulse at a point. This immediately modifies the velocity.
218
- /// It also modifies the angular velocity if the point of application
219
- /// is not at the center of mass. This wakes up the body.
220
- /// @param impulse the world impulse vector, usually in N-seconds or kg-m/s.
221
- /// @param point the world position of the point of application.
222
- /// @param wake also wake up the body
223
- void ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point, bool wake);
224
-
225
- /// Apply an angular impulse.
226
- /// @param impulse the angular impulse in units of kg*m*m/s
227
- /// @param wake also wake up the body
228
- void ApplyAngularImpulse(float32 impulse, bool wake);
229
-
230
- /// Get the total mass of the body.
231
- /// @return the mass, usually in kilograms (kg).
232
- float32 GetMass() const;
233
-
234
- /// Get the rotational inertia of the body about the local origin.
235
- /// @return the rotational inertia, usually in kg-m^2.
236
- float32 GetInertia() const;
237
-
238
- /// Get the mass data of the body.
239
- /// @return a struct containing the mass, inertia and center of the body.
240
- void GetMassData(b2MassData* data) const;
241
-
242
- /// Set the mass properties to override the mass properties of the fixtures.
243
- /// Note that this changes the center of mass position.
244
- /// Note that creating or destroying fixtures can also alter the mass.
245
- /// This function has no effect if the body isn't dynamic.
246
- /// @param massData the mass properties.
247
- void SetMassData(const b2MassData* data);
248
-
249
- /// This resets the mass properties to the sum of the mass properties of the fixtures.
250
- /// This normally does not need to be called unless you called SetMassData to override
251
- /// the mass and you later want to reset the mass.
252
- void ResetMassData();
253
-
254
- /// Get the world coordinates of a point given the local coordinates.
255
- /// @param localPoint a point on the body measured relative the the body's origin.
256
- /// @return the same point expressed in world coordinates.
257
- b2Vec2 GetWorldPoint(const b2Vec2& localPoint) const;
258
-
259
- /// Get the world coordinates of a vector given the local coordinates.
260
- /// @param localVector a vector fixed in the body.
261
- /// @return the same vector expressed in world coordinates.
262
- b2Vec2 GetWorldVector(const b2Vec2& localVector) const;
263
-
264
- /// Gets a local point relative to the body's origin given a world point.
265
- /// @param a point in world coordinates.
266
- /// @return the corresponding local point relative to the body's origin.
267
- b2Vec2 GetLocalPoint(const b2Vec2& worldPoint) const;
268
-
269
- /// Gets a local vector given a world vector.
270
- /// @param a vector in world coordinates.
271
- /// @return the corresponding local vector.
272
- b2Vec2 GetLocalVector(const b2Vec2& worldVector) const;
273
-
274
- /// Get the world linear velocity of a world point attached to this body.
275
- /// @param a point in world coordinates.
276
- /// @return the world velocity of a point.
277
- b2Vec2 GetLinearVelocityFromWorldPoint(const b2Vec2& worldPoint) const;
278
-
279
- /// Get the world velocity of a local point.
280
- /// @param a point in local coordinates.
281
- /// @return the world velocity of a point.
282
- b2Vec2 GetLinearVelocityFromLocalPoint(const b2Vec2& localPoint) const;
283
-
284
- /// Get the linear damping of the body.
285
- float32 GetLinearDamping() const;
286
-
287
- /// Set the linear damping of the body.
288
- void SetLinearDamping(float32 linearDamping);
289
-
290
- /// Get the angular damping of the body.
291
- float32 GetAngularDamping() const;
292
-
293
- /// Set the angular damping of the body.
294
- void SetAngularDamping(float32 angularDamping);
295
-
296
- /// Get the gravity scale of the body.
297
- float32 GetGravityScale() const;
298
-
299
- /// Set the gravity scale of the body.
300
- void SetGravityScale(float32 scale);
301
-
302
- /// Set the type of this body. This may alter the mass and velocity.
303
- void SetType(b2BodyType type);
304
-
305
- /// Get the type of this body.
306
- b2BodyType GetType() const;
307
-
308
- /// Should this body be treated like a bullet for continuous collision detection?
309
- void SetBullet(bool flag);
310
-
311
- /// Is this body treated like a bullet for continuous collision detection?
312
- bool IsBullet() const;
313
-
314
- /// You can disable sleeping on this body. If you disable sleeping, the
315
- /// body will be woken.
316
- void SetSleepingAllowed(bool flag);
317
-
318
- /// Is this body allowed to sleep
319
- bool IsSleepingAllowed() const;
320
-
321
- /// Set the sleep state of the body. A sleeping body has very
322
- /// low CPU cost.
323
- /// @param flag set to true to wake the body, false to put it to sleep.
324
- void SetAwake(bool flag);
325
-
326
- /// Get the sleeping state of this body.
327
- /// @return true if the body is awake.
328
- bool IsAwake() const;
329
-
330
- /// Set the active state of the body. An inactive body is not
331
- /// simulated and cannot be collided with or woken up.
332
- /// If you pass a flag of true, all fixtures will be added to the
333
- /// broad-phase.
334
- /// If you pass a flag of false, all fixtures will be removed from
335
- /// the broad-phase and all contacts will be destroyed.
336
- /// Fixtures and joints are otherwise unaffected. You may continue
337
- /// to create/destroy fixtures and joints on inactive bodies.
338
- /// Fixtures on an inactive body are implicitly inactive and will
339
- /// not participate in collisions, ray-casts, or queries.
340
- /// Joints connected to an inactive body are implicitly inactive.
341
- /// An inactive body is still owned by a b2World object and remains
342
- /// in the body list.
343
- void SetActive(bool flag);
344
-
345
- /// Get the active state of the body.
346
- bool IsActive() const;
347
-
348
- /// Set this body to have fixed rotation. This causes the mass
349
- /// to be reset.
350
- void SetFixedRotation(bool flag);
351
-
352
- /// Does this body have fixed rotation?
353
- bool IsFixedRotation() const;
354
-
355
- /// Get the list of all fixtures attached to this body.
356
- b2Fixture* GetFixtureList();
357
- const b2Fixture* GetFixtureList() const;
358
-
359
- /// Get the list of all joints attached to this body.
360
- b2JointEdge* GetJointList();
361
- const b2JointEdge* GetJointList() const;
362
-
363
- /// Get the list of all contacts attached to this body.
364
- /// @warning this list changes during the time step and you may
365
- /// miss some collisions if you don't use b2ContactListener.
366
- b2ContactEdge* GetContactList();
367
- const b2ContactEdge* GetContactList() const;
368
-
369
- /// Get the next body in the world's body list.
370
- b2Body* GetNext();
371
- const b2Body* GetNext() const;
372
-
373
- /// Get the user data pointer that was provided in the body definition.
374
- void* GetUserData() const;
375
-
376
- /// Set the user data. Use this to store your application specific data.
377
- void SetUserData(void* data);
378
-
379
- /// Get the parent world of this body.
380
- b2World* GetWorld();
381
- const b2World* GetWorld() const;
382
-
383
- /// Dump this body to a log file
384
- void Dump();
385
-
386
- private:
387
-
388
- friend class b2World;
389
- friend class b2Island;
390
- friend class b2ContactManager;
391
- friend class b2ContactSolver;
392
- friend class b2Contact;
393
-
394
- friend class b2DistanceJoint;
395
- friend class b2FrictionJoint;
396
- friend class b2GearJoint;
397
- friend class b2MotorJoint;
398
- friend class b2MouseJoint;
399
- friend class b2PrismaticJoint;
400
- friend class b2PulleyJoint;
401
- friend class b2RevoluteJoint;
402
- friend class b2RopeJoint;
403
- friend class b2WeldJoint;
404
- friend class b2WheelJoint;
405
-
406
- // m_flags
407
- enum
408
- {
409
- e_islandFlag = 0x0001,
410
- e_awakeFlag = 0x0002,
411
- e_autoSleepFlag = 0x0004,
412
- e_bulletFlag = 0x0008,
413
- e_fixedRotationFlag = 0x0010,
414
- e_activeFlag = 0x0020,
415
- e_toiFlag = 0x0040
416
- };
417
-
418
- b2Body(const b2BodyDef* bd, b2World* world);
419
- ~b2Body();
420
-
421
- void SynchronizeFixtures();
422
- void SynchronizeTransform();
423
-
424
- // This is used to prevent connected bodies from colliding.
425
- // It may lie, depending on the collideConnected flag.
426
- bool ShouldCollide(const b2Body* other) const;
427
-
428
- void Advance(float32 t);
429
-
430
- b2BodyType m_type;
431
-
432
- uint16 m_flags;
433
-
434
- int32 m_islandIndex;
435
-
436
- b2Transform m_xf; // the body origin transform
437
- b2Sweep m_sweep; // the swept motion for CCD
438
-
439
- b2Vec2 m_linearVelocity;
440
- float32 m_angularVelocity;
441
-
442
- b2Vec2 m_force;
443
- float32 m_torque;
444
-
445
- b2World* m_world;
446
- b2Body* m_prev;
447
- b2Body* m_next;
448
-
449
- b2Fixture* m_fixtureList;
450
- int32 m_fixtureCount;
451
-
452
- b2JointEdge* m_jointList;
453
- b2ContactEdge* m_contactList;
454
-
455
- float32 m_mass, m_invMass;
456
-
457
- // Rotational inertia about the center of mass.
458
- float32 m_I, m_invI;
459
-
460
- float32 m_linearDamping;
461
- float32 m_angularDamping;
462
- float32 m_gravityScale;
463
-
464
- float32 m_sleepTime;
465
-
466
- void* m_userData;
467
- };
468
-
469
- inline b2BodyType b2Body::GetType() const
470
- {
471
- return m_type;
472
- }
473
-
474
- inline const b2Transform& b2Body::GetTransform() const
475
- {
476
- return m_xf;
477
- }
478
-
479
- inline const b2Vec2& b2Body::GetPosition() const
480
- {
481
- return m_xf.p;
482
- }
483
-
484
- inline float32 b2Body::GetAngle() const
485
- {
486
- return m_sweep.a;
487
- }
488
-
489
- inline const b2Vec2& b2Body::GetWorldCenter() const
490
- {
491
- return m_sweep.c;
492
- }
493
-
494
- inline const b2Vec2& b2Body::GetLocalCenter() const
495
- {
496
- return m_sweep.localCenter;
497
- }
498
-
499
- inline void b2Body::SetLinearVelocity(const b2Vec2& v)
500
- {
501
- if (m_type == b2_staticBody)
502
- {
503
- return;
504
- }
505
-
506
- if (b2Dot(v,v) > 0.0f)
507
- {
508
- SetAwake(true);
509
- }
510
-
511
- m_linearVelocity = v;
512
- }
513
-
514
- inline const b2Vec2& b2Body::GetLinearVelocity() const
515
- {
516
- return m_linearVelocity;
517
- }
518
-
519
- inline void b2Body::SetAngularVelocity(float32 w)
520
- {
521
- if (m_type == b2_staticBody)
522
- {
523
- return;
524
- }
525
-
526
- if (w * w > 0.0f)
527
- {
528
- SetAwake(true);
529
- }
530
-
531
- m_angularVelocity = w;
532
- }
533
-
534
- inline float32 b2Body::GetAngularVelocity() const
535
- {
536
- return m_angularVelocity;
537
- }
538
-
539
- inline float32 b2Body::GetMass() const
540
- {
541
- return m_mass;
542
- }
543
-
544
- inline float32 b2Body::GetInertia() const
545
- {
546
- return m_I + m_mass * b2Dot(m_sweep.localCenter, m_sweep.localCenter);
547
- }
548
-
549
- inline void b2Body::GetMassData(b2MassData* data) const
550
- {
551
- data->mass = m_mass;
552
- data->I = m_I + m_mass * b2Dot(m_sweep.localCenter, m_sweep.localCenter);
553
- data->center = m_sweep.localCenter;
554
- }
555
-
556
- inline b2Vec2 b2Body::GetWorldPoint(const b2Vec2& localPoint) const
557
- {
558
- return b2Mul(m_xf, localPoint);
559
- }
560
-
561
- inline b2Vec2 b2Body::GetWorldVector(const b2Vec2& localVector) const
562
- {
563
- return b2Mul(m_xf.q, localVector);
564
- }
565
-
566
- inline b2Vec2 b2Body::GetLocalPoint(const b2Vec2& worldPoint) const
567
- {
568
- return b2MulT(m_xf, worldPoint);
569
- }
570
-
571
- inline b2Vec2 b2Body::GetLocalVector(const b2Vec2& worldVector) const
572
- {
573
- return b2MulT(m_xf.q, worldVector);
574
- }
575
-
576
- inline b2Vec2 b2Body::GetLinearVelocityFromWorldPoint(const b2Vec2& worldPoint) const
577
- {
578
- return m_linearVelocity + b2Cross(m_angularVelocity, worldPoint - m_sweep.c);
579
- }
580
-
581
- inline b2Vec2 b2Body::GetLinearVelocityFromLocalPoint(const b2Vec2& localPoint) const
582
- {
583
- return GetLinearVelocityFromWorldPoint(GetWorldPoint(localPoint));
584
- }
585
-
586
- inline float32 b2Body::GetLinearDamping() const
587
- {
588
- return m_linearDamping;
589
- }
590
-
591
- inline void b2Body::SetLinearDamping(float32 linearDamping)
592
- {
593
- m_linearDamping = linearDamping;
594
- }
595
-
596
- inline float32 b2Body::GetAngularDamping() const
597
- {
598
- return m_angularDamping;
599
- }
600
-
601
- inline void b2Body::SetAngularDamping(float32 angularDamping)
602
- {
603
- m_angularDamping = angularDamping;
604
- }
605
-
606
- inline float32 b2Body::GetGravityScale() const
607
- {
608
- return m_gravityScale;
609
- }
610
-
611
- inline void b2Body::SetGravityScale(float32 scale)
612
- {
613
- m_gravityScale = scale;
614
- }
615
-
616
- inline void b2Body::SetBullet(bool flag)
617
- {
618
- if (flag)
619
- {
620
- m_flags |= e_bulletFlag;
621
- }
622
- else
623
- {
624
- m_flags &= ~e_bulletFlag;
625
- }
626
- }
627
-
628
- inline bool b2Body::IsBullet() const
629
- {
630
- return (m_flags & e_bulletFlag) == e_bulletFlag;
631
- }
632
-
633
- inline void b2Body::SetAwake(bool flag)
634
- {
635
- if (flag)
636
- {
637
- if ((m_flags & e_awakeFlag) == 0)
638
- {
639
- m_flags |= e_awakeFlag;
640
- m_sleepTime = 0.0f;
641
- }
642
- }
643
- else
644
- {
645
- m_flags &= ~e_awakeFlag;
646
- m_sleepTime = 0.0f;
647
- m_linearVelocity.SetZero();
648
- m_angularVelocity = 0.0f;
649
- m_force.SetZero();
650
- m_torque = 0.0f;
651
- }
652
- }
653
-
654
- inline bool b2Body::IsAwake() const
655
- {
656
- return (m_flags & e_awakeFlag) == e_awakeFlag;
657
- }
658
-
659
- inline bool b2Body::IsActive() const
660
- {
661
- return (m_flags & e_activeFlag) == e_activeFlag;
662
- }
663
-
664
- inline bool b2Body::IsFixedRotation() const
665
- {
666
- return (m_flags & e_fixedRotationFlag) == e_fixedRotationFlag;
667
- }
668
-
669
- inline void b2Body::SetSleepingAllowed(bool flag)
670
- {
671
- if (flag)
672
- {
673
- m_flags |= e_autoSleepFlag;
674
- }
675
- else
676
- {
677
- m_flags &= ~e_autoSleepFlag;
678
- SetAwake(true);
679
- }
680
- }
681
-
682
- inline bool b2Body::IsSleepingAllowed() const
683
- {
684
- return (m_flags & e_autoSleepFlag) == e_autoSleepFlag;
685
- }
686
-
687
- inline b2Fixture* b2Body::GetFixtureList()
688
- {
689
- return m_fixtureList;
690
- }
691
-
692
- inline const b2Fixture* b2Body::GetFixtureList() const
693
- {
694
- return m_fixtureList;
695
- }
696
-
697
- inline b2JointEdge* b2Body::GetJointList()
698
- {
699
- return m_jointList;
700
- }
701
-
702
- inline const b2JointEdge* b2Body::GetJointList() const
703
- {
704
- return m_jointList;
705
- }
706
-
707
- inline b2ContactEdge* b2Body::GetContactList()
708
- {
709
- return m_contactList;
710
- }
711
-
712
- inline const b2ContactEdge* b2Body::GetContactList() const
713
- {
714
- return m_contactList;
715
- }
716
-
717
- inline b2Body* b2Body::GetNext()
718
- {
719
- return m_next;
720
- }
721
-
722
- inline const b2Body* b2Body::GetNext() const
723
- {
724
- return m_next;
725
- }
726
-
727
- inline void b2Body::SetUserData(void* data)
728
- {
729
- m_userData = data;
730
- }
731
-
732
- inline void* b2Body::GetUserData() const
733
- {
734
- return m_userData;
735
- }
736
-
737
- inline void b2Body::ApplyForce(const b2Vec2& force, const b2Vec2& point, bool wake)
738
- {
739
- if (m_type != b2_dynamicBody)
740
- {
741
- return;
742
- }
743
-
744
- if (wake && (m_flags & e_awakeFlag) == 0)
745
- {
746
- SetAwake(true);
747
- }
748
-
749
- // Don't accumulate a force if the body is sleeping.
750
- if (m_flags & e_awakeFlag)
751
- {
752
- m_force += force;
753
- m_torque += b2Cross(point - m_sweep.c, force);
754
- }
755
- }
756
-
757
- inline void b2Body::ApplyForceToCenter(const b2Vec2& force, bool wake)
758
- {
759
- if (m_type != b2_dynamicBody)
760
- {
761
- return;
762
- }
763
-
764
- if (wake && (m_flags & e_awakeFlag) == 0)
765
- {
766
- SetAwake(true);
767
- }
768
-
769
- // Don't accumulate a force if the body is sleeping
770
- if (m_flags & e_awakeFlag)
771
- {
772
- m_force += force;
773
- }
774
- }
775
-
776
- inline void b2Body::ApplyTorque(float32 torque, bool wake)
777
- {
778
- if (m_type != b2_dynamicBody)
779
- {
780
- return;
781
- }
782
-
783
- if (wake && (m_flags & e_awakeFlag) == 0)
784
- {
785
- SetAwake(true);
786
- }
787
-
788
- // Don't accumulate a force if the body is sleeping
789
- if (m_flags & e_awakeFlag)
790
- {
791
- m_torque += torque;
792
- }
793
- }
794
-
795
- inline void b2Body::ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point, bool wake)
796
- {
797
- if (m_type != b2_dynamicBody)
798
- {
799
- return;
800
- }
801
-
802
- if (wake && (m_flags & e_awakeFlag) == 0)
803
- {
804
- SetAwake(true);
805
- }
806
-
807
- // Don't accumulate velocity if the body is sleeping
808
- if (m_flags & e_awakeFlag)
809
- {
810
- m_linearVelocity += m_invMass * impulse;
811
- m_angularVelocity += m_invI * b2Cross(point - m_sweep.c, impulse);
812
- }
813
- }
814
-
815
- inline void b2Body::ApplyAngularImpulse(float32 impulse, bool wake)
816
- {
817
- if (m_type != b2_dynamicBody)
818
- {
819
- return;
820
- }
821
-
822
- if (wake && (m_flags & e_awakeFlag) == 0)
823
- {
824
- SetAwake(true);
825
- }
826
-
827
- // Don't accumulate velocity if the body is sleeping
828
- if (m_flags & e_awakeFlag)
829
- {
830
- m_angularVelocity += m_invI * impulse;
831
- }
832
- }
833
-
834
- inline void b2Body::SynchronizeTransform()
835
- {
836
- m_xf.q.Set(m_sweep.a);
837
- m_xf.p = m_sweep.c - b2Mul(m_xf.q, m_sweep.localCenter);
838
- }
839
-
840
- inline void b2Body::Advance(float32 alpha)
841
- {
842
- // Advance to the new safe time. This doesn't sync the broad-phase.
843
- m_sweep.Advance(alpha);
844
- m_sweep.c = m_sweep.c0;
845
- m_sweep.a = m_sweep.a0;
846
- m_xf.q.Set(m_sweep.a);
847
- m_xf.p = m_sweep.c - b2Mul(m_xf.q, m_sweep.localCenter);
848
- }
849
-
850
- inline b2World* b2Body::GetWorld()
851
- {
852
- return m_world;
853
- }
854
-
855
- inline const b2World* b2Body::GetWorld() const
856
- {
857
- return m_world;
858
- }
859
-
860
- #endif