Beispiel #1
0
 public void RemovePowerUps()
 {
     PendingPowerUp = null;
     PendingProjectile = null;
     PendingFence = null;
     if ( powerUp != null )
     {
         powerUp.Revert();
         powerUp = null;
     }
 }
Beispiel #2
0
        public void Update( GameTime gameTime, KeyboardState key, KeyboardState oldkey, int width, int height, TankObject[] Tanks, HashSet<ProjectileObject> Projectiles, HashSet<FenceObject> Fences, HashSet<Pickup> Pickups, GraphicsDevice gd )
        {
            if ( key.IsKeyDown( Keys.KeyPlace ) && oldkey.IsKeyUp( Keys.KeyPlace ) && ( PlacedFences < FenceLimit || FenceLimit < 0 ) )
            {
                if ( PendingPowerUp == null && IsInGame )
                {
                    PlacedFences++;
                    float dist = Vector2.Distance( Vector2.Zero, Origin );
                    Fences.Add( new BasicFence( GameTools.ReturnMove( dist / 4, angle, GameTools.ReturnMove( dist, angle + 45, Position ) ), GameTools.ReturnMove( dist / 4, angle, GameTools.ReturnMove( dist, angle - 45, Position ) ), 8, this, gameTime, gd ) );
                }
                else if ( PendingPowerUp != null )
                {
                    PendingPowerUp.Use( Tanks, Projectiles, Fences, Pickups, gameTime );
                    PendingPowerUp = null;
                }
            }
            if ( !IsInGame ) return;

            if ( AI )
            {
                TankObject ClosestTank = null;
                float dist = float.PositiveInfinity;
                foreach ( TankObject Tank in Tanks )
                {
                    float d = Vector2.Distance( Tank.Position, Position );
                    if ( d < dist && Tank.IsInGame && Tank != this )
                    {
                        dist = d;
                        ClosestTank = Tank;
                    }
                }
                if ( ClosestTank != null )
                {
                    float ang = ( ( ( float )Math.Atan2( Position.Y - ClosestTank.Position.Y, Position.X - ClosestTank.Position.X ) * 180 / ( float )Math.PI ) + 180 ) % 360;
                    /*while ( angle < 0 )
                    {
                        angle += 360;
                    }
                    angle %= 480;

                    /*
                     * If (absolute of [heading - converted angle] <= 20) then turn to converted angle;
                        Otherwise If (heading - converted angle < -20) then turn -20 degrees;
                        Otherwise If (heading - converted angel > 20) then turn 20 degrees;
                     *
                    float factor = 10;
                    if ( Math.Abs( angle - ang ) <= factor ) angle = ang;
                    else if ( angle - ang < -factor ) angle -= factor;
                    else if ( angle - ang > factor ) angle += factor;
                    */
                    angle = ang;

                    if ( ( gameTime.TotalGameTime - LastShoot ).TotalMilliseconds > 2000 )
                    {
                        Shoot( gameTime, width, height, Projectiles );
                        LastShoot = gameTime.TotalGameTime;
                    }
                    FilterMove( 5F, Fences, Pickups, gameTime );
                    return;
                }
            }

            float moveFactor = 0;

            if ( key.IsKeyDown( Keys.KeyDown ) )
            {
                IsGoingBackwards = true;
                moveFactor -= Speed;
            }
            else
            {
                IsGoingBackwards = false;
            }
            if ( key.IsKeyDown( Keys.KeyUp ) )
            {
                IsGoingBackwards = false;
                moveFactor += Speed;
            }
            if ( moveFactor != 0 )
            {
                FilterMove( moveFactor, Fences, Pickups, gameTime );
            }

            float angleFactor = 0;

            if ( key.IsKeyDown( Keys.KeyLeft ) )
            {
                angleFactor -= Speed;
            }
            if ( key.IsKeyDown( Keys.KeyRight ) )
            {
                angleFactor += Speed;
            }

            angle %= 360;
            while ( angle < 0 )
            {
                angle += 360;
            }

            FilterRotate( Fences, angleFactor );

            if ( Position.X > width + Origin.X )
                Position.X = -Origin.X;
            if ( Position.X < -Origin.X )
                Position.X = width + Origin.X;
            if ( Position.Y > height + Origin.Y )
                Position.Y = -Origin.Y;
            if ( Position.Y < -Origin.Y )
                Position.Y = height + Origin.Y;

            foreach ( Pickup pickup in Pickups )
            {
                if ( GameTools.RotRectIntersectRect( Position, Origin, Width, Height, Rotation, pickup.BoundingBox ) )
                {
                    pickup.Take( this, gameTime );
                }
            }

            if ( key.IsKeyDown( Keys.KeyShoot ) && oldkey.IsKeyUp( Keys.KeyShoot ) && ( ShotsOnBoard < ShotLimit || ShotLimit <= 0 ) && IsInGame )
            {
                Shoot( gameTime, width, height, Projectiles );
            }

            if ( powerUp != null )
            {
                if ( powerUp.Update( gameTime, Tanks, Projectiles, Fences ) )
                {
                    powerUp.Revert();
                    powerUp = null;
                }
            }
        }
Beispiel #3
0
 public bool AppendPowerUp( PowerUp powerUp, GameTime gameTime )
 {
     if ( powerUp is AppearingPowerUp )
         return false;
     else if ( powerUp is InstantPowerUp )
     {
         if ( PendingPowerUp == null )
         {
             PendingPowerUp = ( InstantPowerUp )powerUp;
             PendingPowerUp.Take( this, gameTime );
             return true;
         }
         else return false;
     }
     else if ( powerUp is TimedPowerUp )
     {
         if ( this.powerUp == null )
         {
             this.powerUp = ( TimedPowerUp )powerUp;
             this.powerUp.Take( this, gameTime );
             return true;
         }
         else return false;
     }
     else
     {
         throw new Exception( "Liek if this gets thrown, i'm a sheep" );
     }
 }