Code in frame 1 layer 1

init();

function init(){
  gun.dir = 0;
  gun.charge = 0;
  bullet.dir = 0;
  bullet.speed = 0;
  gravity = 1;

}

_root.onEnterFrame = function(){
  followMouse();
  move(bullet);
} // end enterFrame

function followMouse(){
  //calculate gun's direction based on it's relationship to
  //the mouse
  
  dx = _root._xmouse - gun._x;
  dy = _root._ymouse - gun._y;
  radians = Math.atan(dy/dx);
  degrees = radians * 180 / Math.PI;
  degrees += 90;
  if (dx <0) {
    degrees -=180;
  } // end if
  gun.dir = degrees;
  gun._rotation = degrees;
  

  //charge is distance from gun to mouse divided by 10
  distance = Math.sqrt(dx*dx + dy*dy);
  gun.charge = distance / 10;

} // end followMouse

_root.onMouseUp = function(){
    //move the bullet
    bullet._x = gun._x;
    bullet._y = gun._y;

    bullet.dir = gun.dir;
    bullet.speed = gun.charge;
    turn(bullet);
} // end mouseUp

function turn(sprite){
  //use vector projection to get DX and DY

  //offset the angle
  degrees = sprite.dir -90;

  //convert to radians
  radians = degrees / 180 * Math.PI;

  //get DX and DY (normalized: length is one)
  sprite.dx = Math.cos(radians);
  sprite.dy = Math.sin(radians);

  //compensate for speed
  sprite.dx *= sprite.speed;
  sprite.dy *= sprite.speed;
} // end turn;  

function move(sprite){
  //moves an object.  Kills it if it moves off stage

  sprite._x += sprite.dx;
  sprite._y += sprite.dy;

  if ((sprite._x > Stage.width) ||
      (sprite._x < 0) ||
      (sprite._y > Stage.height) ||
      (sprite._y < 0)){
    //stop sprite and move it off stage
    sprite._x = -100;
    sprite._y = -100;
    sprite._speed = 0;
  } //end if

  //incorporate gravity
  sprite.dy += gravity;
} // end move