staticedges.bmx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. SuperStrict
  2. Framework Physics.Box2d
  3. Import SDL.SDLRenderMax2D
  4. Import BRL.Random
  5. Import "test.bmx"
  6. Graphics 800,600, 0
  7. SetBlend alphablend
  8. Run(New StaticEdges.Create(), New TSettings)
  9. Type StaticEdges Extends Test
  10. Method Create:StaticEdges()
  11. SeedRnd(MilliSecs())
  12. Init(12, 12)
  13. Local ground:b2Body
  14. Local sd:b2PolygonDef = New b2PolygonDef
  15. sd.SetAsBox(50.0, 10.0)
  16. Local bd:b2BodyDef = New b2BodyDef
  17. bd.SetPosition(New b2Vec2.Create(0.0, -10.0))
  18. ground = m_world.CreateBody(bd)
  19. ground.CreateShape(sd)
  20. '
  21. Local sd1:b2CircleDef = New b2CircleDef
  22. sd1.SetRadius(0.5)
  23. sd1.SetLocalPosition(Vec2(-0.5, 0.5))
  24. sd1.SetDensity(2.0)
  25. Local sd2:b2CircleDef = New b2CircleDef
  26. sd2.SetRadius(0.5)
  27. sd2.SetLocalPosition(Vec2(0.5, 0.5))
  28. sd2.SetDensity(0.0) ' massless
  29. For Local i:Int = 0 Until 10
  30. Local x:Float = Rnd(-0.1, 0.1)
  31. Local bd:b2BodyDef = New b2BodyDef
  32. bd.SetPositionXY(x + 5.0, 1.05 + 2.5 * i)
  33. bd.SetAngle(Rand(-180, 180))
  34. Local body:b2Body = m_world.CreateBody(bd)
  35. body.CreateShape(sd1)
  36. body.CreateShape(sd2)
  37. body.SetMassFromShapes()
  38. Next
  39. '
  40. Local pd1:b2PolygonDef = New b2PolygonDef
  41. pd1.SetAsBox(0.25, 0.5)
  42. pd1.SetDensity(2.0)
  43. Local pd2:b2PolygonDef = New b2PolygonDef
  44. pd2.SetAsOrientedBox(0.25, 0.5, Vec2(0.0, -0.5), 90)
  45. pd2.SetDensity(2.0)
  46. For Local i:Int = 0 Until 10
  47. Local x:Float = Rnd(-0.1, 0.1)
  48. Local bd:b2BodyDef = New b2BodyDef
  49. bd.SetPositionXY(x - 5.0, 1.05 + 2.5 * i)
  50. bd.SetAngle(Rand(-180, 180))
  51. Local body:b2Body = m_world.CreateBody(bd)
  52. body.CreateShape(pd1)
  53. body.CreateShape(pd2)
  54. body.SetMassFromShapes()
  55. Next
  56. '
  57. Local xf1:b2XForm = New b2XForm.Create()
  58. xf1.R.SetAngle(63.43200)
  59. xf1.SetPosition(b2Mul(xf1.R, Vec2(1.0, 0.0)))
  60. pd1 = New b2PolygonDef
  61. Local vertices:b2Vec2[] = New b2Vec2[3]
  62. vertices[0] = b2MulF(xf1, Vec2(-1.0, 0.0))
  63. vertices[1] = b2MulF(xf1, Vec2(1.0, 0.0))
  64. vertices[2] = b2MulF(xf1, Vec2(0.0, 0.5))
  65. pd1.SetVertices(vertices)
  66. pd1.SetDensity(2.0)
  67. Local xf2:b2XForm = New b2XForm.Create()
  68. xf2.R.SetAngle(63.43200)
  69. xf2.SetPosition(b2Mul(xf2.R, Vec2(-1.0, 0.0)))
  70. pd2 = New b2PolygonDef
  71. vertices[0] = b2MulF(xf2, Vec2(-1.0, 0.0))
  72. vertices[1] = b2MulF(xf2, Vec2(1.0, 0.0))
  73. vertices[2] = b2MulF(xf2, Vec2(0.0, 0.5))
  74. pd2.SetVertices(vertices)
  75. pd2.SetDensity(2.0)
  76. For Local i:Int = 0 Until 10
  77. Local x:Float = Rnd(-0.1, 0.1)
  78. Local bd:b2BodyDef = New b2BodyDef
  79. bd.SetPositionXY(x, 2.05 + 2.5 * i)
  80. bd.SetAngle(0.0)
  81. Local body:b2Body = m_world.CreateBody(bd)
  82. body.CreateShape(pd1)
  83. body.CreateShape(pd2)
  84. body.SetMassFromShapes()
  85. Next
  86. '
  87. Local sd_bottom:b2PolygonDef = New b2PolygonDef
  88. sd_bottom.SetAsBox( 1.5, 0.15 )
  89. sd_bottom.SetDensity(4.0)
  90. Local sd_left:b2PolygonDef = New b2PolygonDef
  91. sd_left.SetAsOrientedBox(0.15, 2.7, Vec2(-1.45, 2.35), 11.4591559)
  92. sd_left.SetDensity(4.0)
  93. Local sd_right:b2PolygonDef = New b2PolygonDef
  94. sd_right.SetAsOrientedBox(0.15, 2.7, Vec2(1.45, 2.35), -11.4591559)
  95. sd_right.SetDensity(4.0)
  96. bd = New b2BodyDef
  97. bd.SetPositionXY( 0.0, 2.0 )
  98. Local body:b2Body = m_world.CreateBody(bd)
  99. body.CreateShape(sd_bottom)
  100. body.CreateShape(sd_left)
  101. body.CreateShape(sd_right)
  102. body.SetMassFromShapes()
  103. Local loop1:Float[] = [ ..
  104. 0.063134534, 8.3695248, ..
  105. 0.94701801, 9.3165428, ..
  106. 0.0, 9.0640047, ..
  107. -0.12626907, 10.326695, ..
  108. 1.4520943, 11.77879, ..
  109. 2.2728432, 10.137292, ..
  110. 2.3991123, 11.147444, ..
  111. 3.5986685, 10.958041, ..
  112. 3.9143411, 7.3593722, ..
  113. 4.1668793, 9.4428119, ..
  114. 5.4295699, 9.3165428, ..
  115. 6.2503189, 8.3063903, ..
  116. 6.6922606, 10.137292, ..
  117. 4.9876282, 9.8216191, ..
  118. 4.7350901, 10.958041, ..
  119. 7.2604714, 11.652521, ..
  120. 10.732871, 11.147444, ..
  121. 10.480333, 10.642368, ..
  122. 10.732871, 9.8216191, ..
  123. 11.55362, 9.4428119, ..
  124. 12.374369, 9.3796773, ..
  125. 13.005714, 9.8216191, ..
  126. 13.195118, 10.38983, ..
  127. 13.005714, 10.768637, ..
  128. 12.626907, 10.894906, ..
  129. 12.753176, 11.526252, ..
  130. 13.573925, 11.715655, ..
  131. 14.836616, 11.399982, ..
  132. 16.351844, 10.768637, ..
  133. 17.867073, 11.399982, ..
  134. 17.803939, 10.263561, ..
  135. 17.361997, 8.3063903, ..
  136. 17.803939, 8.1801212, ..
  137. 18.056477, 9.5059464, ..
  138. 18.182746, 11.336848, ..
  139. 18.561553, 11.210579, ..
  140. 18.561553, 9.6322155, ..
  141. 18.561553, 7.7381795, ..
  142. 18.687822, 5.5284708, ..
  143. 19.382302, 5.6547398, ..
  144. 19.066629, 8.1801212, ..
  145. 19.003495, 10.263561, ..
  146. 19.066629, 11.463117, ..
  147. 19.887378, 11.841924, ..
  148. 20.708127, 11.273713, ..
  149. 21.0238, 10.011023, ..
  150. 20.708127, 7.2962377, ..
  151. 21.086934, 6.2860852, ..
  152. 21.150069, 3.7607038, ..
  153. 20.392455, 2.5611476, ..
  154. 18.624688, 2.5611476, ..
  155. 20.771262, 2.1192059, ..
  156. 20.771262, 0.22516988, ..
  157. 18.624688, -0.2799064, ..
  158. 13.826463, 0.16203534, ..
  159. 14.015867, 1.7403987, ..
  160. 13.195118, 2.1823404, ..
  161. 12.626907, 1.5509951, ..
  162. 12.879445, 0.85651522, ..
  163. 12.626907, 0.35143895, ..
  164. 10.543467, 1.298457, ..
  165. 11.490485, 3.9501074, ..
  166. 13.889598, 3.6344347, ..
  167. 13.889598, 2.9399549, ..
  168. 14.584077, 3.8869729, ..
  169. 11.932427, 5.2127981, ..
  170. 9.7227183, 4.0132419, ..
  171. 10.796005, 3.5081657, ..
  172. 9.7858528, 3.2556275, ..
  173. 10.796005, 2.4980131, ..
  174. 7.9549513, 1.7403987, ..
  175. 9.6595837, 1.424726, ..
  176. 9.217642, 0.66711162, ..
  177. 8.270624, -0.090502792, ..
  178. 7.0079333, 0.85651522, ..
  179. 6.1240498, -0.15363733, ..
  180. 6.1240498, 3.192493, ..
  181. 5.6821081, 2.4348786, ..
  182. 4.9876282, 2.1192059, ..
  183. 4.1037447, 1.8666678, ..
  184. 3.0304576, 1.8666678, ..
  185. 2.0834396, 2.245475, ..
  186. 1.6414979, 2.6242822, ..
  187. 1.3258252, 3.5081657, ..
  188. 1.2626907, 0.47770802, ..
  189. 0.63134534, 0.035766276, ..
  190. 0.063134534, 0.98278429 ..
  191. ]
  192. Local loop2:Float[] = [ ..
  193. 8.270624, 6.1598161, ..
  194. 8.270624, 5.3390672, ..
  195. 8.7757003, 5.086529, ..
  196. 9.4701801, 5.5284708, ..
  197. 9.217642, 6.033547, ..
  198. 8.7757003, 6.4123542 ..
  199. ]
  200. Local b2Loop1:b2Vec2[] = New b2Vec2[87]
  201. Local b2Loop2:b2Vec2[] = New b2Vec2[6]
  202. For Local i:Int = 86 To 0 Step - 1
  203. b2Loop1[86 - i] = Vec2(loop1[i*2] + 10.0, loop1[i*2 + 1] + 1.0)
  204. Next
  205. For Local i:Int = 0 Until 6
  206. b2Loop2[i] = Vec2(loop2[i*2], loop2[i*2 + 1])
  207. Next
  208. bd = New b2BodyDef
  209. bd.SetPositionXY( 0.0, 0.0 );
  210. body = m_world.CreateBody(bd)
  211. Local weight:b2CircleDef = New b2CircleDef
  212. weight.SetFilterMaskBits(0)
  213. weight.SetDensity(4.0)
  214. weight.SetRadius(0.5)
  215. weight.SetLocalPosition(Vec2(8.9, 5.75))
  216. body.CreateShape(weight)
  217. Local edgeDef:b2EdgeChainDef = New b2EdgeChainDef
  218. edgeDef.SetVertices(b2Loop2)
  219. body.CreateShape(edgeDef)
  220. body.SetMassFromShapes()
  221. body = m_world.CreateBody(bd)
  222. weight.SetRadius(5.0)
  223. weight.SetLocalPosition(Vec2(20.5, 7.0))
  224. body.CreateShape(weight)
  225. edgeDef.SetVertices(b2Loop1)
  226. body.CreateShape(edgeDef)
  227. Return Self
  228. End Method
  229. End Type