PageRenderTime 53ms CodeModel.GetById 7ms RepoModel.GetById 1ms app.codeStats 0ms

/Main.as

http://jelloas3.googlecode.com/
ActionScript | 284 lines | 167 code | 44 blank | 73 comment | 13 complexity | 28c2619e73916ad95d5ae8c18a00cf68 MD5 | raw file
  1. package
  2. {
  3. import flash.display.Sprite;
  4. import flash.events.*;
  5. import JelloAS3.*;
  6. import flash.utils.setInterval;
  7. /**
  8. * ...
  9. * @author Luiz
  10. */
  11. public class Main extends Sprite
  12. {
  13. public var mWorld:World = new World();
  14. public var RenderCanvas:Sprite;
  15. public var showDebug:Boolean = true;
  16. public var frames:Number = 0;
  17. public function Main():void
  18. {
  19. if (stage) init();
  20. else addEventListener(Event.ADDED_TO_STAGE, init);
  21. }
  22. private function init(e:Event = null):void
  23. {
  24. removeEventListener(Event.ADDED_TO_STAGE, init);
  25. // entry point
  26. addEventListener(Event.ENTER_FRAME, loop);
  27. stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick);
  28. stage.addEventListener(MouseEvent.MOUSE_UP, mouseup);
  29. RenderCanvas = new Sprite();
  30. addChild(RenderCanvas);
  31. var groundShape:ClosedShape = new ClosedShape();
  32. groundShape.begin();
  33. groundShape.addVertex(new Vector2(-20, -2));
  34. groundShape.addVertex(new Vector2(-20, 2));
  35. groundShape.addVertex(new Vector2(20, 2));
  36. groundShape.addVertex(new Vector2(20, -2));
  37. groundShape.finish();
  38. var groundBody:Body = new Body(mWorld, groundShape, Utils.fillArray(Number.POSITIVE_INFINITY, groundShape.Vertices.length), new Vector2(0, -5), 0, Vector2.One, false);
  39. mWorld.addBody(groundBody);
  40. var shape:ClosedShape = new ClosedShape();
  41. shape.begin();
  42. shape.addVertex(new Vector2(-1.5, 2.0));
  43. shape.addVertex(new Vector2(-0.5, 2.0));
  44. shape.addVertex(new Vector2(0.5, 2.0));
  45. shape.addVertex(new Vector2(1.5, 2.0));
  46. shape.addVertex(new Vector2(1.5, 1.0));
  47. shape.addVertex(new Vector2(0.5, 1.0));
  48. shape.addVertex(new Vector2(0.5, -1.0));
  49. shape.addVertex(new Vector2(1.5, -1.0));
  50. shape.addVertex(new Vector2(1.5, -2.0));
  51. shape.addVertex(new Vector2(0.5, -2.0));
  52. shape.addVertex(new Vector2(-0.5, -2.0));
  53. shape.addVertex(new Vector2(-1.5, -2.0));
  54. shape.addVertex(new Vector2(-1.5, -1.0));
  55. shape.addVertex(new Vector2(-0.5, -1.0));
  56. shape.addVertex(new Vector2(-0.5, 1.0));
  57. shape.addVertex(new Vector2(-1.5, 1.0));
  58. shape.finish();
  59. // draggablespringbody is an inherited version of SpringBody that includes polygons for visualization, and the
  60. // ability to drag the body around the screen with the cursor.
  61. for (var x:int = -8; x <= 8; x += 4)
  62. {
  63. var body:DraggableSpringBody = new DraggableSpringBody(mWorld, shape, 1, 150.0, 5.0, 300.0, 15.0, new Vector2(x, 0), 0.0, Vector2.One.clone());
  64. body.addInternalSpring(0, 14, 300.0, 10.0);
  65. body.addInternalSpring(1, 14, 300.0, 10.0);
  66. body.addInternalSpring(1, 15, 300.0, 10.0);
  67. body.addInternalSpring(1, 5, 300.0, 10.0);
  68. body.addInternalSpring(2, 14, 300.0, 10.0);
  69. body.addInternalSpring(2, 5, 300.0, 10.0);
  70. body.addInternalSpring(1, 5, 300.0, 10.0);
  71. body.addInternalSpring(14, 5, 300.0, 10.0);
  72. body.addInternalSpring(2, 4, 300.0, 10.0);
  73. body.addInternalSpring(3, 5, 300.0, 10.0);
  74. body.addInternalSpring(14, 6, 300.0, 10.0);
  75. body.addInternalSpring(5, 13, 300.0, 10.0);
  76. body.addInternalSpring(13, 6, 300.0, 10.0);
  77. body.addInternalSpring(12, 10, 300.0, 10.0);
  78. body.addInternalSpring(13, 11, 300.0, 10.0);
  79. body.addInternalSpring(13, 10, 300.0, 10.0);
  80. body.addInternalSpring(13, 9, 300.0, 10.0);
  81. body.addInternalSpring(6, 10, 300.0, 10.0);
  82. body.addInternalSpring(6, 9, 300.0, 10.0);
  83. body.addInternalSpring(6, 8, 300.0, 10.0);
  84. body.addInternalSpring(7, 9, 300.0, 10.0);
  85. // polygons!
  86. body.addTriangle(0, 15, 1);
  87. body.addTriangle(1, 15, 14);
  88. body.addTriangle(1, 14, 5);
  89. body.addTriangle(1, 5, 2);
  90. body.addTriangle(2, 5, 4);
  91. body.addTriangle(2, 4, 3);
  92. body.addTriangle(14, 13, 6);
  93. body.addTriangle(14, 6, 5);
  94. body.addTriangle(12, 11, 10);
  95. body.addTriangle(12, 10, 13);
  96. body.addTriangle(13, 10, 9);
  97. body.addTriangle(13, 9, 6);
  98. body.addTriangle(6, 9, 8);
  99. body.addTriangle(6, 8, 7);
  100. body.finalizeTriangles(0x00FF7F, 0x000080);
  101. // mSpringBodies.(body);
  102. }
  103. /*var ball:ClosedShape = new ClosedShape();
  104. ball.begin();
  105. for (var i:int = 0; i < 360; i += 20)
  106. {
  107. ball.addVertex(new Vector2(Math.cos(-i * (Math.PI / 180)), Math.sin(-i * (Math.PI / 180))));
  108. }
  109. ball.finish();
  110. for (var x:int = -10; x <= 10; x+=5)
  111. {
  112. var pb:DraggablePressureBody = new DraggablePressureBody(mWorld, ball, 1.0, 40.0, 10.0, 1.0, 300.0, 20.0, new Vector2(x, 7), 0, Vector2.One.clone());
  113. pb.addTriangle(0, 10, 9);
  114. pb.addTriangle(0, 9, 1);
  115. pb.addTriangle(1, 9, 8);
  116. pb.addTriangle(1, 8, 2);
  117. pb.addTriangle(2, 8, 7);
  118. pb.addTriangle(2, 7, 3);
  119. pb.addTriangle(3, 7, 6);
  120. pb.addTriangle(3, 6, 4);
  121. pb.addTriangle(4, 6, 5);
  122. pb.addTriangle(17, 10, 0);
  123. pb.addTriangle(17, 11, 10);
  124. pb.addTriangle(16, 11, 17);
  125. pb.addTriangle(16, 12, 11);
  126. pb.addTriangle(15, 12, 16);
  127. pb.addTriangle(15, 13, 12);
  128. pb.addTriangle(14, 12, 15);
  129. pb.addTriangle(14, 13, 12);
  130. // pb.finalizeTriangles((x==-10) ? Color.Teal : Color.Maroon);
  131. pb.finalizeTriangles(0x000000, 0x000000);
  132. // mPressureBodies.Add(pb);
  133. }*/
  134. setInterval(fpsCheck, 1000);
  135. }
  136. function fpsCheck() {
  137. fpsText.text = "" + frames;
  138. frames = 0;
  139. }
  140. public function mouseClick(e:Event) : void
  141. {
  142. // cursorPos = new Vector3(Mouse.GetState().X - Window.ClientBounds.Width / 2, -Mouse.GetState().Y + Window.ClientBounds.Height / 2, 0) * 0.038;
  143. var s:Vector2 = RenderingSettings.Scale;
  144. var p:Vector2 = RenderingSettings.Offset;
  145. // var cursorPos = new Vector2(mouseX - p.X, mouseY - p.Y);
  146. var cursorPos = new Vector2((mouseX - p.X) / s.X, (mouseY - p.Y) / s.Y);
  147. if (dragBody == null)
  148. {
  149. var body:Array = [0];
  150. var dragp:Array = [0];
  151. mWorld.getClosestPointMass(cursorPos, body, dragp);
  152. dragPoint = dragp[0];
  153. dragBody = mWorld.getBody(body[0]);
  154. }
  155. mouseDown = true;
  156. }
  157. public function mouseup(e:Event) : void
  158. {
  159. mouseDown = false;
  160. dragBody = null;
  161. }
  162. public function numbOfPairs(numb:int, wholeNumb:int) : int
  163. {
  164. var i:int = 0;
  165. while (wholeNumb > numb)
  166. {
  167. wholeNumb -= numb;
  168. i++;
  169. }
  170. return i;
  171. }
  172. public function loop(e:Event) : void
  173. {
  174. frames ++;
  175. var s:Vector2 = RenderingSettings.Scale;
  176. var p:Vector2 = RenderingSettings.Offset;
  177. var cursorPos = new Vector2((mouseX - p.X) / s.X, (mouseY - p.Y) / s.Y);
  178. for (var i:int = 0; i < 3; i++)
  179. {
  180. mWorld.update(1.0 / 200);
  181. if (dragBody != null)
  182. {
  183. var pm:PointMass = dragBody.getPointMass(dragPoint);
  184. if (dragBody is DraggableSpringBody)
  185. DraggableSpringBody(dragBody).setDragForce(VectorTools.calculateSpringForceRet(pm.Position, pm.Velocity, cursorPos, Vector2.Zero, 0.0, 100.0, 10.0), dragPoint);
  186. else if (dragBody is DraggablePressureBody)
  187. DraggablePressureBody(dragBody).setDragForce(VectorTools.calculateSpringForceRet(pm.Position, pm.Velocity, cursorPos, Vector2.Zero, 0.0, 100.0, 10.0), dragPoint);
  188. }
  189. else
  190. {
  191. dragBody = null;
  192. dragPoint = -1;
  193. }
  194. // dragging!
  195. /*if (ks.IsKeyDown(Keys.S) || Mouse.GetState().LeftButton == ButtonState.Pressed)
  196. {
  197. if (dragBody != null)
  198. {
  199. PointMass pm = dragBody.getPointMass(dragPoint);
  200. if (dragBody)
  201. ((DraggableSpringBody)dragBody).setDragForce(JelloPhysics.VectorTools.calculateSpringForce(pm.Position, pm.Velocity, mCursorPos, Vector2.Zero, 0.0, 100.0, 10.0), dragPoint);
  202. else if (dragBody.GetType().Name == "DraggablePressureBody")
  203. ((DraggablePressureBody)dragBody).setDragForce(JelloPhysics.VectorTools.calculateSpringForce(pm.Position, pm.Velocity, mCursorPos, Vector2.Zero, 0.0, 100.0, 10.0), dragPoint);
  204. }
  205. }
  206. else
  207. {
  208. dragBody = null;
  209. dragPoint = -1;
  210. }*/
  211. }
  212. RenderCanvas.graphics.clear();
  213. if (!showDebug)
  214. {
  215. /*for (i = 0; i < mSpringBodies.Count; i++)
  216. mSpringBodies[i].drawMe(graphics.GraphicsDevice, lineEffect);
  217. for (i = 0; i < mPressureBodies.Count; i++)
  218. mPressureBodies[i].drawMe(graphics.GraphicsDevice, lineEffect);
  219. for (i = 0; i < mStaticBodies.Count; i++)
  220. mStaticBodies[i].debugDrawMe(graphics.GraphicsDevice, lineEffect);*/
  221. }
  222. else
  223. {
  224. // draw all the bodies in debug mode, to confirm physics.
  225. mWorld.debugDrawMe(RenderCanvas.graphics);
  226. mWorld.debugDrawAllBodies(RenderCanvas.graphics, true);
  227. }
  228. }
  229. public var dragBody:Body;
  230. public var mouseDown:Boolean = false;
  231. public var dragPoint:int = 0;
  232. }
  233. }