Player.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /* global SpaceGame */
  2. 'atomic component';
  3. exports.component = function(self) {
  4. var game = Atomic.game;
  5. var input = game.input;
  6. var node = self.node;
  7. self.allowMove = true;
  8. self.allowShoot = true;
  9. self.shootDelta = 0;
  10. self.health = 10;
  11. // joystick support
  12. self.js_fire = false;
  13. self.js_left = false;
  14. self.js_right = false;
  15. if ( Atomic.input.numJoysticks > 0 ) {
  16. var scene = SpaceGame.myscene;
  17. scene.subscribeToEvent("JoystickButtonDown", function(ev) {
  18. if ( ev.Button == Atomic.CONTROLLER_BUTTON_X
  19. || ev.Button == Atomic.CONTROLLER_BUTTON_Y
  20. || ev.Button == Atomic.CONTROLLER_BUTTON_A
  21. || ev.Button == Atomic.CONTROLLER_BUTTON_B
  22. || ev.Button == Atomic.CONTROLLER_BUTTON_LEFTSHOULDER
  23. || ev.Button == Atomic.CONTROLLER_BUTTON_RIGHTSHOULDER )
  24. if (!SpaceGame.gameOver)
  25. self.fire();
  26. if ( ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_LEFT )
  27. if (!SpaceGame.gameOver)
  28. self.moveLeft();
  29. if ( ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_RIGHT )
  30. if (!SpaceGame.gameOver)
  31. self.moveRight();
  32. });
  33. scene.subscribeToEvent("JoystickButtonUp", function(ev) {
  34. if ( ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_LEFT
  35. || ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_RIGHT )
  36. self.moveStop();
  37. });
  38. }
  39. self.onHit = function() {
  40. if ( game.jsid >= 0 ) // has js and not muted
  41. Atomic.input.joystickRumble (game.jsid, 0.75, 250 );
  42. var expNode = SpaceGame.myscene.createChild("Explosion");
  43. var exp = expNode.createJSComponent("Components/Explosion.js", {
  44. spawnPosition: node.worldPosition2D
  45. });
  46. self.health--;
  47. SpaceGame.hud.updateHealth(self.health);
  48. if (self.health == 0) {
  49. SpaceGame.lose();
  50. }
  51. };
  52. function doShooting(timeStep) {
  53. if (self.shootDelta > 0) {
  54. self.shootDelta -= timeStep;
  55. if (self.shootDelta < 0)
  56. self.shootDelta = 0;
  57. return;
  58. }
  59. if (!input.getKeyDown(Atomic.KEY_W)
  60. && !input.getKeyDown(Atomic.KEY_UP)
  61. && !input.getKeyDown(Atomic.KEY_SPACE)
  62. && !self.js_fire )
  63. return;
  64. self.shootDelta = 0.15;
  65. var pos = node.position2D;
  66. pos[1] += .5;
  67. SpaceGame.spawnBullet(pos, true);
  68. self.js_fire = false; // reset js request
  69. }
  70. function moveShip(timeStep) {
  71. var speed = 3.0 * timeStep;
  72. var pos = node.position2D;
  73. var left = false;
  74. var right = false;
  75. if (input.getKeyDown(Atomic.KEY_A) || input.getKeyDown(Atomic.KEY_LEFT) || self.js_left )
  76. pos[0] -= speed;
  77. if (input.getKeyDown(Atomic.KEY_D) || input.getKeyDown(Atomic.KEY_RIGHT) || self.js_right )
  78. pos[0] += speed;
  79. if (pos[0] < -SpaceGame.halfWidth + 2)
  80. pos[0] = -SpaceGame.halfWidth + 2;
  81. if (pos[0] > SpaceGame.halfWidth - 2)
  82. pos[0] = SpaceGame.halfWidth - 2;
  83. node.position2D = pos;
  84. }
  85. self.start = function() {
  86. var spaceSheet = game.getSpriteSheet("Sprites/spacegame_sheet.xml");
  87. var sprite2D = node.createComponent("StaticSprite2D");
  88. sprite2D.sprite = spaceSheet.getSprite("spaceship_mantis");
  89. sprite2D.blendMode = Atomic.BlendMode.BLEND_ALPHA;
  90. node.position2D = [0, -SpaceGame.halfHeight + .65];
  91. };
  92. self.update = function(timeStep) {
  93. if (self.allowShoot)
  94. doShooting(timeStep);
  95. if (self.allowMove)
  96. moveShip(timeStep);
  97. };
  98. self.moveStop = function() {
  99. self.js_right = false; // reset js move requests
  100. self.js_left = false;
  101. }
  102. self.moveLeft = function() {
  103. self.js_left = true;
  104. }
  105. self.moveRight = function() {
  106. self.js_right = true;
  107. }
  108. self.fire = function() {
  109. self.js_fire = true;
  110. }
  111. };