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,259 @@
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/Rope/b2Rope.h>
20
+ #include <Box2D/Common/b2Draw.h>
21
+
22
+ b2Rope::b2Rope()
23
+ {
24
+ m_count = 0;
25
+ m_ps = NULL;
26
+ m_p0s = NULL;
27
+ m_vs = NULL;
28
+ m_ims = NULL;
29
+ m_Ls = NULL;
30
+ m_as = NULL;
31
+ m_gravity.SetZero();
32
+ m_k2 = 1.0f;
33
+ m_k3 = 0.1f;
34
+ }
35
+
36
+ b2Rope::~b2Rope()
37
+ {
38
+ b2Free(m_ps);
39
+ b2Free(m_p0s);
40
+ b2Free(m_vs);
41
+ b2Free(m_ims);
42
+ b2Free(m_Ls);
43
+ b2Free(m_as);
44
+ }
45
+
46
+ void b2Rope::Initialize(const b2RopeDef* def)
47
+ {
48
+ b2Assert(def->count >= 3);
49
+ m_count = def->count;
50
+ m_ps = (b2Vec2*)b2Alloc(m_count * sizeof(b2Vec2));
51
+ m_p0s = (b2Vec2*)b2Alloc(m_count * sizeof(b2Vec2));
52
+ m_vs = (b2Vec2*)b2Alloc(m_count * sizeof(b2Vec2));
53
+ m_ims = (float32*)b2Alloc(m_count * sizeof(float32));
54
+
55
+ for (int32 i = 0; i < m_count; ++i)
56
+ {
57
+ m_ps[i] = def->vertices[i];
58
+ m_p0s[i] = def->vertices[i];
59
+ m_vs[i].SetZero();
60
+
61
+ float32 m = def->masses[i];
62
+ if (m > 0.0f)
63
+ {
64
+ m_ims[i] = 1.0f / m;
65
+ }
66
+ else
67
+ {
68
+ m_ims[i] = 0.0f;
69
+ }
70
+ }
71
+
72
+ int32 count2 = m_count - 1;
73
+ int32 count3 = m_count - 2;
74
+ m_Ls = (float32*)b2Alloc(count2 * sizeof(float32));
75
+ m_as = (float32*)b2Alloc(count3 * sizeof(float32));
76
+
77
+ for (int32 i = 0; i < count2; ++i)
78
+ {
79
+ b2Vec2 p1 = m_ps[i];
80
+ b2Vec2 p2 = m_ps[i+1];
81
+ m_Ls[i] = b2Distance(p1, p2);
82
+ }
83
+
84
+ for (int32 i = 0; i < count3; ++i)
85
+ {
86
+ b2Vec2 p1 = m_ps[i];
87
+ b2Vec2 p2 = m_ps[i + 1];
88
+ b2Vec2 p3 = m_ps[i + 2];
89
+
90
+ b2Vec2 d1 = p2 - p1;
91
+ b2Vec2 d2 = p3 - p2;
92
+
93
+ float32 a = b2Cross(d1, d2);
94
+ float32 b = b2Dot(d1, d2);
95
+
96
+ m_as[i] = b2Atan2(a, b);
97
+ }
98
+
99
+ m_gravity = def->gravity;
100
+ m_damping = def->damping;
101
+ m_k2 = def->k2;
102
+ m_k3 = def->k3;
103
+ }
104
+
105
+ void b2Rope::Step(float32 h, int32 iterations)
106
+ {
107
+ if (h == 0.0)
108
+ {
109
+ return;
110
+ }
111
+
112
+ float32 d = expf(- h * m_damping);
113
+
114
+ for (int32 i = 0; i < m_count; ++i)
115
+ {
116
+ m_p0s[i] = m_ps[i];
117
+ if (m_ims[i] > 0.0f)
118
+ {
119
+ m_vs[i] += h * m_gravity;
120
+ }
121
+ m_vs[i] *= d;
122
+ m_ps[i] += h * m_vs[i];
123
+
124
+ }
125
+
126
+ for (int32 i = 0; i < iterations; ++i)
127
+ {
128
+ SolveC2();
129
+ SolveC3();
130
+ SolveC2();
131
+ }
132
+
133
+ float32 inv_h = 1.0f / h;
134
+ for (int32 i = 0; i < m_count; ++i)
135
+ {
136
+ m_vs[i] = inv_h * (m_ps[i] - m_p0s[i]);
137
+ }
138
+ }
139
+
140
+ void b2Rope::SolveC2()
141
+ {
142
+ int32 count2 = m_count - 1;
143
+
144
+ for (int32 i = 0; i < count2; ++i)
145
+ {
146
+ b2Vec2 p1 = m_ps[i];
147
+ b2Vec2 p2 = m_ps[i + 1];
148
+
149
+ b2Vec2 d = p2 - p1;
150
+ float32 L = d.Normalize();
151
+
152
+ float32 im1 = m_ims[i];
153
+ float32 im2 = m_ims[i + 1];
154
+
155
+ if (im1 + im2 == 0.0f)
156
+ {
157
+ continue;
158
+ }
159
+
160
+ float32 s1 = im1 / (im1 + im2);
161
+ float32 s2 = im2 / (im1 + im2);
162
+
163
+ p1 -= m_k2 * s1 * (m_Ls[i] - L) * d;
164
+ p2 += m_k2 * s2 * (m_Ls[i] - L) * d;
165
+
166
+ m_ps[i] = p1;
167
+ m_ps[i + 1] = p2;
168
+ }
169
+ }
170
+
171
+ void b2Rope::SetAngle(float32 angle)
172
+ {
173
+ int32 count3 = m_count - 2;
174
+ for (int32 i = 0; i < count3; ++i)
175
+ {
176
+ m_as[i] = angle;
177
+ }
178
+ }
179
+
180
+ void b2Rope::SolveC3()
181
+ {
182
+ int32 count3 = m_count - 2;
183
+
184
+ for (int32 i = 0; i < count3; ++i)
185
+ {
186
+ b2Vec2 p1 = m_ps[i];
187
+ b2Vec2 p2 = m_ps[i + 1];
188
+ b2Vec2 p3 = m_ps[i + 2];
189
+
190
+ float32 m1 = m_ims[i];
191
+ float32 m2 = m_ims[i + 1];
192
+ float32 m3 = m_ims[i + 2];
193
+
194
+ b2Vec2 d1 = p2 - p1;
195
+ b2Vec2 d2 = p3 - p2;
196
+
197
+ float32 L1sqr = d1.LengthSquared();
198
+ float32 L2sqr = d2.LengthSquared();
199
+
200
+ if (L1sqr * L2sqr == 0.0f)
201
+ {
202
+ continue;
203
+ }
204
+
205
+ float32 a = b2Cross(d1, d2);
206
+ float32 b = b2Dot(d1, d2);
207
+
208
+ float32 angle = b2Atan2(a, b);
209
+
210
+ b2Vec2 Jd1 = (-1.0f / L1sqr) * d1.Skew();
211
+ b2Vec2 Jd2 = (1.0f / L2sqr) * d2.Skew();
212
+
213
+ b2Vec2 J1 = -Jd1;
214
+ b2Vec2 J2 = Jd1 - Jd2;
215
+ b2Vec2 J3 = Jd2;
216
+
217
+ float32 mass = m1 * b2Dot(J1, J1) + m2 * b2Dot(J2, J2) + m3 * b2Dot(J3, J3);
218
+ if (mass == 0.0f)
219
+ {
220
+ continue;
221
+ }
222
+
223
+ mass = 1.0f / mass;
224
+
225
+ float32 C = angle - m_as[i];
226
+
227
+ while (C > b2_pi)
228
+ {
229
+ angle -= 2 * b2_pi;
230
+ C = angle - m_as[i];
231
+ }
232
+
233
+ while (C < -b2_pi)
234
+ {
235
+ angle += 2.0f * b2_pi;
236
+ C = angle - m_as[i];
237
+ }
238
+
239
+ float32 impulse = - m_k3 * mass * C;
240
+
241
+ p1 += (m1 * impulse) * J1;
242
+ p2 += (m2 * impulse) * J2;
243
+ p3 += (m3 * impulse) * J3;
244
+
245
+ m_ps[i] = p1;
246
+ m_ps[i + 1] = p2;
247
+ m_ps[i + 2] = p3;
248
+ }
249
+ }
250
+
251
+ void b2Rope::Draw(b2Draw* draw) const
252
+ {
253
+ b2Color c(0.4f, 0.5f, 0.7f);
254
+
255
+ for (int32 i = 0; i < m_count - 1; ++i)
256
+ {
257
+ draw->DrawSegment(m_ps[i], m_ps[i+1], c);
258
+ }
259
+ }
@@ -0,0 +1,115 @@
1
+ /*
2
+ * Copyright (c) 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_ROPE_H
20
+ #define B2_ROPE_H
21
+
22
+ #include <Box2D/Common/b2Math.h>
23
+
24
+ class b2Draw;
25
+
26
+ ///
27
+ struct b2RopeDef
28
+ {
29
+ b2RopeDef()
30
+ {
31
+ vertices = NULL;
32
+ count = 0;
33
+ masses = NULL;
34
+ gravity.SetZero();
35
+ damping = 0.1f;
36
+ k2 = 0.9f;
37
+ k3 = 0.1f;
38
+ }
39
+
40
+ ///
41
+ b2Vec2* vertices;
42
+
43
+ ///
44
+ int32 count;
45
+
46
+ ///
47
+ float32* masses;
48
+
49
+ ///
50
+ b2Vec2 gravity;
51
+
52
+ ///
53
+ float32 damping;
54
+
55
+ /// Stretching stiffness
56
+ float32 k2;
57
+
58
+ /// Bending stiffness. Values above 0.5 can make the simulation blow up.
59
+ float32 k3;
60
+ };
61
+
62
+ ///
63
+ class b2Rope
64
+ {
65
+ public:
66
+ b2Rope();
67
+ ~b2Rope();
68
+
69
+ ///
70
+ void Initialize(const b2RopeDef* def);
71
+
72
+ ///
73
+ void Step(float32 timeStep, int32 iterations);
74
+
75
+ ///
76
+ int32 GetVertexCount() const
77
+ {
78
+ return m_count;
79
+ }
80
+
81
+ ///
82
+ const b2Vec2* GetVertices() const
83
+ {
84
+ return m_ps;
85
+ }
86
+
87
+ ///
88
+ void Draw(b2Draw* draw) const;
89
+
90
+ ///
91
+ void SetAngle(float32 angle);
92
+
93
+ private:
94
+
95
+ void SolveC2();
96
+ void SolveC3();
97
+
98
+ int32 m_count;
99
+ b2Vec2* m_ps;
100
+ b2Vec2* m_p0s;
101
+ b2Vec2* m_vs;
102
+
103
+ float32* m_ims;
104
+
105
+ float32* m_Ls;
106
+ float32* m_as;
107
+
108
+ b2Vec2 m_gravity;
109
+ float32 m_damping;
110
+
111
+ float32 m_k2;
112
+ float32 m_k3;
113
+ };
114
+
115
+ #endif
data/src/style.cpp CHANGED
@@ -150,9 +150,9 @@ namespace Reflex
150
150
 
151
151
  typedef StyleValue<StyleLength4> Length4;
152
152
 
153
- typedef StyleValue<Rays::Color> Color;
153
+ typedef StyleValue<Color> Color;
154
154
 
155
- typedef StyleValue<Rays::Image> Image;
155
+ typedef StyleValue<Image> Image;
156
156
 
157
157
  View* owner;
158
158