Bullet.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. var game = Atomic.game;
  2. var node = self.node;
  3. self.isPlayer = false;
  4. self.init = function(isPlayer, spawnPosition) {
  5. self.isPlayer = isPlayer;
  6. var laserSound = game.getSound(self.isPlayer ? "Sounds/laser01.wav" : "Sounds/laser02.wav");
  7. var sprite2D = node.createComponent("StaticSprite2D");
  8. if (self.isPlayer)
  9. sprite2D.sprite = game.getSprite2D("Sprites/blue_beam.png");
  10. else
  11. sprite2D.sprite = game.getSprite2D("Sprites/green_beam.png");
  12. sprite2D.blendMode = Atomic.BLEND_ADDALPHA;
  13. self.soundSource = node.createComponent("SoundSource");
  14. self.soundSource.soundType = Atomic.SOUND_EFFECT;
  15. self.soundSource.gain = 0.75;
  16. self.soundSource.play(laserSound);
  17. node.position2D = spawnPosition;
  18. if (!self.isPlayer) {
  19. node.roll(180);
  20. }
  21. }
  22. function start() {
  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. enemy = null;
  52. Atomic.getVM().gC();
  53. game.dumpMetrics();
  54. return true;
  55. }
  56. }
  57. if (SpaceGame.capitalShip) {
  58. var epos = SpaceGame.capitalShip.node.worldPosition2D;
  59. if (Math.abs(epos[0] - bpos[0]) < 0.75 &&
  60. Math.abs(epos[1] - bpos[1]) < 0.75) {
  61. SpaceGame.capitalShip.onHit(bpos);
  62. return true;
  63. }
  64. }
  65. }
  66. function update(timeStep) {
  67. if (!SpaceGame)
  68. {
  69. Atomic.destroy(node);
  70. return;
  71. }
  72. var speed = self.isPlayer ? 8 : 5;
  73. speed *= timeStep;
  74. node.translate2D([0, speed]);
  75. if (self.isPlayer) {
  76. if (updatePlayerBullet()) {
  77. Atomic.destroy(node);
  78. }
  79. } else {
  80. if (updateEnemyBullet()) {
  81. Atomic.destroy(node);
  82. }
  83. }
  84. }