public void RemovePowerUps() { PendingPowerUp = null; PendingProjectile = null; PendingFence = null; if ( powerUp != null ) { powerUp.Revert(); powerUp = null; } }
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; } } }
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" ); } }