public override void Update(float secondsElapsed)
        {
            //throw new NotImplementedException();
            Vector2 aim = this.Aimpoint;
            Boolean fire = this.Fire;

            if (target == null || target.IsDestroyed)
            {
                target = null;

                List<Ship> ships = new List<Ship>();
                foreach (SmallShip t in this.game.GameObjectCollection.GetMasterList().GetList<SmallShip>())
                {
                    if (Vector2.Distance(t.Position, this.Focus.Position) < 3000)
                    {
                        ships.Add(t);
                    }
                }

                ships.Remove(this.Focus);
                if (ships.Count > 0)
                {
                    target = ships[RandomUtils.random.Next(ships.Count)];
                }
            }
            else
            {
                aim = target.Position - this.Focus.Position;
                fire = Vector2.Distance(target.Position, this.Focus.Position) < 3000;
            }

            this.Aimpoint = aim;
            this.Fire = fire;
        }
        public static void ServerInitialize(Bullet obj, Ship owner, Vector2 position, float direction)
        {
            MovingGameObject.ServerInitialize(obj, position, Utils.Vector2Utils.ConstructVectorFromPolar(speed, direction) /*+ owner.Velocity*/, direction, 0, direction);

            obj.owner.Value = owner;
            obj.start.Value = position;
        }
        public static void ServerInitialize(Ship ship, Vector2 position, Vector2 velocity, float direction, int health, float maxSpeed, float acceleration, float maxAgularSpeed, ControlState controller)
        {
            MovingGameObject.ServerInitialize(ship, position, new Vector2(0), direction, 0, 0);
            ship.health.Value = health;
            ship.maxSpeed.Value = maxSpeed;
            ship.acceleration.Value = acceleration;
            ship.maxAgularSpeed.Value = maxAgularSpeed;

            ship.controller = controller;
        }
        public override void Update(float secondsElapsed)
        {
            //throw new NotImplementedException();
            Vector2 aim = this.Aimpoint;
            float targetAngle = 0;
            float angleControl = 0;
            Boolean fire = this.Fire;

            if (target == null || target.IsDestroyed)
            {
                target = null;

                List<Ship> ships = new List<Ship>();
                foreach (Tower t in this.game.GameObjectCollection.GetMasterList().GetList<Tower>())
                {
                    ships.Add(t);
                }
                foreach (BigShip t in this.game.GameObjectCollection.GetMasterList().GetList<BigShip>())
                {
                    ships.Add(t);
                }

                ships.Remove(this.Focus);
                if (ships.Count > 0)
                {
                    target = ships[RandomUtils.random.Next(ships.Count)];
                }
            }
            else
            {
                if (Vector2.Distance(target.Position, this.Focus.Position) > 1000)
                {
                    flyTowardsRelative = new Vector2(0);
                }

                if (Vector2.Distance(target.Position, this.Focus.Position) < 500 && flyTowardsRelative == new Vector2(0))
                {
                    flyTowardsRelative = Utils.Vector2Utils.ConstructVectorFromPolar(2000, (float)(RandomUtils.random.NextDouble() * Math.PI * 2));
                }

                aim = target.Position - this.Focus.Position;
                targetAngle = Utils.Vector2Utils.RestrictAngle(Utils.Vector2Utils.Vector2Angle(target.Position - (this.Focus.Position + flyTowardsRelative)));
                angleControl = 1;
                fire = Vector2.Distance(target.Position, this.Focus.Position) < 3000;
            }

            this.Aimpoint = aim;
            this.AngleControl = angleControl;
            this.TargetAngle = targetAngle;
            this.MovementControl = 1;
            this.Fire = fire;
        }
        public override void Update(float secondsElapsed)
        {
            this.Fire = false;

            if (target == null || target.IsDestroyed)
            {
                target = null;

                List<Ship> ships = new List<Ship>();
                foreach (SmallShip t in this.game.GameObjectCollection.GetMasterList().GetList<SmallShip>())
                {
                    if (Vector2.Distance(t.Position, this.Focus.Position) < 3000)
                    {
                        ships.Add(t);
                    }
                }

                ships.Remove(this.Focus);
                if (ships.Count > 0)
                {
                    target = ships[RandomUtils.random.Next(ships.Count)];
                }
            }
            else
            {
                this.Aimpoint = target.Position - this.Focus.Position;
                this.Fire = Vector2.Distance(target.Position, this.Focus.Position) < 3000;
            }

            float newDistance = Vector2.Distance(targetPosition, this.Focus.Position);

            this.TargetAngle = Utils.Vector2Utils.RestrictAngle(Utils.Vector2Utils.Vector2Angle(targetPosition - this.Focus.Position));

            if (newDistance < 300)
            {
                this.MovementControl = 0;
                this.AngleControl = 0;
            }
        }
 /*
 public override void SendUpdateMessage(Lobby lobby, GameTime gameTime)
 {
     //TODO: what about if a new player joins?  This is similar to other game set up data like world-size
     if (sendUpdate)
     {
         sendUpdate = false;
         lobby.BroadcastTCP(new GameObjectUpdate(gameTime, this));
     }
 }*/
 public void SetFocus(Player player, Ship obj)
 {
     focusList.Value[player.Id] = obj;
     sendUpdate = true;
 }