reflexion 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
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,44 @@
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
+ #include <Box2D/Common/b2Settings.h>
20
+ #include <stdio.h>
21
+ #include <stdarg.h>
22
+ #include <stdlib.h>
23
+
24
+ b2Version b2_version = {2, 3, 2};
25
+
26
+ // Memory allocators. Modify these to use your own allocator.
27
+ void* b2Alloc(int32 size)
28
+ {
29
+ return malloc(size);
30
+ }
31
+
32
+ void b2Free(void* mem)
33
+ {
34
+ free(mem);
35
+ }
36
+
37
+ // You can modify this to use your logging facility.
38
+ void b2Log(const char* string, ...)
39
+ {
40
+ va_list args;
41
+ va_start(args, string);
42
+ vprintf(string, args);
43
+ va_end(args);
44
+ }
@@ -0,0 +1,151 @@
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_SETTINGS_H
20
+ #define B2_SETTINGS_H
21
+
22
+ #include <stddef.h>
23
+ #include <assert.h>
24
+ #include <float.h>
25
+
26
+ #define B2_NOT_USED(x) ((void)(x))
27
+ #define b2Assert(A) assert(A)
28
+
29
+ typedef signed char int8;
30
+ typedef signed short int16;
31
+ typedef signed int int32;
32
+ typedef unsigned char uint8;
33
+ typedef unsigned short uint16;
34
+ typedef unsigned int uint32;
35
+ typedef float float32;
36
+ typedef double float64;
37
+
38
+ #define b2_maxFloat FLT_MAX
39
+ #define b2_epsilon FLT_EPSILON
40
+ #define b2_pi 3.14159265359f
41
+
42
+ /// @file
43
+ /// Global tuning constants based on meters-kilograms-seconds (MKS) units.
44
+ ///
45
+
46
+ // Collision
47
+
48
+ /// The maximum number of contact points between two convex shapes. Do
49
+ /// not change this value.
50
+ #define b2_maxManifoldPoints 2
51
+
52
+ /// The maximum number of vertices on a convex polygon. You cannot increase
53
+ /// this too much because b2BlockAllocator has a maximum object size.
54
+ #define b2_maxPolygonVertices 8
55
+
56
+ /// This is used to fatten AABBs in the dynamic tree. This allows proxies
57
+ /// to move by a small amount without triggering a tree adjustment.
58
+ /// This is in meters.
59
+ #define b2_aabbExtension 0.1f
60
+
61
+ /// This is used to fatten AABBs in the dynamic tree. This is used to predict
62
+ /// the future position based on the current displacement.
63
+ /// This is a dimensionless multiplier.
64
+ #define b2_aabbMultiplier 2.0f
65
+
66
+ /// A small length used as a collision and constraint tolerance. Usually it is
67
+ /// chosen to be numerically significant, but visually insignificant.
68
+ #define b2_linearSlop 0.005f
69
+
70
+ /// A small angle used as a collision and constraint tolerance. Usually it is
71
+ /// chosen to be numerically significant, but visually insignificant.
72
+ #define b2_angularSlop (2.0f / 180.0f * b2_pi)
73
+
74
+ /// The radius of the polygon/edge shape skin. This should not be modified. Making
75
+ /// this smaller means polygons will have an insufficient buffer for continuous collision.
76
+ /// Making it larger may create artifacts for vertex collision.
77
+ #define b2_polygonRadius (2.0f * b2_linearSlop)
78
+
79
+ /// Maximum number of sub-steps per contact in continuous physics simulation.
80
+ #define b2_maxSubSteps 8
81
+
82
+
83
+ // Dynamics
84
+
85
+ /// Maximum number of contacts to be handled to solve a TOI impact.
86
+ #define b2_maxTOIContacts 32
87
+
88
+ /// A velocity threshold for elastic collisions. Any collision with a relative linear
89
+ /// velocity below this threshold will be treated as inelastic.
90
+ #define b2_velocityThreshold 1.0f
91
+
92
+ /// The maximum linear position correction used when solving constraints. This helps to
93
+ /// prevent overshoot.
94
+ #define b2_maxLinearCorrection 0.2f
95
+
96
+ /// The maximum angular position correction used when solving constraints. This helps to
97
+ /// prevent overshoot.
98
+ #define b2_maxAngularCorrection (8.0f / 180.0f * b2_pi)
99
+
100
+ /// The maximum linear velocity of a body. This limit is very large and is used
101
+ /// to prevent numerical problems. You shouldn't need to adjust this.
102
+ #define b2_maxTranslation 2.0f
103
+ #define b2_maxTranslationSquared (b2_maxTranslation * b2_maxTranslation)
104
+
105
+ /// The maximum angular velocity of a body. This limit is very large and is used
106
+ /// to prevent numerical problems. You shouldn't need to adjust this.
107
+ #define b2_maxRotation (0.5f * b2_pi)
108
+ #define b2_maxRotationSquared (b2_maxRotation * b2_maxRotation)
109
+
110
+ /// This scale factor controls how fast overlap is resolved. Ideally this would be 1 so
111
+ /// that overlap is removed in one time step. However using values close to 1 often lead
112
+ /// to overshoot.
113
+ #define b2_baumgarte 0.2f
114
+ #define b2_toiBaugarte 0.75f
115
+
116
+
117
+ // Sleep
118
+
119
+ /// The time that a body must be still before it will go to sleep.
120
+ #define b2_timeToSleep 0.5f
121
+
122
+ /// A body cannot sleep if its linear velocity is above this tolerance.
123
+ #define b2_linearSleepTolerance 0.01f
124
+
125
+ /// A body cannot sleep if its angular velocity is above this tolerance.
126
+ #define b2_angularSleepTolerance (2.0f / 180.0f * b2_pi)
127
+
128
+ // Memory Allocation
129
+
130
+ /// Implement this function to use your own memory allocator.
131
+ void* b2Alloc(int32 size);
132
+
133
+ /// If you implement b2Alloc, you should also implement this function.
134
+ void b2Free(void* mem);
135
+
136
+ /// Logging function.
137
+ void b2Log(const char* string, ...);
138
+
139
+ /// Version numbering scheme.
140
+ /// See http://en.wikipedia.org/wiki/Software_versioning
141
+ struct b2Version
142
+ {
143
+ int32 major; ///< significant changes
144
+ int32 minor; ///< incremental changes
145
+ int32 revision; ///< bug fixes
146
+ };
147
+
148
+ /// Current version.
149
+ extern b2Version b2_version;
150
+
151
+ #endif
@@ -0,0 +1,83 @@
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
+ #include <Box2D/Common/b2StackAllocator.h>
20
+ #include <Box2D/Common/b2Math.h>
21
+
22
+ b2StackAllocator::b2StackAllocator()
23
+ {
24
+ m_index = 0;
25
+ m_allocation = 0;
26
+ m_maxAllocation = 0;
27
+ m_entryCount = 0;
28
+ }
29
+
30
+ b2StackAllocator::~b2StackAllocator()
31
+ {
32
+ b2Assert(m_index == 0);
33
+ b2Assert(m_entryCount == 0);
34
+ }
35
+
36
+ void* b2StackAllocator::Allocate(int32 size)
37
+ {
38
+ b2Assert(m_entryCount < b2_maxStackEntries);
39
+
40
+ b2StackEntry* entry = m_entries + m_entryCount;
41
+ entry->size = size;
42
+ if (m_index + size > b2_stackSize)
43
+ {
44
+ entry->data = (char*)b2Alloc(size);
45
+ entry->usedMalloc = true;
46
+ }
47
+ else
48
+ {
49
+ entry->data = m_data + m_index;
50
+ entry->usedMalloc = false;
51
+ m_index += size;
52
+ }
53
+
54
+ m_allocation += size;
55
+ m_maxAllocation = b2Max(m_maxAllocation, m_allocation);
56
+ ++m_entryCount;
57
+
58
+ return entry->data;
59
+ }
60
+
61
+ void b2StackAllocator::Free(void* p)
62
+ {
63
+ b2Assert(m_entryCount > 0);
64
+ b2StackEntry* entry = m_entries + m_entryCount - 1;
65
+ b2Assert(p == entry->data);
66
+ if (entry->usedMalloc)
67
+ {
68
+ b2Free(p);
69
+ }
70
+ else
71
+ {
72
+ m_index -= entry->size;
73
+ }
74
+ m_allocation -= entry->size;
75
+ --m_entryCount;
76
+
77
+ p = NULL;
78
+ }
79
+
80
+ int32 b2StackAllocator::GetMaxAllocation() const
81
+ {
82
+ return m_maxAllocation;
83
+ }
@@ -0,0 +1,60 @@
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_STACK_ALLOCATOR_H
20
+ #define B2_STACK_ALLOCATOR_H
21
+
22
+ #include <Box2D/Common/b2Settings.h>
23
+
24
+ const int32 b2_stackSize = 100 * 1024; // 100k
25
+ const int32 b2_maxStackEntries = 32;
26
+
27
+ struct b2StackEntry
28
+ {
29
+ char* data;
30
+ int32 size;
31
+ bool usedMalloc;
32
+ };
33
+
34
+ // This is a stack allocator used for fast per step allocations.
35
+ // You must nest allocate/free pairs. The code will assert
36
+ // if you try to interleave multiple allocate/free pairs.
37
+ class b2StackAllocator
38
+ {
39
+ public:
40
+ b2StackAllocator();
41
+ ~b2StackAllocator();
42
+
43
+ void* Allocate(int32 size);
44
+ void Free(void* p);
45
+
46
+ int32 GetMaxAllocation() const;
47
+
48
+ private:
49
+
50
+ char m_data[b2_stackSize];
51
+ int32 m_index;
52
+
53
+ int32 m_allocation;
54
+ int32 m_maxAllocation;
55
+
56
+ b2StackEntry m_entries[b2_maxStackEntries];
57
+ int32 m_entryCount;
58
+ };
59
+
60
+ #endif
@@ -0,0 +1,101 @@
1
+ /*
2
+ * Copyright (c) 2011 Erin Catto http://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/Common/b2Timer.h>
20
+
21
+ #if defined(_WIN32)
22
+
23
+ float64 b2Timer::s_invFrequency = 0.0f;
24
+
25
+ #define WIN32_LEAN_AND_MEAN
26
+ #include <windows.h>
27
+
28
+ b2Timer::b2Timer()
29
+ {
30
+ LARGE_INTEGER largeInteger;
31
+
32
+ if (s_invFrequency == 0.0f)
33
+ {
34
+ QueryPerformanceFrequency(&largeInteger);
35
+ s_invFrequency = float64(largeInteger.QuadPart);
36
+ if (s_invFrequency > 0.0f)
37
+ {
38
+ s_invFrequency = 1000.0f / s_invFrequency;
39
+ }
40
+ }
41
+
42
+ QueryPerformanceCounter(&largeInteger);
43
+ m_start = float64(largeInteger.QuadPart);
44
+ }
45
+
46
+ void b2Timer::Reset()
47
+ {
48
+ LARGE_INTEGER largeInteger;
49
+ QueryPerformanceCounter(&largeInteger);
50
+ m_start = float64(largeInteger.QuadPart);
51
+ }
52
+
53
+ float32 b2Timer::GetMilliseconds() const
54
+ {
55
+ LARGE_INTEGER largeInteger;
56
+ QueryPerformanceCounter(&largeInteger);
57
+ float64 count = float64(largeInteger.QuadPart);
58
+ float32 ms = float32(s_invFrequency * (count - m_start));
59
+ return ms;
60
+ }
61
+
62
+ #elif defined(__linux__) || defined (__APPLE__)
63
+
64
+ #include <sys/time.h>
65
+
66
+ b2Timer::b2Timer()
67
+ {
68
+ Reset();
69
+ }
70
+
71
+ void b2Timer::Reset()
72
+ {
73
+ timeval t;
74
+ gettimeofday(&t, 0);
75
+ m_start_sec = t.tv_sec;
76
+ m_start_usec = t.tv_usec;
77
+ }
78
+
79
+ float32 b2Timer::GetMilliseconds() const
80
+ {
81
+ timeval t;
82
+ gettimeofday(&t, 0);
83
+ return 1000.0f * (t.tv_sec - m_start_sec) + 0.001f * (t.tv_usec - m_start_usec);
84
+ }
85
+
86
+ #else
87
+
88
+ b2Timer::b2Timer()
89
+ {
90
+ }
91
+
92
+ void b2Timer::Reset()
93
+ {
94
+ }
95
+
96
+ float32 b2Timer::GetMilliseconds() const
97
+ {
98
+ return 0.0f;
99
+ }
100
+
101
+ #endif
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Copyright (c) 2011 Erin Catto http://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_TIMER_H
20
+ #define B2_TIMER_H
21
+
22
+ #include <Box2D/Common/b2Settings.h>
23
+
24
+ /// Timer for profiling. This has platform specific code and may
25
+ /// not work on every platform.
26
+ class b2Timer
27
+ {
28
+ public:
29
+
30
+ /// Constructor
31
+ b2Timer();
32
+
33
+ /// Reset the timer.
34
+ void Reset();
35
+
36
+ /// Get the time since construction or the last reset.
37
+ float32 GetMilliseconds() const;
38
+
39
+ private:
40
+
41
+ #if defined(_WIN32)
42
+ float64 m_start;
43
+ static float64 s_invFrequency;
44
+ #elif defined(__linux__) || defined (__APPLE__)
45
+ unsigned long m_start_sec;
46
+ unsigned long m_start_usec;
47
+ #endif
48
+ };
49
+
50
+ #endif
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright (c) 2006-2010 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/Contacts/b2ChainAndCircleContact.h>
20
+ #include <Box2D/Common/b2BlockAllocator.h>
21
+ #include <Box2D/Dynamics/b2Fixture.h>
22
+ #include <Box2D/Collision/Shapes/b2ChainShape.h>
23
+ #include <Box2D/Collision/Shapes/b2EdgeShape.h>
24
+
25
+ #include <new>
26
+
27
+ b2Contact* b2ChainAndCircleContact::Create(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB, b2BlockAllocator* allocator)
28
+ {
29
+ void* mem = allocator->Allocate(sizeof(b2ChainAndCircleContact));
30
+ return new (mem) b2ChainAndCircleContact(fixtureA, indexA, fixtureB, indexB);
31
+ }
32
+
33
+ void b2ChainAndCircleContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator)
34
+ {
35
+ ((b2ChainAndCircleContact*)contact)->~b2ChainAndCircleContact();
36
+ allocator->Free(contact, sizeof(b2ChainAndCircleContact));
37
+ }
38
+
39
+ b2ChainAndCircleContact::b2ChainAndCircleContact(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB)
40
+ : b2Contact(fixtureA, indexA, fixtureB, indexB)
41
+ {
42
+ b2Assert(m_fixtureA->GetType() == b2Shape::e_chain);
43
+ b2Assert(m_fixtureB->GetType() == b2Shape::e_circle);
44
+ }
45
+
46
+ void b2ChainAndCircleContact::Evaluate(b2Manifold* manifold, const b2Transform& xfA, const b2Transform& xfB)
47
+ {
48
+ b2ChainShape* chain = (b2ChainShape*)m_fixtureA->GetShape();
49
+ b2EdgeShape edge;
50
+ chain->GetChildEdge(&edge, m_indexA);
51
+ b2CollideEdgeAndCircle( manifold, &edge, xfA,
52
+ (b2CircleShape*)m_fixtureB->GetShape(), xfB);
53
+ }
@@ -0,0 +1,39 @@
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_CHAIN_AND_CIRCLE_CONTACT_H
20
+ #define B2_CHAIN_AND_CIRCLE_CONTACT_H
21
+
22
+ #include <Box2D/Dynamics/Contacts/b2Contact.h>
23
+
24
+ class b2BlockAllocator;
25
+
26
+ class b2ChainAndCircleContact : public b2Contact
27
+ {
28
+ public:
29
+ static b2Contact* Create( b2Fixture* fixtureA, int32 indexA,
30
+ b2Fixture* fixtureB, int32 indexB, b2BlockAllocator* allocator);
31
+ static void Destroy(b2Contact* contact, b2BlockAllocator* allocator);
32
+
33
+ b2ChainAndCircleContact(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB);
34
+ ~b2ChainAndCircleContact() {}
35
+
36
+ void Evaluate(b2Manifold* manifold, const b2Transform& xfA, const b2Transform& xfB);
37
+ };
38
+
39
+ #endif
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright (c) 2006-2010 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/Contacts/b2ChainAndPolygonContact.h>
20
+ #include <Box2D/Common/b2BlockAllocator.h>
21
+ #include <Box2D/Dynamics/b2Fixture.h>
22
+ #include <Box2D/Collision/Shapes/b2ChainShape.h>
23
+ #include <Box2D/Collision/Shapes/b2EdgeShape.h>
24
+
25
+ #include <new>
26
+
27
+ b2Contact* b2ChainAndPolygonContact::Create(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB, b2BlockAllocator* allocator)
28
+ {
29
+ void* mem = allocator->Allocate(sizeof(b2ChainAndPolygonContact));
30
+ return new (mem) b2ChainAndPolygonContact(fixtureA, indexA, fixtureB, indexB);
31
+ }
32
+
33
+ void b2ChainAndPolygonContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator)
34
+ {
35
+ ((b2ChainAndPolygonContact*)contact)->~b2ChainAndPolygonContact();
36
+ allocator->Free(contact, sizeof(b2ChainAndPolygonContact));
37
+ }
38
+
39
+ b2ChainAndPolygonContact::b2ChainAndPolygonContact(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB)
40
+ : b2Contact(fixtureA, indexA, fixtureB, indexB)
41
+ {
42
+ b2Assert(m_fixtureA->GetType() == b2Shape::e_chain);
43
+ b2Assert(m_fixtureB->GetType() == b2Shape::e_polygon);
44
+ }
45
+
46
+ void b2ChainAndPolygonContact::Evaluate(b2Manifold* manifold, const b2Transform& xfA, const b2Transform& xfB)
47
+ {
48
+ b2ChainShape* chain = (b2ChainShape*)m_fixtureA->GetShape();
49
+ b2EdgeShape edge;
50
+ chain->GetChildEdge(&edge, m_indexA);
51
+ b2CollideEdgeAndPolygon( manifold, &edge, xfA,
52
+ (b2PolygonShape*)m_fixtureB->GetShape(), xfB);
53
+ }
@@ -0,0 +1,39 @@
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_CHAIN_AND_POLYGON_CONTACT_H
20
+ #define B2_CHAIN_AND_POLYGON_CONTACT_H
21
+
22
+ #include <Box2D/Dynamics/Contacts/b2Contact.h>
23
+
24
+ class b2BlockAllocator;
25
+
26
+ class b2ChainAndPolygonContact : public b2Contact
27
+ {
28
+ public:
29
+ static b2Contact* Create( b2Fixture* fixtureA, int32 indexA,
30
+ b2Fixture* fixtureB, int32 indexB, b2BlockAllocator* allocator);
31
+ static void Destroy(b2Contact* contact, b2BlockAllocator* allocator);
32
+
33
+ b2ChainAndPolygonContact(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB);
34
+ ~b2ChainAndPolygonContact() {}
35
+
36
+ void Evaluate(b2Manifold* manifold, const b2Transform& xfA, const b2Transform& xfB);
37
+ };
38
+
39
+ #endif