public override bool Control( GameEntity control, TimeSpan gameTime, Microsoft.Xna.Framework.Input.KeyboardState keyState ) { if ( control is Projectile ) { control.Angle = ( float )control.Variables[ angleString ]; } float speed = ( float )control.Variables[ speedString ]; float currentdist = ( float )control.Variables[ currentdistString ]; float ang = ( float )control.Variables[ angleString ]; speed *= speedFactor; currentdist += speed; float dist = Vector2.Distance( position, control.Position ); if ( dist <= currentdist ) { control.Move( speed, ang ); control.Position = control.Bound( control.Position ); dist += speed; } if ( control is Tank && ( ( Tank )control ).Controller != null ) { TankController t = ( TankController )( ( Tank )control ).Controller.Clone(); ( ( Tank )control ).RemoveTankController(); TankControllerPickup p = new TankControllerPickup( t, 3000 ); float d = maxdist; p.Position = control.Bound( control.PositionShift( d, ang ) ); p.Initialize( Game, gameTime ); p.Variables[ speedString ] = speed; p.Variables[ currentdistString ] = currentdist + d; p.Variables[ angleString ] = ang; p.AppendController( this ); Game.QueueEntity( p ); } control.Variables[ speedString ] = speed; control.Variables[ currentdistString ] = currentdist; if ( currentdist >= maxdist - epsilon || speed <= epsilon ) { control.Variables.Remove( angleString ); control.Variables.Remove( speedString ); control.Variables.Remove( currentdistString ); control.RemoveController( this ); } return true; }