Paddle.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. "atomic component";
  2. var inspectorFields = {
  3. keyboard: false
  4. };
  5. var PADDLE_SPEED = 0.03;
  6. //A Paddle component
  7. exports.component = function(self) {
  8. self.start = function() {
  9. //define node name
  10. self.node.name = "Paddle";
  11. self.rigidBody = self.getComponent("RigidBody2D");
  12. self.createStartBall();
  13. self.subscribeToEvent(Atomic.ScriptEvent("CreateNewBall", function(_) {
  14. self.createStartBall();
  15. self.started = false;
  16. }));
  17. self.subscribeToEvent(Atomic.ScriptEvent("MultiGesture", function(event) {
  18. if(event.numFingers >= 2 && !self.started) {
  19. self.runBall();
  20. }
  21. }));
  22. self.zoom = self.node.scene.getMainCamera().zoom;
  23. self.node.position2D = [self.node.position2D[0], -Atomic.graphics.height/2.5*Atomic.PIXEL_SIZE/self.zoom];
  24. };
  25. self.createStartBall = function() {
  26. //create startBall prefab
  27. self.startBall = self.scene.createChildPrefab("Ball", "Prefabs/Ball.prefab");
  28. //move the ball off screen, because we will change its position later
  29. self.startBall.position2D = [-100, -100];
  30. //also get a Ball component
  31. self.startBallComponent = self.startBall.getJSComponent("Ball");
  32. };
  33. self.runBall = function() {
  34. //get rigidBody component of ours ball
  35. var body = self.startBall.getComponent("RigidBody2D");
  36. //let's run our ball!
  37. body.applyForceToCenter([20/self.zoom + Math.random(), 20/self.zoom + Math.random()], true);
  38. self.startBallComponent.started = true;
  39. self.started = true;
  40. };
  41. self.update = function(delta) {
  42. //if we haven't ball started
  43. if (!self.started) {
  44. //check mouse button click
  45. if(Atomic.input.getMouseButtonPress(Atomic.MOUSEB_LEFT) || Atomic.input.getKeyDown(Atomic.KEY_SPACE)) {
  46. self.runBall();
  47. }
  48. //if we haven't started yet, move our ball with the paddle
  49. self.startBall.position2D = [self.node.position2D[0], self.node.position2D[1]+64*Atomic.PIXEL_SIZE];
  50. }
  51. if (Atomic.platform == "Android" || Atomic.platform == "iOS") {
  52. //get touches
  53. var numTouches = Atomic.input.getNumTouches();
  54. //we want use only one finger, so return if there's more
  55. if (numTouches != 1) return;
  56. //get the first touch state
  57. var touchState = Atomic.input.getTouch(0);
  58. //get current mouse position, and project screen coordinates to the world coordinates
  59. var pos = Atomic.renderer.getViewport(0).screenToWorldPoint(touchState.position[0], 0, 0);
  60. //set y value to -3
  61. pos[1] = -Atomic.graphics.height/2.5*Atomic.PIXEL_SIZE/self.zoom;
  62. // set paddle position to the calculated one
  63. self.node.position2D = pos;
  64. } else {
  65. if (self.keyboard) {
  66. var pos = self.node.position2D;
  67. if (Atomic.input.getKeyDown(Atomic.KEY_A) || Atomic.input.getKeyDown(Atomic.KEY_LEFT)) {
  68. pos[0] -= PADDLE_SPEED;
  69. self.node.position2D = pos;
  70. // self.rigidBody.setLinearVelocity([-5, 0]);
  71. } else if (Atomic.input.getKeyDown(Atomic.KEY_D) || Atomic.input.getKeyDown(Atomic.KEY_RIGHT)) {
  72. pos[0] += PADDLE_SPEED;
  73. self.node.position2D = pos;
  74. }
  75. } else {
  76. //get current mouse position, and project screen coordinates to the world coordinates
  77. var pos = Atomic.renderer.getViewport(0).screenToWorldPoint(Atomic.input.getMousePosition()[0], 0, 0);
  78. //set y value to -3
  79. pos[1] = -Atomic.graphics.height/2.5*Atomic.PIXEL_SIZE/self.zoom;
  80. // set paddle position to the calculated one
  81. self.node.position2D = pos;
  82. }
  83. }
  84. if(self.node.position2D[0] < -Atomic.graphics.width / 2*Atomic.PIXEL_SIZE/self.zoom) {
  85. self.node.position2D = [-Atomic.graphics.width / 2*Atomic.PIXEL_SIZE/self.zoom, -Atomic.graphics.height/2.5*Atomic.PIXEL_SIZE/self.zoom];
  86. }
  87. if(self.node.position2D[0] > Atomic.graphics.width / 2*Atomic.PIXEL_SIZE/self.zoom) {
  88. self.node.position2D = [Atomic.graphics.width / 2*Atomic.PIXEL_SIZE/self.zoom, -Atomic.graphics.height/2.5*Atomic.PIXEL_SIZE/self.zoom];
  89. }
  90. };
  91. };