Bullet.js 2.4 KB

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