reflexion 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +5 -5
  3. data/.doc/ext/reflex/body.cpp +167 -0
  4. data/.doc/ext/reflex/capture_event.cpp +4 -4
  5. data/.doc/ext/reflex/draw_event.cpp +4 -4
  6. data/.doc/ext/reflex/event.cpp +4 -4
  7. data/.doc/ext/reflex/fixture.cpp +101 -0
  8. data/.doc/ext/reflex/focus_event.cpp +4 -4
  9. data/.doc/ext/reflex/frame_event.cpp +4 -4
  10. data/.doc/ext/reflex/image_view.cpp +22 -5
  11. data/.doc/ext/reflex/key_event.cpp +4 -4
  12. data/.doc/ext/reflex/native.cpp +6 -0
  13. data/.doc/ext/reflex/pointer_event.cpp +4 -4
  14. data/.doc/ext/reflex/reflex.cpp +2 -3
  15. data/.doc/ext/reflex/scroll_event.cpp +4 -4
  16. data/.doc/ext/reflex/selector.cpp +4 -4
  17. data/.doc/ext/reflex/style.cpp +4 -4
  18. data/.doc/ext/reflex/style_length.cpp +4 -4
  19. data/.doc/ext/reflex/style_length2.cpp +4 -4
  20. data/.doc/ext/reflex/style_length4.cpp +4 -4
  21. data/.doc/ext/reflex/update_event.cpp +4 -4
  22. data/.doc/ext/reflex/view.cpp +110 -8
  23. data/.doc/ext/reflex/wheel_event.cpp +4 -4
  24. data/.doc/ext/reflex/window.cpp +36 -12
  25. data/README.md +2 -2
  26. data/Rakefile +2 -1
  27. data/VERSION +1 -1
  28. data/ext/reflex/application.cpp +8 -8
  29. data/ext/reflex/body.cpp +181 -0
  30. data/ext/reflex/capture_event.cpp +4 -4
  31. data/ext/reflex/draw_event.cpp +4 -4
  32. data/ext/reflex/event.cpp +4 -4
  33. data/ext/reflex/fixture.cpp +108 -0
  34. data/ext/reflex/focus_event.cpp +4 -4
  35. data/ext/reflex/frame_event.cpp +4 -4
  36. data/ext/reflex/image_view.cpp +24 -5
  37. data/ext/reflex/key_event.cpp +4 -4
  38. data/ext/reflex/native.cpp +6 -0
  39. data/ext/reflex/pointer_event.cpp +4 -4
  40. data/ext/reflex/reflex.cpp +2 -3
  41. data/ext/reflex/scroll_event.cpp +4 -4
  42. data/ext/reflex/selector.cpp +4 -4
  43. data/ext/reflex/style.cpp +4 -4
  44. data/ext/reflex/style_length.cpp +4 -4
  45. data/ext/reflex/style_length2.cpp +4 -4
  46. data/ext/reflex/style_length4.cpp +4 -4
  47. data/ext/reflex/update_event.cpp +4 -4
  48. data/ext/reflex/view.cpp +126 -12
  49. data/ext/reflex/wheel_event.cpp +4 -4
  50. data/ext/reflex/window.cpp +39 -12
  51. data/include/reflex/bitmap.h +20 -0
  52. data/include/reflex/body.h +82 -0
  53. data/include/reflex/bounds.h +20 -0
  54. data/include/reflex/color.h +20 -0
  55. data/include/reflex/color_space.h +20 -0
  56. data/include/reflex/defs.h +5 -1
  57. data/include/reflex/event.h +16 -25
  58. data/include/reflex/fixture.h +116 -0
  59. data/include/reflex/font.h +20 -0
  60. data/include/reflex/image.h +20 -0
  61. data/include/reflex/image_view.h +1 -1
  62. data/include/reflex/matrix.h +20 -0
  63. data/include/reflex/painter.h +20 -0
  64. data/include/reflex/point.h +24 -0
  65. data/include/reflex/ruby/application.h +6 -0
  66. data/include/reflex/ruby/body.h +41 -0
  67. data/include/reflex/ruby/event.h +68 -0
  68. data/include/reflex/ruby/fixture.h +41 -0
  69. data/include/reflex/ruby/image_view.h +14 -0
  70. data/include/reflex/ruby/selector.h +14 -0
  71. data/include/reflex/ruby/style.h +14 -0
  72. data/include/reflex/ruby/style_length.h +26 -0
  73. data/include/reflex/ruby/view.h +43 -39
  74. data/include/reflex/ruby/window.h +27 -21
  75. data/include/reflex/ruby.h +2 -0
  76. data/include/reflex/shader.h +20 -0
  77. data/include/reflex/style.h +2 -3
  78. data/include/reflex/texture.h +20 -0
  79. data/include/reflex/view.h +45 -24
  80. data/include/reflex/window.h +11 -14
  81. data/include/reflex.h +3 -0
  82. data/lib/reflex/application.rb +6 -2
  83. data/lib/reflex/body.rb +17 -0
  84. data/lib/reflex/fixture.rb +17 -0
  85. data/lib/reflex/view.rb +16 -1
  86. data/lib/reflex/window.rb +13 -1
  87. data/lib/reflex.rb +2 -0
  88. data/reflex.gemspec +1 -1
  89. data/samples/bats.rb +4 -3
  90. data/samples/checker.rb +4 -3
  91. data/samples/fans.rb +4 -3
  92. data/samples/fps.rb +5 -3
  93. data/samples/grid.rb +5 -4
  94. data/samples/hello.rb +1 -1
  95. data/samples/image.rb +3 -2
  96. data/samples/ios/hello/hello/main.cpp +12 -3
  97. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +376 -123
  98. data/samples/key.rb +5 -4
  99. data/samples/layout.rb +3 -2
  100. data/samples/model.rb +3 -2
  101. data/samples/osx/hello/hello/main.cpp +12 -3
  102. data/samples/osx/hello/hello.xcodeproj/project.pbxproj +375 -120
  103. data/samples/physics.rb +37 -0
  104. data/samples/repl.rb +3 -2
  105. data/samples/shader.rb +4 -4
  106. data/samples/shapes.rb +4 -4
  107. data/samples/text.rb +6 -4
  108. data/samples/tree.rb +5 -4
  109. data/samples/views.rb +3 -2
  110. data/samples/visuals.rb +1 -2
  111. data/src/body.cpp +244 -0
  112. data/src/event.cpp +18 -18
  113. data/src/fixture.cpp +108 -0
  114. data/src/image_view.cpp +1 -1
  115. data/src/ios/native_window.h +2 -0
  116. data/src/ios/native_window.mm +18 -1
  117. data/src/ios/opengl_view.mm +8 -0
  118. data/src/ios/window.mm +24 -3
  119. data/src/ios/window_data.h +3 -3
  120. data/src/osx/native_window.mm +17 -1
  121. data/src/osx/window.mm +24 -3
  122. data/src/osx/window_data.h +3 -3
  123. data/src/physics/Box2D/Box2D.h +68 -0
  124. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.cpp +193 -0
  125. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.h +105 -0
  126. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.cpp +99 -0
  127. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.h +91 -0
  128. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.cpp +138 -0
  129. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.h +74 -0
  130. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.cpp +467 -0
  131. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.h +101 -0
  132. data/src/physics/Box2D/Collision/Shapes/b2Shape.h +101 -0
  133. data/src/physics/Box2D/Collision/b2BroadPhase.cpp +119 -0
  134. data/src/physics/Box2D/Collision/b2BroadPhase.h +257 -0
  135. data/src/physics/Box2D/Collision/b2CollideCircle.cpp +154 -0
  136. data/src/physics/Box2D/Collision/b2CollideEdge.cpp +698 -0
  137. data/src/physics/Box2D/Collision/b2CollidePolygon.cpp +239 -0
  138. data/src/physics/Box2D/Collision/b2Collision.cpp +252 -0
  139. data/src/physics/Box2D/Collision/b2Collision.h +277 -0
  140. data/src/physics/Box2D/Collision/b2Distance.cpp +603 -0
  141. data/src/physics/Box2D/Collision/b2Distance.h +141 -0
  142. data/src/physics/Box2D/Collision/b2DynamicTree.cpp +778 -0
  143. data/src/physics/Box2D/Collision/b2DynamicTree.h +289 -0
  144. data/src/physics/Box2D/Collision/b2TimeOfImpact.cpp +486 -0
  145. data/src/physics/Box2D/Collision/b2TimeOfImpact.h +58 -0
  146. data/src/physics/Box2D/Common/b2BlockAllocator.cpp +215 -0
  147. data/src/physics/Box2D/Common/b2BlockAllocator.h +62 -0
  148. data/src/physics/Box2D/Common/b2Draw.cpp +44 -0
  149. data/src/physics/Box2D/Common/b2Draw.h +86 -0
  150. data/src/physics/Box2D/Common/b2GrowableStack.h +85 -0
  151. data/src/physics/Box2D/Common/b2Math.cpp +94 -0
  152. data/src/physics/Box2D/Common/b2Math.h +720 -0
  153. data/src/physics/Box2D/Common/b2Settings.cpp +44 -0
  154. data/src/physics/Box2D/Common/b2Settings.h +151 -0
  155. data/src/physics/Box2D/Common/b2StackAllocator.cpp +83 -0
  156. data/src/physics/Box2D/Common/b2StackAllocator.h +60 -0
  157. data/src/physics/Box2D/Common/b2Timer.cpp +101 -0
  158. data/src/physics/Box2D/Common/b2Timer.h +50 -0
  159. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp +53 -0
  160. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.h +39 -0
  161. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp +53 -0
  162. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.h +39 -0
  163. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.cpp +52 -0
  164. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.h +39 -0
  165. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.cpp +247 -0
  166. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.h +349 -0
  167. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.cpp +838 -0
  168. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.h +95 -0
  169. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp +49 -0
  170. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.h +39 -0
  171. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp +49 -0
  172. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.h +39 -0
  173. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp +49 -0
  174. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.h +38 -0
  175. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.cpp +52 -0
  176. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.h +39 -0
  177. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.cpp +260 -0
  178. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.h +169 -0
  179. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.cpp +251 -0
  180. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.h +119 -0
  181. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.cpp +419 -0
  182. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.h +125 -0
  183. data/src/physics/Box2D/Dynamics/Joints/b2Joint.cpp +211 -0
  184. data/src/physics/Box2D/Dynamics/Joints/b2Joint.h +226 -0
  185. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.cpp +304 -0
  186. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.h +133 -0
  187. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.cpp +222 -0
  188. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.h +129 -0
  189. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp +629 -0
  190. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.h +196 -0
  191. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.cpp +348 -0
  192. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.h +152 -0
  193. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp +502 -0
  194. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.h +204 -0
  195. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.cpp +241 -0
  196. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.h +114 -0
  197. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.cpp +344 -0
  198. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.h +126 -0
  199. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.cpp +419 -0
  200. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.h +210 -0
  201. data/src/physics/Box2D/Dynamics/b2Body.cpp +549 -0
  202. data/src/physics/Box2D/Dynamics/b2Body.h +860 -0
  203. data/src/physics/Box2D/Dynamics/b2ContactManager.cpp +296 -0
  204. data/src/physics/Box2D/Dynamics/b2ContactManager.h +52 -0
  205. data/src/physics/Box2D/Dynamics/b2Fixture.cpp +303 -0
  206. data/src/physics/Box2D/Dynamics/b2Fixture.h +345 -0
  207. data/src/physics/Box2D/Dynamics/b2Island.cpp +539 -0
  208. data/src/physics/Box2D/Dynamics/b2Island.h +93 -0
  209. data/src/physics/Box2D/Dynamics/b2TimeStep.h +70 -0
  210. data/src/physics/Box2D/Dynamics/b2World.cpp +1339 -0
  211. data/src/physics/Box2D/Dynamics/b2World.h +354 -0
  212. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.cpp +36 -0
  213. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.h +155 -0
  214. data/src/physics/Box2D/Rope/b2Rope.cpp +259 -0
  215. data/src/physics/Box2D/Rope/b2Rope.h +115 -0
  216. data/src/style.cpp +2 -2
  217. data/src/view.cpp +217 -17
  218. data/src/window.cpp +25 -15
  219. data/src/world.cpp +206 -0
  220. data/src/world.h +96 -0
  221. data/task/box2d.rake +25 -0
  222. data/test/test_view.rb +5 -5
  223. metadata +125 -3
