예제 #1
0
        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;
        }