Bullet.js 2.4 KB

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