@@ -0,0 +1,277 @@
1
+ /*
2
+ * Copyright (c) 2006-2009 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_COLLISION_H
20
+ #define B2_COLLISION_H
21
+
22
+ #include <Box2D/Common/b2Math.h>
23
+ #include <limits.h>
24
+
25
+ /// @file
26
+ /// Structures and functions used for computing contact points, distance
27
+ /// queries, and TOI queries.
28
+
29
+ class b2Shape;
30
+ class b2CircleShape;
31
+ class b2EdgeShape;
32
+ class b2PolygonShape;
33
+
34
+ const uint8 b2_nullFeature = UCHAR_MAX;
35
+
36
+ /// The features that intersect to form the contact point
37
+ /// This must be 4 bytes or less.
38
+ struct b2ContactFeature
39
+ {
40
+ enum Type
41
+ {
42
+ e_vertex = 0,
43
+ e_face = 1
44
+ };
45
+
46
+ uint8 indexA; ///< Feature index on shapeA
47
+ uint8 indexB; ///< Feature index on shapeB
48
+ uint8 typeA; ///< The feature type on shapeA
49
+ uint8 typeB; ///< The feature type on shapeB
50
+ };
51
+
52
+ /// Contact ids to facilitate warm starting.
53
+ union b2ContactID
54
+ {
55
+ b2ContactFeature cf;
56
+ uint32 key; ///< Used to quickly compare contact ids.
57
+ };
58
+
59
+ /// A manifold point is a contact point belonging to a contact
60
+ /// manifold. It holds details related to the geometry and dynamics
61
+ /// of the contact points.
62
+ /// The local point usage depends on the manifold type:
63
+ /// -e_circles: the local center of circleB
64
+ /// -e_faceA: the local center of cirlceB or the clip point of polygonB
65
+ /// -e_faceB: the clip point of polygonA
66
+ /// This structure is stored across time steps, so we keep it small.
67
+ /// Note: the impulses are used for internal caching and may not
68
+ /// provide reliable contact forces, especially for high speed collisions.
69
+ struct b2ManifoldPoint
70
+ {
71
+ b2Vec2 localPoint; ///< usage depends on manifold type
72
+ float32 normalImpulse; ///< the non-penetration impulse
73
+ float32 tangentImpulse; ///< the friction impulse
74
+ b2ContactID id; ///< uniquely identifies a contact point between two shapes
75
+ };
76
+
77
+ /// A manifold for two touching convex shapes.
78
+ /// Box2D supports multiple types of contact:
79
+ /// - clip point versus plane with radius
80
+ /// - point versus point with radius (circles)
81
+ /// The local point usage depends on the manifold type:
82
+ /// -e_circles: the local center of circleA
83
+ /// -e_faceA: the center of faceA
84
+ /// -e_faceB: the center of faceB
85
+ /// Similarly the local normal usage:
86
+ /// -e_circles: not used
87
+ /// -e_faceA: the normal on polygonA
88
+ /// -e_faceB: the normal on polygonB
89
+ /// We store contacts in this way so that position correction can
90
+ /// account for movement, which is critical for continuous physics.
91
+ /// All contact scenarios must be expressed in one of these types.
92
+ /// This structure is stored across time steps, so we keep it small.
93
+ struct b2Manifold
94
+ {
95
+ enum Type
96
+ {
97
+ e_circles,
98
+ e_faceA,
99
+ e_faceB
100
+ };
101
+
102
+ b2ManifoldPoint points[b2_maxManifoldPoints]; ///< the points of contact
103
+ b2Vec2 localNormal; ///< not use for Type::e_points
104
+ b2Vec2 localPoint; ///< usage depends on manifold type
105
+ Type type;
106
+ int32 pointCount; ///< the number of manifold points
107
+ };
108
+
109
+ /// This is used to compute the current state of a contact manifold.
110
+ struct b2WorldManifold
111
+ {
112
+ /// Evaluate the manifold with supplied transforms. This assumes
113
+ /// modest motion from the original state. This does not change the
114
+ /// point count, impulses, etc. The radii must come from the shapes
115
+ /// that generated the manifold.
116
+ void Initialize(const b2Manifold* manifold,
117
+ const b2Transform& xfA, float32 radiusA,
118
+ const b2Transform& xfB, float32 radiusB);
119
+
120
+ b2Vec2 normal; ///< world vector pointing from A to B
121
+ b2Vec2 points[b2_maxManifoldPoints]; ///< world contact point (point of intersection)
122
+ float32 separations[b2_maxManifoldPoints]; ///< a negative value indicates overlap, in meters
123
+ };
124
+
125
+ /// This is used for determining the state of contact points.
126
+ enum b2PointState
127
+ {
128
+ b2_nullState, ///< point does not exist
129
+ b2_addState, ///< point was added in the update
130
+ b2_persistState, ///< point persisted across the update
131
+ b2_removeState ///< point was removed in the update
132
+ };
133
+
134
+ /// Compute the point states given two manifolds. The states pertain to the transition from manifold1
135
+ /// to manifold2. So state1 is either persist or remove while state2 is either add or persist.
136
+ void b2GetPointStates(b2PointState state1[b2_maxManifoldPoints], b2PointState state2[b2_maxManifoldPoints],
137
+ const b2Manifold* manifold1, const b2Manifold* manifold2);
138
+
139
+ /// Used for computing contact manifolds.
140
+ struct b2ClipVertex
141
+ {
142
+ b2Vec2 v;
143
+ b2ContactID id;
144
+ };
145
+
146
+ /// Ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
147
+ struct b2RayCastInput
148
+ {
149
+ b2Vec2 p1, p2;
150
+ float32 maxFraction;
151
+ };
152
+
153
+ /// Ray-cast output data. The ray hits at p1 + fraction * (p2 - p1), where p1 and p2
154
+ /// come from b2RayCastInput.
155
+ struct b2RayCastOutput
156
+ {
157
+ b2Vec2 normal;
158
+ float32 fraction;
159
+ };
160
+
161
+ /// An axis aligned bounding box.
162
+ struct b2AABB
163
+ {
164
+ /// Verify that the bounds are sorted.
165
+ bool IsValid() const;
166
+
167
+ /// Get the center of the AABB.
168
+ b2Vec2 GetCenter() const
169
+ {
170
+ return 0.5f * (lowerBound + upperBound);
171
+ }
172
+
173
+ /// Get the extents of the AABB (half-widths).
174
+ b2Vec2 GetExtents() const
175
+ {
176
+ return 0.5f * (upperBound - lowerBound);
177
+ }
178
+
179
+ /// Get the perimeter length
180
+ float32 GetPerimeter() const
181
+ {
182
+ float32 wx = upperBound.x - lowerBound.x;
183
+ float32 wy = upperBound.y - lowerBound.y;
184
+ return 2.0f * (wx + wy);
185
+ }
186
+
187
+ /// Combine an AABB into this one.
188
+ void Combine(const b2AABB& aabb)
189
+ {
190
+ lowerBound = b2Min(lowerBound, aabb.lowerBound);
191
+ upperBound = b2Max(upperBound, aabb.upperBound);
192
+ }
193
+
194
+ /// Combine two AABBs into this one.
195
+ void Combine(const b2AABB& aabb1, const b2AABB& aabb2)
196
+ {
197
+ lowerBound = b2Min(aabb1.lowerBound, aabb2.lowerBound);
198
+ upperBound = b2Max(aabb1.upperBound, aabb2.upperBound);
199
+ }
200
+
201
+ /// Does this aabb contain the provided AABB.
202
+ bool Contains(const b2AABB& aabb) const
203
+ {
204
+ bool result = true;
205
+ result = result && lowerBound.x <= aabb.lowerBound.x;
206
+ result = result && lowerBound.y <= aabb.lowerBound.y;
207
+ result = result && aabb.upperBound.x <= upperBound.x;
208
+ result = result && aabb.upperBound.y <= upperBound.y;
209
+ return result;
210
+ }
211
+
212
+ bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input) const;
213
+
214
+ b2Vec2 lowerBound; ///< the lower vertex
215
+ b2Vec2 upperBound; ///< the upper vertex
216
+ };
217
+
218
+ /// Compute the collision manifold between two circles.
219
+ void b2CollideCircles(b2Manifold* manifold,
220
+ const b2CircleShape* circleA, const b2Transform& xfA,
221
+ const b2CircleShape* circleB, const b2Transform& xfB);
222
+
223
+ /// Compute the collision manifold between a polygon and a circle.
224
+ void b2CollidePolygonAndCircle(b2Manifold* manifold,
225
+ const b2PolygonShape* polygonA, const b2Transform& xfA,
226
+ const b2CircleShape* circleB, const b2Transform& xfB);
227
+
228
+ /// Compute the collision manifold between two polygons.
229
+ void b2CollidePolygons(b2Manifold* manifold,
230
+ const b2PolygonShape* polygonA, const b2Transform& xfA,
231
+ const b2PolygonShape* polygonB, const b2Transform& xfB);
232
+
233
+ /// Compute the collision manifold between an edge and a circle.
234
+ void b2CollideEdgeAndCircle(b2Manifold* manifold,
235
+ const b2EdgeShape* polygonA, const b2Transform& xfA,
236
+ const b2CircleShape* circleB, const b2Transform& xfB);
237
+
238
+ /// Compute the collision manifold between an edge and a circle.
239
+ void b2CollideEdgeAndPolygon(b2Manifold* manifold,
240
+ const b2EdgeShape* edgeA, const b2Transform& xfA,
241
+ const b2PolygonShape* circleB, const b2Transform& xfB);
242
+
243
+ /// Clipping for contact manifolds.
244
+ int32 b2ClipSegmentToLine(b2ClipVertex vOut[2], const b2ClipVertex vIn[2],
245
+ const b2Vec2& normal, float32 offset, int32 vertexIndexA);
246
+
247
+ /// Determine if two generic shapes overlap.
248
+ bool b2TestOverlap( const b2Shape* shapeA, int32 indexA,
249
+ const b2Shape* shapeB, int32 indexB,
250
+ const b2Transform& xfA, const b2Transform& xfB);
251
+
252
+ // ---------------- Inline Functions ------------------------------------------
253
+
254
+ inline bool b2AABB::IsValid() const
255
+ {
256
+ b2Vec2 d = upperBound - lowerBound;
257
+ bool valid = d.x >= 0.0f && d.y >= 0.0f;
258
+ valid = valid && lowerBound.IsValid() && upperBound.IsValid();
259
+ return valid;
260
+ }
261
+
262
+ inline bool b2TestOverlap(const b2AABB& a, const b2AABB& b)
263
+ {
264
+ b2Vec2 d1, d2;
265
+ d1 = b.lowerBound - a.upperBound;
266
+ d2 = a.lowerBound - b.upperBound;
267
+
268
+ if (d1.x > 0.0f || d1.y > 0.0f)
269
+ return false;
270
+
271
+ if (d2.x > 0.0f || d2.y > 0.0f)
272
+ return false;
273
+
274
+ return true;
275
+ }
276
+
277
+ #endif