/* global SpaceGame */
'atomic component';

exports.component = function(self) {

  var game = Atomic.game;
  var node = self.node;

  self.isPlayer = false;

  self.init = function(isPlayer, spawnPosition) {

    self.isPlayer = isPlayer;

    var laserSound = game.getSound(self.isPlayer ? "Sounds/laser01.wav" : "Sounds/laser02.wav");
    var sprite2D = node.createComponent("StaticSprite2D");

    if (self.isPlayer)
      sprite2D.sprite = game.getSprite2D("Sprites/blue_beam.png");
    else
      sprite2D.sprite = game.getSprite2D("Sprites/green_beam.png");

    sprite2D.blendMode = Atomic.BlendMode.BLEND_ADDALPHA;

    self.soundSource = node.createComponent("SoundSource");
    self.soundSource.soundType = Atomic.SOUND_EFFECT;
    self.soundSource.gain = 0.75;
    self.soundSource.play(laserSound);

    node.position2D = spawnPosition;

    if (!self.isPlayer) {
      node.roll(180);
    }

  };

  function updateEnemyBullet() {

    var bpos = node.position2D;

    // off the bottom of the screen
    if (bpos[1] < -SpaceGame.halfHeight) {
      return true;
    }

    if (SpaceGame.player) {

      var epos = SpaceGame.player.node.worldPosition2D;

      if (Math.abs(epos[0] - bpos[0]) < 0.25 &&
        Math.abs(epos[1] - bpos[1]) < 0.25) {

        SpaceGame.player.onHit();

        return true;
      }

    }

  }

  function updatePlayerBullet() {

    var bpos = node.position2D;

    // off the top of the screen
    if (bpos[1] > SpaceGame.halfHeight) {
      return true;
    }

    for (var i = 0; i < SpaceGame.enemies.length; i++) {

      var enemy = SpaceGame.enemies[i];

      var epos = enemy.node.worldPosition2D;

      if (Math.abs(epos[0] - bpos[0]) < 0.25 &&
        Math.abs(epos[1] - bpos[1]) < 0.25) {

        enemy.onHit();
        return true;
      }

    }

    if (SpaceGame.capitalShip) {

      var epos = SpaceGame.capitalShip.node.worldPosition2D;

      if (Math.abs(epos[0] - bpos[0]) < 0.75 &&
        Math.abs(epos[1] - bpos[1]) < 0.75) {

        SpaceGame.capitalShip.onHit(bpos);

        return true;
      }

    }

  }

  self.update = function(timeStep) {

    if (!SpaceGame) {
      Atomic.destroy(node);
      return;
    }

    var speed = self.isPlayer ? 8 : 5;
    speed *= timeStep;
    node.translate2D([0, speed]);

    if (self.isPlayer) {
      if (updatePlayerBullet()) {
        Atomic.destroy(node);
      }
    } else {
      if (updateEnemyBullet()) {
        Atomic.destroy(node);
      }
    }

  };

};
