Bullet.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /* global SpaceGame */
  2. 'atomic component';
  3. exports.component = function(self) {
  4. var game = Atomic.game;
  5. var node = self.node;
  6. self.isPlayer = false;
  7. self.init = function(isPlayer, spawnPosition) {
  8. self.isPlayer = isPlayer;
  9. var laserSound = game.getSound(self.isPlayer ? "Sounds/laser01.wav" : "Sounds/laser02.wav");
  10. var sprite2D = node.createComponent("StaticSprite2D");
  11. if (self.isPlayer)
  12. sprite2D.sprite = game.getSprite2D("Sprites/blue_beam.png");
  13. else
  14. sprite2D.sprite = game.getSprite2D("Sprites/green_beam.png");
  15. sprite2D.blendMode = Atomic.BlendMode.BLEND_ADDALPHA;
  16. self.soundSource = node.createComponent("SoundSource");
  17. self.soundSource.soundType = Atomic.SOUND_EFFECT;
  18. self.soundSource.gain = 0.75;
  19. self.soundSource.play(laserSound);
  20. node.position2D = spawnPosition;
  21. if (!self.isPlayer) {
  22. node.roll(180);
  23. }
  24. };
  25. function updateEnemyBullet() {
  26. var bpos = node.position2D;
  27. // off the bottom of the screen
  28. if (bpos[1] < -SpaceGame.halfHeight) {
  29. return true;
  30. }
  31. if (SpaceGame.player) {
  32. var epos = SpaceGame.player.node.worldPosition2D;
  33. if (Math.abs(epos[0] - bpos[0]) < 0.25 &&
  34. Math.abs(epos[1] - bpos[1]) < 0.25) {
  35. SpaceGame.player.onHit();
  36. return true;
  37. }
  38. }
  39. }
  40. function updatePlayerBullet() {
  41. var bpos = node.position2D;
  42. // off the top of the screen
  43. if (bpos[1] > SpaceGame.halfHeight) {
  44. return true;
  45. }
  46. for (var i = 0; i < SpaceGame.enemies.length; i++) {
  47. var enemy = SpaceGame.enemies[i];
  48. var epos = enemy.node.worldPosition2D;
  49. if (Math.abs(epos[0] - bpos[0]) < 0.25 &&
  50. Math.abs(epos[1] - bpos[1]) < 0.25) {
  51. enemy.onHit();
  52. return true;
  53. }
  54. }
  55. if (SpaceGame.capitalShip) {
  56. var epos = SpaceGame.capitalShip.node.worldPosition2D;
  57. if (Math.abs(epos[0] - bpos[0]) < 0.75 &&
  58. Math.abs(epos[1] - bpos[1]) < 0.75) {
  59. SpaceGame.capitalShip.onHit(bpos);
  60. return true;
  61. }
  62. }
  63. }
  64. self.update = function(timeStep) {
  65. if (!SpaceGame) {
  66. Atomic.destroy(node);
  67. return;
  68. }
  69. var speed = self.isPlayer ? 8 : 5;
  70. speed *= timeStep;
  71. node.translate2D([0, speed]);
  72. if (self.isPlayer) {
  73. if (updatePlayerBullet()) {
  74. Atomic.destroy(node);
  75. }
  76. } else {
  77. if (updateEnemyBullet()) {
  78. Atomic.destroy(node);
  79. }
  80. }
  81. };
  82. };