All pastes #569849 Raw Edit

Untitled

public text v1 · immutable
·published 2007-06-16 13:06 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.Text;

using FRB;
using FRB.Gui;
using FRB.Text;
using FRB.Audio;

using Microsoft.DirectX.DirectInput;

namespace GameName.Screens
{

    class WorldMap : Screen
    {
    	#region variable and sprite declarations
    	
    		#region sprite declarations
	    	Sprite backgroundSprite;
    	    Sprite warpbackgroundSprite;
	        Sprite playerSprite;
    	    Sprite mainpanelSprite;
	        Sprite radarSprite;
    	    Sprite dustSprite;
	        Sprite warpmeterSprite;
    	    Sprite warpparticleSprite;
	        Sprite viewrodlSprite;
    	    Sprite viewrodrSprite;
	        Sprite viewscreenButtonSprite;
    	    Sprite viewscreenButtonBounds;
	        Sprite viewscreenButtonLight;
    	    Sprite zoominButtonSprite;
	        Sprite zoominButtonBounds;
    	    Sprite zoomoutButtonSprite;
	        Sprite zoomoutButtonBounds;
    	    Sprite viewscreenSprite;
	        Sprite minimapSprite;
    	    Sprite planetButton1;
	        Sprite planetButton2;
    	    Sprite planetButton3;
	        Sprite planetButton4;
    	    Sprite planetmarkerSprite;
	        Sprite trackerSprite;
    	    Sprite planet1Sprite;
	        Sprite planet1Moon1Sprite;
    	    Sprite planet1Moon2Sprite;    	
    		#endregion
        
        	#region text object declarations        
        	Text debugText1;
        	#endregion

        	#region variable declarations
        	bool sublightOnly = false;
	        bool autoPilot = false;
	        bool stopped = false;
	        bool trackerZoomin = true;
	        bool zoomin = true;
	        bool viewbuttonsloaded = false;
	        bool lowering = false;
			bool raised = false;
	        bool warping = false;
	        bool borderCollisionX = false;
	        bool borderCollisionY = false;
	        int targetPlanet;
	        int currentPlanet;
	        int spawnCoord;
	        int spawnCount = 0;
	        int warpCount = 0;
	        long startTime = TimeManager.currentTick;
	        long turnTime = TimeManager.currentTick;
	        float sizeCoefficient = 0.0175f;
	        float trackerCoordX = -0.0f;
	        float trackerCoordY = -0.0f;
	        float trackerDistance;
	        float spawnCoordX;
	        float spawnCoordY;        
	        float spawnTimer;
	        float turnTimer = 0;
	        float warpTimer;
	        float velocityAngle;
	        float angleToRotate;
	        float angleDifference;
	        float secondsToTake;
	        double playerXdiff;
	        double playerYdiff;
	        double planet1Xdiff;
	        double planet1Ydiff;
	        double planet1Moon1Xdiff;
	        double planet1Moon1Ydiff;
	        double planet1Moon2Xdiff;
	        double planet1Moon2Ydiff;
	        double planet1Angle;
	        double planet1Moon1Angle;
	        double planet1Moon2Angle;
	        double playerXmov;
	        double playerYmov;
	        double playerNavAngle;
	        double speed;
        	#endregion
	               
        #endregion
    	
        public WorldMap(FrbEngineReferences frbEngineReferences) :
    		base("", "", frbEngineReferences)
        {
            #region load and place all sprites and objects   
            warpbackgroundSprite = sprMan.AddUnorderedSprite("warpbackground.bmp");
            sprMan.RemoveSprite(warpbackgroundSprite);              
            
            viewscreenSprite = sprMan.AddSprite("viewscreen.png");
            sprMan.RemoveSprite(viewscreenSprite);
            viewscreenSprite = sprMan.AddSprite("systemviewscreen.png");
            sprMan.RemoveSprite(viewscreenSprite);
            
            backgroundSprite = sprMan.AddUnorderedSprite("background.bmp");
            backgroundSprite.sclX = backgroundSprite.texture.sizeX * 0.0162f;
            backgroundSprite.sclY = backgroundSprite.texture.sizeY * 0.0162f;
            AssignTextureToScreen(backgroundSprite.texture);
                                              
            mainpanelSprite = sprMan.AddOverlaySprite("mainpanel.png");
            mainpanelSprite.sclX = mainpanelSprite.texture.sizeX * 0.016175f;
            mainpanelSprite.sclY = mainpanelSprite.texture.sizeY * 0.016175f;
            mainpanelSprite.x -= 0.025f;
            mainpanelSprite.y = -12.4f;
            AssignTextureToScreen(mainpanelSprite.texture);
            
            minimapSprite = sprMan.AddOverlaySprite("minimapzoomin.png");
            minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            minimapSprite.x = -16.725f;
            minimapSprite.y = -13.075f;
            AssignTextureToScreen(minimapSprite.texture);
            
            trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            trackerSprite.relX = trackerCoordX;
            trackerSprite.relY = trackerCoordY;
            trackerSprite.AttachTo(minimapSprite, true);
            AssignTextureToScreen(trackerSprite.texture);

            viewscreenButtonLight = sprMan.AddOverlaySprite("default.bmp");
            viewscreenButtonLight.sclX = 0.15f;
            viewscreenButtonLight.sclY = 0.15f;
            viewscreenButtonLight.x = -13.725f;
            viewscreenButtonLight.y = -10.1f;            
    		viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
    		viewscreenButtonLight.tintRed = 255;
    		AssignTextureToScreen(viewscreenButtonLight.texture);
    		    		          
            viewscreenButtonSprite = sprMan.AddOverlaySprite("viewscreenbutton.png");
            viewscreenButtonSprite.sclX = 2.05f;
            viewscreenButtonSprite.sclY = 2.05f;
            viewscreenButtonSprite.x = -15.025f;
            viewscreenButtonSprite.y = -9.875f;
            AssignTextureToScreen(viewscreenButtonSprite.texture);
            
            viewscreenButtonBounds = sprMan.AddOverlaySprite("default.bmp");
            viewscreenButtonBounds.sclX = 1.555f;
            viewscreenButtonBounds.sclY = 0.435f;
            viewscreenButtonBounds.x = -15.025f;
            viewscreenButtonBounds.y = -9.875f;
            viewscreenButtonBounds.fade = 255;
            AssignTextureToScreen(viewscreenButtonBounds.texture);
            
            zoominButtonSprite = sprMan.AddOverlaySprite("zoominbutton.png");
            zoominButtonSprite.sclY = 1.025f;
            zoominButtonSprite.x = -19.29f;
            zoominButtonSprite.y = -9.865f;
            AssignTextureToScreen(zoominButtonSprite.texture);
            
            zoominButtonBounds = sprMan.AddOverlaySprite("default.bmp");
            zoominButtonBounds.sclX = 0.7f;
            zoominButtonBounds.sclY = 0.435f;
            zoominButtonBounds.x = -19.29f;
            zoominButtonBounds.y = -9.865f;
            zoominButtonBounds.fade = 255;
            AssignTextureToScreen(zoominButtonBounds.texture);
            
            zoomoutButtonSprite = sprMan.AddOverlaySprite("zoomoutbutton.png");
            zoomoutButtonSprite.sclY = 1.025f;
            zoomoutButtonSprite.x = -17.6f;
            zoomoutButtonSprite.y = -9.865f;
            AssignTextureToScreen(zoomoutButtonSprite.texture);
            
            zoomoutButtonBounds = sprMan.AddOverlaySprite("default.bmp");
            zoomoutButtonBounds.sclX = 0.7f;
            zoomoutButtonBounds.sclY = 0.435f;
            zoomoutButtonBounds.x = -17.6f;
            zoomoutButtonBounds.y = -9.865f;
            zoomoutButtonBounds.fade = 255; 
            AssignTextureToScreen(zoomoutButtonBounds.texture);
            
            radarSprite = sprMan.AddOverlaySprite("radar.png");
            radarSprite.sclX = radarSprite.texture.sizeX * 0.016175f;
            radarSprite.sclY = radarSprite.texture.sizeY * 0.016175f;
            radarSprite.x = 16.75f;
            radarSprite.y = -13.2f;
            radarSprite.fade = 75;
            radarSprite.rotZVelocity = -3;
            AssignTextureToScreen(radarSprite.texture);
            
            playerSprite = sprMan.AddSprite("ship.png");
            playerSprite.sclX = playerSprite.texture.sizeX * sizeCoefficient;
            playerSprite.sclY = playerSprite.texture.sizeY * sizeCoefficient;
            playerSprite.y = 4.25f;
            AssignTextureToScreen(playerSprite.texture);

            viewrodlSprite = sprMan.AddSprite("viewrod.png");
            viewrodlSprite.sclX = viewrodlSprite.texture.sizeX * sizeCoefficient;
            viewrodlSprite.sclY = viewrodlSprite.texture.sizeY * sizeCoefficient;
            viewrodlSprite.x = -20;
            viewrodlSprite.y = -27f;
            AssignTextureToScreen(viewrodlSprite.texture);
            
            viewrodrSprite = sprMan.AddSprite("viewrod2.png");
            viewrodrSprite.sclX = viewrodrSprite.texture.sizeX * sizeCoefficient;
            viewrodrSprite.sclY = viewrodrSprite.texture.sizeY * sizeCoefficient;
            viewrodrSprite.x = 20;
            viewrodrSprite.y = -27;
            viewrodrSprite.AttachTo(viewrodlSprite, true);
            AssignTextureToScreen(viewrodrSprite.texture);
            
			warpmeterSprite = sprMan.AddSprite("default.bmp");
            warpmeterSprite.sclX *= 0.5f;
            warpmeterSprite.sclY *= 3;
            warpmeterSprite.x = -12.375f;
            warpmeterSprite.y = -18.75f;
            AssignTextureToScreen(warpmeterSprite.texture);
            
            debugText1 = textMan.AddText(playerSprite.rotZ.ToString());
            
            for (int i = 0; i < 150; i++)
            {
            	spawnCoordX = (float)random.Next( -200, 200 )/10;
            	spawnCoordY = (float)random.Next( -180, 180 )/10;
            	spawnCount += 1;

            	dustSprite = sprMan.AddParticle("dust.bmp");
            	dustSprite.sclX = dustSprite.texture.sizeX * sizeCoefficient;
            	dustSprite.sclY = dustSprite.texture.sizeY * sizeCoefficient;
            	dustSprite.x = spawnCoordX;
            	dustSprite.y = spawnCoordY;
            	AssignTextureToScreen(dustSprite.texture);
            	dustSprite.rotZ = (float)random.Next( -200, 200 )/10;
            	dustSprite.customFunctions += new customFunction(ParticleControl);
            }            
            
            #endregion            
        }

        public override void Activity()
        {
            base.Activity();
            
            #region player movement controls            
            // combines the x and y vectors to determine current ship speed
            speed = Math.Abs(playerXmov) + Math.Abs(playerYmov);         
            
            if (warping == false)
            {
            	// ship turning commands, if autopilot is activated turn automatically
            	if (autoPilot == false)
            	{
            		if(inpMan.KeyDown(Key.Left) || inpMan.KeyDown(Key.A))
        				playerSprite.rotZVelocity = 5;
            		else if(inpMan.KeyDown(Key.Right) || inpMan.KeyDown(Key.D))
        				playerSprite.rotZVelocity = -5;
            		else
            			playerSprite.rotZVelocity = 0;
            	}
            	else
            	{     
            		// if autopilot is on and movement buttons are pressed, turn off
            		// autopilot and give control back to the player
            		if(inpMan.KeyDown(Key.Left) || inpMan.KeyDown(Key.A))
            		{
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            		}        				
            		else if(inpMan.KeyDown(Key.Right) || inpMan.KeyDown(Key.D))
            		{
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            		}
            	}
            		
            	// math functions to calculate ship speed
            	if (inpMan.KeyDown(Key.Up) || inpMan.KeyDown(Key.W))
            	{
            		playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
					if (speed < 12)
					{
						// increments the x and y vectors based on ships current angle
						playerXmov += (float)0.08f*(Math.Cos(playerSprite.rotZ));
	            		playerYmov += (float)0.08f*(Math.Sin(playerSprite.rotZ));
					}
					else
					{
						// keeps speed under 12 so direction doesn't become locked
						playerXmov *= 0.995;
						playerYmov *= 0.995;
					}			
				}
           		else if (inpMan.KeyDown(Key.Down) || inpMan.KeyDown(Key.S))
           	 	{
           			playerSprite.ClearInstructions();
           			autoPilot = false;
           			stopped = false;
           			turnTimer = 0;
					if (speed < 12)
					{
						// increments the x and y vectors based on ships current angle
						playerXmov -= (float)0.04f*(Math.Cos(playerSprite.rotZ));
    	        		playerYmov -= (float)0.04f*(Math.Sin(playerSprite.rotZ));
					}
					else
					{
						// keeps speed under 12 so direction doesn't become locked
						playerXmov *= 0.995;
						playerYmov *= 0.995;
					}
				}
			}
            
            // space brakes!
            if (inpMan.KeyDown(Key.Space))
            {
            	playerSprite.ClearInstructions();
            	autoPilot = false;     
            	stopped = false;
            	turnTimer = 0;
            	// decrement speed by 2% every frame
            	playerXmov *= 0.98;
				playerYmov *= 0.98;
				if (speed < 0.2)
				{
					// come to full stop
					playerXmov = 0;
					playerYmov = 0;
				}
            } 
            #endregion
            
            #region warp travel controls
            
            	#region player control from sublight to warp functions
            	// gathers angle data on current vectors to later determine if ship is
            	// facing direction of motion(within 10% tolerance)
    	        velocityAngle = (float)Math.Atan2( playerYmov, playerXmov);            
        	    angleDifference = FRB.CommonFunctions.AngleToAngle(velocityAngle, playerSprite.rotZ);
            
            	// checks speed and current ship angle and lights up the warp light to
            	// indicate warp is possible if conditions are met
            	if (speed > 10 && Math.Abs(angleDifference) < 2*Math.PI*.025f)
            	{
            		warpmeterSprite.fade = 50;
            	}
            	else
            	{
	            	warpmeterSprite.fade = 0;
    	        }
            
        	    // if warp conditions are met from above, then also check to see if Z is
        	    // being held and the warp meter will start charging
	            if (inpMan.KeyDown(Key.Z) && speed > 11.5 && Math.Abs(angleDifference) < 2*Math.PI*.025f)
    	        {	            	
	            	playerSprite.ClearInstructions();
	            	autoPilot = false;
	            	stopped = false;
	            	turnTimer = 0;
        	    	if (warpmeterSprite.y < -13.5)
            		{
            			warpmeterSprite.y += 5 * TimeManager.secondDifference;
            		}
            	
	            	// warp meter is full and warp is engaged, change backround and begin loading particles
    	        	if (warpmeterSprite.y > -13.5 && warping == false)
        	    	{
    	        		// if within a planetary system return to the worldmap view
    	        		if (sublightOnly == true)
    	        		{    	        			
	            			sprMan.RemoveSprite(minimapSprite);
			            	sprMan.RemoveSprite(trackerSprite);
			            	sprMan.RemoveSprite(planet1Sprite);
			            	sprMan.RemoveSprite(planet1Moon1Sprite);
			            	sprMan.RemoveSprite(planet1Moon2Sprite);
			            	
			            	if (trackerZoomin == true)
			            	{
            					minimapSprite = sprMan.AddOverlaySprite("minimapzoomin.png");
            					AssignTextureToScreen(minimapSprite.texture);
			            	}
			            	else
			            	{
			            		minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
			            		AssignTextureToScreen(minimapSprite.texture);
			            	}
			            	
			            	minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
           				 	minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
			            	minimapSprite.x = -16.725f;
            				minimapSprite.y = -13.075f;
			            	trackerSprite = sprMan.AddOverlaySprite("default.bmp");
			            	AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
			            	trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
			            	trackerSprite.AttachTo(minimapSprite, true);
            				switch (currentPlanet)
    	        			{
        	    				case 1:
            						targetPlanet = 0;
            						currentPlanet = 0;
            						trackerCoordX = -1.9125f;
									trackerCoordY = 1.55f;
            						break;
            					case 2:
            						targetPlanet = 0;
            						currentPlanet = 0;
            						trackerCoordX = 1.315f;
									trackerCoordY = -0.25f;
            						break;
            					case 3:
            						targetPlanet = 0;
            						currentPlanet = 0;
            						trackerCoordX = -1.9125f;
									trackerCoordY = 1.55f;
            						break;
            					case 4:
            						targetPlanet = 0;
            						currentPlanet = 0;
            						trackerCoordX = 1.315f;
									trackerCoordY = -0.25f;
            						break;
            					default:
            						break;
            				}
            				
            				if (viewrodlSprite.y == -2.25)
            				{
			    				lowering = true;
			        			viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
        						viewscreenButtonLight.tintGreen = 0;
			    				viewscreenButtonLight.tintRed = 255;
            				}
			            	sublightOnly = false;
	        	    	}
    	        		
            			warping = true;
            			warpCount = 0;
            			warpTimer = TimeManager.currentTick;
	            		warpbackgroundSprite = sprMan.AddUnorderedSprite("warpbackground.bmp");
	            		AssignTextureToScreen(warpbackgroundSprite.texture);
    	        		warpbackgroundSprite.sclX = warpbackgroundSprite.texture.sizeX * 0.0162f;
        	   			warpbackgroundSprite.sclY = warpbackgroundSprite.texture.sizeY * 0.0162f;
           				
           				// loads 50 warp particles to random positions
           				for (int h = 0; h < 50; h++)
	            		{
    	        			spawnCoordX = (float)random.Next( -200, 200 )/10;
        	    			spawnCoordY = (float)random.Next( -180, 180 )/10;
            				warpCount += 1;

    	        			warpparticleSprite = sprMan.AddParticle("warpparticle.png");
        	    			warpparticleSprite.sclX = warpparticleSprite.texture.sizeX * sizeCoefficient;
            				warpparticleSprite.sclY = warpparticleSprite.texture.sizeY * sizeCoefficient;
            				warpparticleSprite.x = spawnCoordX;
            				warpparticleSprite.y = spawnCoordY;
            				AssignTextureToScreen(warpparticleSprite.texture);
            				warpparticleSprite.rotZ = playerSprite.rotZ;
            				warpparticleSprite.customFunctions += new customFunction(WarpParticleControl);
           				}
            		}
            	}
            
	            // depletes warp meter when exiting warp, or if Z is released prematurely
    	        else if (warping == false && stopped == false)
        	    {
            		warpmeterSprite.y -= 5 * TimeManager.secondDifference;
            		if (warpmeterSprite.y < -18.75)
	            	{
    	        		warpmeterSprite.y = -18.75f;
        	    	}
            	}
    	        #endregion
    	        
            	#region warp effects
            	if (warping == true)
            	{
            		// moves tracker icon on the minimap
            		if (trackerZoomin == true && zoomin == true)
            		{
            			trackerCoordX += (float)playerXmov/1000;
            			trackerCoordY += (float)playerYmov/1000;
            		}
            		else
            		{
            			trackerCoordX += ((float)playerXmov/1000)*0.1262f;
            			trackerCoordY += ((float)playerYmov/1000)*0.1262f;
            		}
            		
            		// spawn warp particles if there are less than 300 on screen
            		if (warpCount < 300)
            		{
            			// randomly selects numbers 1-4 to determine what side particle will spawn on
            			spawnCoord = (int)Math.Ceiling((float)random.Next( 1, 5 ));
            	
            			switch (spawnCoord)
            			{
							case 1: // left side
								spawnCoordX = -22;
								spawnCoordY = (float)random.Next( -180, 180 )/10;
								break;
							case 2: // right side
								spawnCoordX = 22;
								spawnCoordY = (float)random.Next( -180, 180 )/10;
								break;
							case 3: // top
								spawnCoordX = (float)random.Next( -200, 200 )/10;
								spawnCoordY = 18;
								break;
							case 4: // bottom
								spawnCoordX = (float)random.Next( -200, 200 )/10;
								spawnCoordY = -18;
								break;
						}
            			spawnTimer = 0.1f/(float)speed;
            			
            			// loads a particle and assigns it to the WarpParticleControl function
            			if (TimeManager.SecondsSince(startTime) >= spawnTimer)
            			{    
            				warpCount++;
            				startTime = TimeManager.currentTick;
            				warpparticleSprite = sprMan.AddParticle("warpparticle.png");
            				warpparticleSprite.sclX = warpparticleSprite.texture.sizeX * sizeCoefficient;
            				warpparticleSprite.sclY = warpparticleSprite.texture.sizeY * sizeCoefficient;
            				warpparticleSprite.x = spawnCoordX;
            				warpparticleSprite.y = spawnCoordY;
            				AssignTextureToScreen(warpparticleSprite.texture);
            				warpparticleSprite.rotZ = playerSprite.rotZ;
            				warpparticleSprite.customFunctions += new customFunction(WarpParticleControl);
            			}
            		}
            		
            		// drop out of warp if Z is pressed at least 2 seconds after warp was engaged
            		if (inpMan.KeyDown(Key.Z) && TimeManager.SecondsSince((long)warpTimer) > 0.5)
            		{
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			sprMan.RemoveSprite(warpbackgroundSprite);
            	    	warping = false;
            	    	turnTimer = 0;
            	    	playerXmov *= 0.25f;
            	    	playerYmov *= 0.25f;
            	    	
            	    	// reloads 150 default dust particles
            	    	for (int i = 0; i < 150; i++)
            			{
            				spawnCoordX = (float)random.Next( -200, 200 )/10;
            				spawnCoordY = (float)random.Next( -180, 180 )/10;
            				spawnCount += 1;

            				dustSprite = sprMan.AddParticle("dust.bmp");
            				dustSprite.sclX = dustSprite.texture.sizeX * sizeCoefficient;
            				dustSprite.sclY = dustSprite.texture.sizeY * sizeCoefficient;
            				dustSprite.x = spawnCoordX;
            				dustSprite.y = spawnCoordY;
            				AssignTextureToScreen(dustSprite.texture);
            				dustSprite.rotZ = (float)random.Next( -200, 200 )/10;
            				dustSprite.customFunctions += new customFunction(ParticleControl);
            			}
            		}
            	}
            	#endregion
            	
            #endregion
            
            #region dust spawning functions
            if (speed > 0 && spawnCount < 300 && warping == false)
            {
            	// generate a random number to indicate what side particle will spawn
            	spawnCoord = (int)Math.Ceiling((float)random.Next( 1, 5 ));
            	
            	switch (spawnCoord)
            	{
					case 1: // left side
						spawnCoordX = -22;
						spawnCoordY = (float)random.Next( -180, 180 )/10;
						break;
					case 2: // right side
						spawnCoordX = 22;
						spawnCoordY = (float)random.Next( -180, 180 )/10;
						break;
					case 3: // top
						spawnCoordX = (float)random.Next( -200, 200 )/10;
						spawnCoordY = 18;
						break;
					case 4: // bottom
						spawnCoordX = (float)random.Next( -200, 200 )/10;
						spawnCoordY = -18;
						break;
				}
            	
            	// spawns particles at a rate based on current ship speed
            	spawnTimer = 0.1f/(float)speed;
            	if (TimeManager.SecondsSince(startTime) >= spawnTimer)
            	{    
            		spawnCount++;
            		startTime = TimeManager.currentTick;
            		dustSprite = sprMan.AddParticle("dust.bmp");
            		dustSprite.sclX = dustSprite.texture.sizeX * sizeCoefficient;
            		dustSprite.sclY = dustSprite.texture.sizeY * sizeCoefficient;
            		dustSprite.x = spawnCoordX;
            		dustSprite.y = spawnCoordY;
            		AssignTextureToScreen(dustSprite.texture);
            		dustSprite.rotZ = (float)random.Next( -200, 200 )/10;
            		dustSprite.customFunctions += new customFunction(ParticleControl);
            	}
            }
            #endregion                                  
            
            #region viewscreen opening and manipulation
            // if "V" is pressed and the viewscreen is closed, start raising viewrods upward
            if (inpMan.KeyDown(Key.V) && raised == false && viewrodlSprite.y == -27)
            {
            	viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
            	viewscreenButtonLight.tintRed = 0;
    			viewscreenButtonLight.tintGreen = 255;
        		viewrodlSprite.yVelocity = 90;
            }
            
			// if "V" is pressed and the viewscreen is open, start closing the viewscreen
            if (inpMan.KeyDown(Key.V) && raised == true && viewrodlSprite.y == -2.25)
            {
        		lowering = true;
        		viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
        		viewscreenButtonLight.tintGreen = 0;
    			viewscreenButtonLight.tintRed = 255;
            }
			
            // performs same function as pressing "V", only by clicking on the viewscreen button instead
            if(cursor.primaryDown)
            {
            	if (cursor.IsOn(viewscreenButtonBounds) && raised == false && viewrodlSprite.y == -27)
            	{
            		viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
            		viewscreenButtonLight.tintRed = 0;
    				viewscreenButtonLight.tintGreen = 255;
        			viewrodlSprite.yVelocity = 90;        				
            	}

            	if (cursor.IsOn(viewscreenButtonBounds) && raised == true && viewrodlSprite.y == -2.25)           		
            	{
        			lowering = true;
        			viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
        			viewscreenButtonLight.tintGreen = 0;
    				viewscreenButtonLight.tintRed = 255;
            	}
        	}
            
            // stops viewrods from moving upward, and attached the viewscreen which begins to open
            if (viewrodlSprite.y > -2.25)
            {
            	viewrodlSprite.yVelocity = 0;
            	viewrodlSprite.y = -2.25f;
            	if (sublightOnly == false)
            	{
            		viewscreenSprite = sprMan.AddOverlaySprite("viewscreen.png");
            		AssignTextureToScreen(viewscreenSprite.texture);
            	}
            	else
            	{
            		viewscreenSprite = sprMan.AddOverlaySprite("systemviewscreen.png");
            		AssignTextureToScreen(viewscreenSprite.texture);
            	}
            	
            	viewscreenSprite.fade = 50;
            	viewscreenSprite.y = 4.25f;
            	viewscreenSprite.sclX *= 0.1f;
            	viewscreenSprite.sclY *= 0.1f;
            	viewscreenSprite.customFunctions += new customFunction(ViewscreenControl);
            }
            
            // stops the viewrods once they've finished lowering
            if (viewrodlSprite.y < -27)
            {   		
            	viewrodlSprite.yVelocity = 0;
            	viewrodlSprite.y = -27;            	
            }
            #endregion
            
            #region minimap controls and navigation of ship
            
            	#region zoomin and zoomout button controls
            	// zoom in the minimap when the = key is pressed
            	if (inpMan.KeyDown(Key.Equals) && zoomin == false && sublightOnly == false)
            	{
            		sprMan.RemoveSprite(minimapSprite);
            		minimapSprite = sprMan.AddOverlaySprite("minimapzoomin.png");
            		minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            		minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            		minimapSprite.x = -16.725f;
            		minimapSprite.y = -13.075f;
            		AssignTextureToScreen(minimapSprite.texture);
	            	
            		// remove the tracker if the ship is not within the new view, or add it if it is
   		        	if (trackerZoomin == false)
	            		sprMan.RemoveSprite(trackerSprite);
    	        	else
        	    	{
            			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            			trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            			trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
	            		trackerSprite.relX = trackerCoordX;
    	        		trackerSprite.relY = trackerCoordY;
    	        		AssignTextureToScreen(trackerSprite.texture);
    	        		trackerSprite.AttachTo(minimapSprite, true);
        	    	}
            		zoomin = true;
            		
            		// attach the planet marker sprite if it should be showing now
            		switch(targetPlanet)
            		{
            			case 1:  
            				PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            				break;
            			case 2:
            				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            				break;
            			default:
            				break;
            		}
            	}            	
            
            	// zoom out the minimap when the - key is pressed
	            if (inpMan.KeyDown(Key.Minus) && zoomin == true && sublightOnly == false)
    	        {
        	    	sprMan.RemoveSprite(minimapSprite);
            		minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
            		minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
	            	minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
	            	AssignTextureToScreen(minimapSprite.texture);
    	        	minimapSprite.x = -16.725f;
        	    	minimapSprite.y = -13.075f;
            		
        	    	// remove the tracker if the ship is not within the new view, or add it if it is
	            	if (trackerZoomin == true)
	            	{
	            		trackerCoordX *= 0.1262f;
	            		trackerCoordY *= 0.1262f;
    	        		sprMan.RemoveSprite(trackerSprite);
    	        		trackerSprite = sprMan.AddOverlaySprite("default.bmp");
        	    		trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            			trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            			trackerSprite.x = trackerCoordX;
            			trackerSprite.y = trackerCoordY;
            			AssignTextureToScreen(trackerSprite.texture);
            			trackerSprite.AttachTo(minimapSprite, true);
	            	}
        	    	else
            		{
            			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
	            		trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
    	        		trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
        	    		trackerSprite.relX = trackerCoordX;
            			trackerSprite.relY = trackerCoordY;
            			AssignTextureToScreen(trackerSprite.texture);
            			trackerSprite.AttachTo(minimapSprite, true);
            		}
            		zoomin = false;
            		
            		// attach the planet marker sprite if it should be showing now
            		switch(targetPlanet)
            		{
            			case 3:  
            				PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            				break;
            			case 4:
            				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            				break;
            			default:
            				break;
            		}
            	}
            
	            // zoom in the minimap when the zoom in button is clicked
	            if(cursor.primaryDown)
    	        {
        	    	if (cursor.IsOn(zoominButtonBounds) && zoomin == false && sublightOnly == false)
            		{
            			sprMan.RemoveSprite(minimapSprite);
	            		minimapSprite = sprMan.AddOverlaySprite("minimapzoomin.png");
    	        		minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
        	    		minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
        	    		AssignTextureToScreen(minimapSprite.texture);
            			minimapSprite.x = -16.725f;
            			minimapSprite.y = -13.075f;
            		
            			// remove the tracker if the ship is not within the new view, or add it if it is
	            		if (trackerZoomin == false)
    	        			sprMan.RemoveSprite(trackerSprite);
        	    		else
            			{
            				trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
	            			trackerSprite.relX = trackerCoordX;
    	        			trackerSprite.relY = trackerCoordY;
    	        			AssignTextureToScreen(trackerSprite.texture);
    	        			trackerSprite.AttachTo(minimapSprite, true);
        	    		}
            			zoomin = true; 
            			
            			// attach the planet marker sprite if it should be showing now
            			switch(targetPlanet)
            			{
	            			case 1:  
    	        				PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
        	    				break;
            				case 2:
            					PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            					break;
            				default:
            					break;
	            		}
            		}
            	
        	    	// zoom out the minimap when the zoom out button is clicked
    	        	if (cursor.IsOn(zoomoutButtonBounds) && zoomin == true && sublightOnly == false)
        	    	{
            			sprMan.RemoveSprite(minimapSprite);
            			minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
            			minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
	            		minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
	            		AssignTextureToScreen(minimapSprite.texture);
    	        		minimapSprite.x = -16.725f;
        	    		minimapSprite.y = -13.075f;
            		
        	    		// remove the tracker if the ship is not within the new view, or add it if it is
            			if (trackerZoomin == true)
            				sprMan.RemoveSprite(trackerSprite);
            			else
	            		{
    	        			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
        	    			trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.relX = trackerCoordX;
            				trackerSprite.relY = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
	            		}
    	        		zoomin = false;  
    	        		
    	        		// attach the planet marker sprite if it should be showing now
	            		switch(targetPlanet)
    	        		{
        	    			case 3:  
            					PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            					break;
            				case 4:
            					PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            					break;
	            			default:
    	        				break;
        	    		}
        	    	}
	            }       
            
	            // update the trackers position when the two trackerCoord values start changing
	            trackerSprite.relX = trackerCoordX;
    	        trackerSprite.relY = trackerCoordY;
    	        #endregion
            
            	#region navigation functions for tracking beacon
            	
            		#region map is zoomed in and ship is within inner system
            		if (zoomin == true && trackerZoomin == true && sublightOnly == false)
            		{
	            		if (trackerCoordX > 3.25)
    	        		{
        	    			trackerCoordX = (trackerCoordX * 0.1262f);
	        		    	trackerCoordY = (trackerCoordY * 0.1262f);
    		        	
	    		        	sprMan.RemoveSprite(minimapSprite);
    	        			minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
        		    		minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            				minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            				minimapSprite.x = -16.725f;
            				minimapSprite.y = -13.075f;
            				AssignTextureToScreen(minimapSprite.texture);
	            			sprMan.RemoveSprite(trackerSprite);
    	        			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
        	    			trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
            				zoomin = false;
		            		trackerZoomin = false;
		            		
		            		// attach the planet marker sprite if it should be showing now
            				switch(targetPlanet)
		            		{
        		    			case 3:  
            						PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            						break;
		            			case 4:
        		    				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            						break;
            					default:
		            				break;
        		    		}
    	        		}
        	    		
            			if (trackerCoordX < -3.25)
	            		{
    	        			trackerCoordX = (trackerCoordX * 0.1262f);
    		        		trackerCoordY = (trackerCoordY * 0.1262f);
            			
	            			sprMan.RemoveSprite(minimapSprite);
    	        			minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
        	    			minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            				minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            				minimapSprite.x = -16.725f;
	            			minimapSprite.y = -13.075f;
	            			AssignTextureToScreen(minimapSprite.texture);
    	        			sprMan.RemoveSprite(trackerSprite);
        	    			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
	            			zoomin = false;
    	        			trackerZoomin = false;
    	        			
    	        			// attach the planet marker sprite if it should be showing now
            				switch(targetPlanet)
		            		{
        		    			case 3:  
            						PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            						break;
		            			case 4:
        		    				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            						break;
            					default:
		            				break;
        		    		}
        	    		}
            		
	            		if (trackerCoordY > 2.508)
    	        		{
        	    			trackerCoordX = (trackerCoordX * 0.1262f);
    		        		trackerCoordY = (trackerCoordY * 0.1262f);
            			
	            			sprMan.RemoveSprite(minimapSprite);
    	        			minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
        	    			minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            				minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            				minimapSprite.x = -16.725f;
	            			minimapSprite.y = -13.075f;
	            			AssignTextureToScreen(minimapSprite.texture);
    	        			sprMan.RemoveSprite(trackerSprite);
        	    			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
	            			zoomin = false;
		            		trackerZoomin = false;
		            		
		            		// attach the planet marker sprite if it should be showing now
            				switch(targetPlanet)
		            		{
        		    			case 3:  
            						PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            						break;
		            			case 4:
        		    				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            						break;
            					default:
		            				break;
        		    		}
        	    		}
            			
            			if (trackerCoordY < -2.508)
            			{
	            			trackerCoordX = (trackerCoordX * 0.1262f);
    		        		trackerCoordY = (trackerCoordY * 0.1262f);
    	        		
	    	        		sprMan.RemoveSprite(minimapSprite);
    	        			minimapSprite = sprMan.AddOverlaySprite("minimapzoomout.png");
        	    			minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            				minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            				minimapSprite.x = -16.725f;
            				minimapSprite.y = -13.075f;
            				AssignTextureToScreen(minimapSprite.texture);
            				sprMan.RemoveSprite(trackerSprite);
	            			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
    	        			trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
        	    			trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
            				zoomin = false;
            				trackerZoomin = false;
            				
            				// attach the planet marker sprite if it should be showing now
            				switch(targetPlanet)
		            		{
        		    			case 3:  
            						PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            						break;
		            			case 4:
        		    				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            						break;
            					default:
		            				break;
        		    		}
	            		}
    	        	}
            		#endregion
            	
            		#region map is zoomed out and ship is within inner system
            		if (zoomin == false && trackerZoomin == true && sublightOnly == false)
            		{            				
            			if (trackerCoordX > 0.41015)
    	        		{    		 
            				sprMan.RemoveSprite(trackerSprite);
    	        			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
        	    			trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
		            		trackerZoomin = false;      				            		
    	        		}
        	    		
            			if (trackerCoordX < -0.41015)
	            		{       
            				sprMan.RemoveSprite(trackerSprite);
        	    			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
    	        			trackerZoomin = false;
        	    		}
            		
            			if (trackerCoordY > 0.316572)
    	        		{     
            				sprMan.RemoveSprite(trackerSprite);
	            		    trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
		            		trackerZoomin = false;
        	    		}
            			
            			if (trackerCoordY < -0.316572)
            			{
            				sprMan.RemoveSprite(trackerSprite);
	            			trackerSprite = sprMan.AddOverlaySprite("default.bmp");
    	        			trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
        	    			trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
            				trackerZoomin = false;
            			}
            		}
            		#endregion

            		#region map is zoomed in and ship is within outer system
            		if (zoomin == true && trackerZoomin == false && sublightOnly == false)
            		{
            			if (trackerCoordX > 3.25)
            				trackerCoordX = 3.25f;
            			if (trackerCoordX < -3.25)
            				trackerCoordX = -3.25f;
            			if (trackerCoordY > 2.508)
            				trackerCoordY = 2.508f;
            			if (trackerCoordY < -2.65)
            				trackerCoordY = -2.65f;            			
            			
            			if (trackerCoordX > -0.41015 && trackerCoordX < 0.41015
            			    && trackerCoordY < 0.316572 && trackerCoordY > -0.316572)
            			{
            				trackerCoordX = (trackerCoordX / 0.1262f);
            				trackerCoordY = (trackerCoordY / 0.1262f);
	    	        		    		        		
            				trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
            				trackerZoomin = true;   					
            			}
         
            		}
            		#endregion
            		
            		#region map is zoomed out and ship is within outer system
            		if (zoomin == false && trackerZoomin == false && sublightOnly == false)
            		{
            			if (trackerCoordX > 3.25)
            				trackerCoordX = 3.25f;
            			if (trackerCoordX < -3.25)
            				trackerCoordX = -3.25f;
            			if (trackerCoordY > 2.508)
            				trackerCoordY = 2.508f;
            			if (trackerCoordY < -2.65)
            				trackerCoordY = -2.65f;            			
            			
            			if (trackerCoordX > -0.41015 && trackerCoordX < 0.41015
            			    && trackerCoordY < 0.316572 && trackerCoordY > -0.316572)
            			{
            				trackerCoordX = (trackerCoordX / 0.1262f);
            				trackerCoordY = (trackerCoordY / 0.1262f);
	    	        		    		        		
            				sprMan.RemoveSprite(minimapSprite);
            				minimapSprite = sprMan.AddOverlaySprite("minimapzoomin.png");
            				minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
            				minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            				minimapSprite.x = -16.725f;
            				minimapSprite.y = -13.075f;
            				AssignTextureToScreen(minimapSprite.texture);
            				sprMan.RemoveSprite(trackerSprite);
            				trackerSprite = sprMan.AddOverlaySprite("default.bmp");
            				trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.x = trackerCoordX;
            				trackerSprite.y = trackerCoordY;
            				AssignTextureToScreen(trackerSprite.texture);
            				trackerSprite.AttachTo(minimapSprite, true);
            				zoomin = true;
            				trackerZoomin = true;
            				
            				// attach the planet marker sprite if it should be showing now
            				switch(targetPlanet)
		            		{
        		    			case 1:  
            						PlanetMarkerSpawn(-1.9125f, 1.55f, 0.365f);
            						break;
		            			case 2:
        		    				PlanetMarkerSpawn(1.315f, -0.25f, 0.6f);            				
            						break;
            					default:
		            				break;
        		    		}
            			}
         
            		}
            		#endregion
            	
            	#endregion

            	#region functions for entering system map and movement within
            		
            		#region calculates distances between the tracker and selected object            		
	            	// calculates the distance between the tracker and the selected
    	        	// destination
        	    	if (sublightOnly == false && trackerZoomin == true)
            		{
            			switch (targetPlanet)
	            		{
    	        			case 1:
        	    				trackerDistance = (Math.Abs(trackerCoordX + 1.9125f) +
            				        	           Math.Abs(trackerCoordY - 1.55f));
            					break;
            				case 2:
            					trackerDistance = (Math.Abs(trackerCoordX - 1.315f) +
            			    	    	           Math.Abs(trackerCoordY + 0.25f));
		            			break;	
    		        		default:
        		    			break;
            			}
            		}

		            if (sublightOnly == false && trackerZoomin == false)
    		        {
        		    	switch (targetPlanet)
            			{
            				case 3:
            					trackerDistance = (Math.Abs(trackerCoordX + 1.9125f) +
            					                   Math.Abs(trackerCoordY - 1.55f));
	            				break;
	    	        		case 4:
		            			trackerDistance = (Math.Abs(trackerCoordX - 1.315f) +
        	    			        	           Math.Abs(trackerCoordY + 0.25f));
        		    			break;	
            				default:
            					break;
		            	}
    		        }
		            
	            	#endregion
	            
	            	#region enter the system map and load all objects within
		            // detection of planet collision and prompt to enter planetary system map
		            if (trackerDistance < 0.25 && targetPlanet > 0 && sublightOnly == false)
	    	        {
	        	    	if (trackerZoomin == true && targetPlanet < 3 || trackerZoomin 
	            		   == false && targetPlanet > 2)
	            		{
			            	// when the tracker is close enough to a planet, run the functions
			            	// for dropping out of warp, as well as load the new map plus any
			            	// planets moons that are now within view
	    		        	sublightOnly = true;
    	    		    	warping = false;
        	    			autoPilot = false;
            				stopped = false;
		            		turnTimer = 0;
    		        		
	    		        	sprMan.RemoveSprite(warpbackgroundSprite);
    	    		    	sprMan.RemoveSprite(minimapSprite);
        	    			sprMan.RemoveSprite(trackerSprite);
        	    			sprMan.RemoveSprite(planetmarkerSprite);
        	    	
			            	minimapSprite = sprMan.AddOverlaySprite("systemmap.png");
    			        	minimapSprite.sclX = minimapSprite.texture.sizeX * 0.0158f;
        			   	 	minimapSprite.sclY = minimapSprite.texture.sizeY * 0.0162f;
            				minimapSprite.x = -16.725f;
            				minimapSprite.y = -13.075f;
	            			AssignTextureToScreen(minimapSprite.texture);
	            	
			            	trackerSprite = sprMan.AddOverlaySprite("default.bmp");
    			        	trackerSprite.sclX = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
        			    	trackerSprite.sclY = trackerSprite.texture.sizeX * (sizeCoefficient * 2);
            				trackerSprite.AttachTo(minimapSprite, true);
            				AssignTextureToScreen(trackerSprite.texture);        			            			            		            	
            				
            				switch(targetPlanet)
	            			{
    	        				case 1:
        	    					trackerCoordX = (trackerCoordX + 1.9125f) * 10;
    	    	    				trackerCoordY = (trackerCoordY - 1.55f) * 10;
            						break;
            					case 2:
            						trackerCoordX = (trackerCoordX - 1.315f) * 10;
    	        					trackerCoordY = (trackerCoordY + 0.25f) * 10;
            						break;
	            				case 3:
    	        					trackerCoordX = (trackerCoordX + 1.9125f) * 10;
    		        				trackerCoordY = (trackerCoordY - 1.55f) * 10;
            						break;
	            				case 4:
    	        					trackerCoordX = (trackerCoordX - 1.315f) * 10;
    		        				trackerCoordY = (trackerCoordY + 0.25f) * 10;
            						break;
            					default:
            						break;
            				}
            			
	            			planet1Sprite = sprMan.AddSprite("defaultcircle.png");
    	        			planet1Sprite.sclX *= 4.0f;
        			   	 	planet1Sprite.sclY *= 4.0f;
        			   	 	planet1Sprite.x = (trackerCoordX * -25.1f) + 1.255f;
        			   	 	planet1Sprite.y = (trackerCoordY * -25.1f) + 3.245f;
        		   		 	planet1Sprite.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
        					planet1Sprite.tintGreen = 0;
		    				planet1Sprite.tintRed = 255;
    	    		   	 	AssignTextureToScreen(planet1Sprite.texture);
        		   	 	
        	    			planet1Moon1Sprite = sprMan.AddSprite("defaultcircle.png");
            				planet1Moon1Sprite.sclX *= 1.745f;
        			   	 	planet1Moon1Sprite.sclY *= 1.745f;
        		   		 	planet1Moon1Sprite.x = (trackerCoordX * -25.1f) - 42.25f;
        		   	 		planet1Moon1Sprite.y = (trackerCoordY * -25.1f) - 1.8f;
	        		   	 	planet1Moon1Sprite.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
    	    				planet1Moon1Sprite.tintGreen = 0;
	    					planet1Moon1Sprite.tintRed = 255;
        			   	 	AssignTextureToScreen(planet1Moon1Sprite.texture);
            			
            				planet1Moon2Sprite = sprMan.AddSprite("defaultcircle.png");
            				planet1Moon2Sprite.sclX *= 1.745f;
        		   	 		planet1Moon2Sprite.sclY *= 1.745f;
	        		   	 	planet1Moon2Sprite.x = (trackerCoordX * -25.1f) + 21.0f;
    	    		   	 	planet1Moon2Sprite.y = (trackerCoordY * -25.1f) + 29.5f;
        			   	 	planet1Moon2Sprite.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
        					planet1Moon2Sprite.tintGreen = 0;
	    					planet1Moon2Sprite.tintRed = 255;
        		   		 	AssignTextureToScreen(planet1Moon2Sprite.texture);
            			
	            			playerNavAngle = playerSprite.rotZ;
    	        			sprMan.RemoveSprite(playerSprite);
        	    			playerSprite = sprMan.AddSprite("ship.png");
            				playerSprite.sclX = playerSprite.texture.sizeX * sizeCoefficient;
            				playerSprite.sclY = playerSprite.texture.sizeY * sizeCoefficient;
            				playerSprite.y = 4.25f;
            				playerSprite.rotZ = (float)playerNavAngle;
	            			AssignTextureToScreen(playerSprite.texture);
	        	    	            		
		    	        	playerXmov = 0.0f;
    		    	    	playerYmov = 0.0f;
        		    		currentPlanet = targetPlanet;
	            			targetPlanet = 0;
            	    	
			            	// reloads 150 default dust particles
    			        	for (int i = 0; i < 150; i++)
        			    	{
            					spawnCoordX = (float)random.Next( -200, 200 )/10;
	            				spawnCoordY = (float)random.Next( -180, 180 )/10;
    	        				spawnCount += 1;

	    	        			dustSprite = sprMan.AddParticle("dust.bmp");
    	    	    			dustSprite.sclX = dustSprite.texture.sizeX * sizeCoefficient;
	        	    			dustSprite.sclY = dustSprite.texture.sizeY * sizeCoefficient;
    	        				dustSprite.x = spawnCoordX;
        	    				dustSprite.y = spawnCoordY;
	        	    			AssignTextureToScreen(dustSprite.texture);
		        	    		dustSprite.rotZ = (float)random.Next( -200, 200 )/10;
    		        			dustSprite.customFunctions += new customFunction(ParticleControl);
        		    		}
            	    	
		            		// closes the viewscreen map if it's already open
		    	        	if (viewrodlSprite.y == -2.25)
    		    	    	{
						    	lowering = true;
        						viewscreenButtonLight.colorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg2;
        						viewscreenButtonLight.tintGreen = 0;
	    						viewscreenButtonLight.tintRed = 255;
	    	        		}  
		            	}
	    	        }
	            	#endregion
	            
	            	#region manage movement and collisions of all objects	            	
		            // if in a planetary map instead of the system map, regular movement
		            // causes the minimap tracker and the planets/moons to move
	    	        if (sublightOnly == true)
    	    	    {
        	    		trackerCoordX += (float)playerXmov/50 * TimeManager.secondDifference;
            			trackerCoordY += (float)playerYmov/50 * TimeManager.secondDifference;
	            		if (borderCollisionX == false)
    	        		{
	    	        		planet1Sprite.x -= (float)playerXmov/2 * TimeManager.secondDifference;    	        		
        		    		planet1Moon1Sprite.x -= (float)playerXmov/2 * TimeManager.secondDifference;            			
            				planet1Moon2Sprite.x -= (float)playerXmov/2 * TimeManager.secondDifference;
            			}
            		
	            		if (borderCollisionY == false)
    	        		{
        	    			planet1Sprite.y -= (float)playerYmov/2 * TimeManager.secondDifference;
            				planet1Moon1Sprite.y -= (float)playerYmov/2 * TimeManager.secondDifference;
            				planet1Moon2Sprite.y -= (float)playerYmov/2 * TimeManager.secondDifference;
            			}   
	            		
	            		// simulates gravity from the planet and moons and pulls the player
	            		// towards them
	            		if (speed < 12 && inpMan.KeyDown(Key.Space) == false)
						{
		            		planet1Xdiff = planet1Sprite.x - playerSprite.x;
							planet1Ydiff = planet1Sprite.y - playerSprite.y;							
							planet1Angle = Math.Atan2(planet1Ydiff, planet1Xdiff);
							playerXmov += (0.1 / Math.Abs(playerSprite.x - planet1Sprite.x))*(Math.Cos(planet1Angle));
							playerYmov += (0.1 / Math.Abs(playerSprite.y - planet1Sprite.y))*(Math.Sin(planet1Angle));
							
							planet1Moon1Xdiff = planet1Sprite.x - playerSprite.x;
							planet1Moon1Ydiff = planet1Sprite.y - playerSprite.y;							
							planet1Moon1Angle = Math.Atan2(planet1Moon1Ydiff, planet1Moon1Xdiff);
							playerXmov += (0.05 / Math.Abs(playerSprite.x - planet1Sprite.x))*(Math.Cos(planet1Moon1Angle));
							playerYmov += (0.05 / Math.Abs(playerSprite.y - planet1Sprite.y))*(Math.Sin(planet1Moon1Angle));
							
							planet1Moon2Xdiff = planet1Sprite.x - playerSprite.x;
							planet1Moon2Ydiff = planet1Sprite.y - playerSprite.y;							
							planet1Moon2Angle = Math.Atan2(planet1Moon2Ydiff, planet1Moon2Xdiff);
							playerXmov += (0.05 / Math.Abs(playerSprite.x - planet1Sprite.x))*(Math.Cos(planet1Moon2Angle));
							playerYmov += (0.05 / Math.Abs(playerSprite.y - planet1Sprite.y))*(Math.Sin(planet1Moon2Angle));
	            		}						
						else
						{
							// keeps speed under 12 so direction doesn't become locked
							playerXmov *= 0.995;
							playerYmov *= 0.995;
						}
            		
	            		// detects if ship itself collides with a planet or moon and reverse
    	        		// the ships direction
        	    		if (Collisions.circleCollision(planet1Sprite, playerSprite))
            			{
        	    			if (targetPlanet == 1)
        	    			{
        	    				IsActivityFinished = true;
               					NextScreen = "GameName.Screens.PlanetScreen";
        	    			}
	            		}
    	        		else if (Collisions.circleCollision(planet1Moon1Sprite, playerSprite))
        	    		{
    	        			if (targetPlanet == 2)
        	    			{
        	    				IsActivityFinished = true;
               					NextScreen = "GameName.Screens.PlanetScreen";
        	    			}
            			}            		
	            		else if (Collisions.circleCollision(planet1Moon2Sprite, playerSprite))
    	        		{
	            			if (targetPlanet == 3)
        	    			{
        	    				IsActivityFinished = true;
               					NextScreen = "GameName.Screens.PlanetScreen";
        	    			}
            			}          	
            		
	            		// keeps tracker within the minimap borders, and keeps the planets
    	        		// from moving any further if the tracker moves against these borders
        	    		if (trackerCoordX > 3.25)
            			{
	            			trackerCoordX = 3.25f;
	            			borderCollisionX = true;
	            		}
    		        	else if (trackerCoordX < -3.25)
    		        	{
        		    		trackerCoordX = -3.25f;
        	    			borderCollisionX = true;
    	        		}
	    	        	else
    		        	{
    		        		borderCollisionX = false;
    	    	    	}
            			if (trackerCoordY > 2.508)
	            		{
    	        			trackerCoordY = 2.508f;
        	    			borderCollisionY = true;
            			}
	            		else if (trackerCoordY < -2.65)
	            		{
	        	    		trackerCoordY = -2.65f;
    	    	    		borderCollisionY = true;
	    	        	}
	        	    	else
	            		{	            		
	            			borderCollisionY = false;
		            	}
		            }
	            	#endregion
	            	
            	#endregion
            	
            #endregion
                        
            #region autopilot functions
            
            	#region autopilot activation and rotation
            	if (inpMan.KeyDown(Key.Q) && warping == false && sublightOnly == false) 
            	{
            		turnTimer = 0;
	            	autoPilot = true;	
            	}            	
            	
            	// stops the ship first before performing any turning
            	if (autoPilot == true && stopped == false)
            	{
            		playerXmov *= 0.98;
					playerYmov *= 0.98;
					if (speed < 0.2)
					{
						// come to full stop
						playerXmov = 0;
						playerYmov = 0;
						stopped = true;
					}
            	}
            	
            	// automates all movement from here on out, unless player wrests control with
            	// the use of any movement control
    	        if (trackerZoomin == true && stopped == true && sublightOnly == false)
        	    {
    	        	// determines which planet is selected and point the ship towards it
            		switch (targetPlanet)
    	        	{
        	    		case 1:
	            			playerXdiff = -1.9125f - trackerCoordX;
							playerYdiff = 1.55f - trackerCoordY;
							
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);            				
            				break;
	            		case 2:
    	        			playerXdiff = 1.315f - trackerCoordX;
							playerYdiff = -0.25f - trackerCoordY;
							
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
	            			break;
    		       		case 3:
	            			playerXdiff = (-1.9125f / 0.1262f) - trackerCoordX;
	            			playerYdiff = (1.55f / 0.1262f) - trackerCoordY;
    			       		
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
	            			break;
	        	   		case 4:
	            			playerXdiff = (1.315f / 0.1262f) - trackerCoordX;
	            			playerYdiff = (-0.25f / 0.1262f) - trackerCoordY;
    			       		
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
	            			break;
    	        		default:
        	   				break;
	        	   	}
    	        }
            	
	            if (trackerZoomin == false && stopped == true && sublightOnly == false)
    	        {
        	    	switch (targetPlanet)
    	    	   	{
        	    		case 1:
        	    			playerXdiff = (-1.9125f * 0.1262f) - trackerCoordX;
        	    			playerYdiff = (1.55f * 0.1262f) - trackerCoordY;
	            			
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);						
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
	            			FRB.Instructions.InstructionManager.RotateSpriteToAccurate
    	        				( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
        	    			break;
            			case 2:
        	    			playerXdiff = (1.315f * 0.1262f) - trackerCoordX;
        	    			playerYdiff = (-0.25f * 0.1262f) - trackerCoordY;
            			
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
            				break;
    	        		case 3:
	            			playerXdiff = -1.9125f - trackerCoordX;
							playerYdiff = 1.55f - trackerCoordY;    		        		
							
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
	           				break;
	            		case 4:
		           			playerXdiff = 1.315f - trackerCoordX;
							playerYdiff = -0.25f - trackerCoordY; 
							
							playerNavAngle = Math.Atan2(playerYdiff, playerXdiff);
							angleToRotate = CommonFunctions.AngleToAngle(playerSprite.rotZ, (float)playerNavAngle);
							secondsToTake = Math.Abs(angleToRotate / 5.0f);
							if (turnTimer == 0)
							{
								turnTimer = secondsToTake;
								turnTime = TimeManager.currentTick;
							}
            				FRB.Instructions.InstructionManager.RotateSpriteToAccurate
            					( playerSprite, 0, 0, (float)playerNavAngle, secondsToTake);
            				break;
            			default:
            				break;
	           		}    	        	
            	}	            
            	#endregion
            
            	#region auto movement of ship and warping functions
	            if (autoPilot == true && stopped == true && targetPlanet > 0)
    	        {
	            	// autopilot warping uses the same functions as normal movement and warping
	            	if (warping == false && TimeManager.SecondsSince(turnTime) >= turnTimer)
	            	{	            		
        	    		if (speed < 12)
						{
							// increments the x and y vectors based on ships current angle
							playerXmov += (float)0.08f*(Math.Cos(playerSprite.rotZ));
	    	      			playerYmov += (float)0.08f*(Math.Sin(playerSprite.rotZ));
						}
						else
						{
							// keeps speed under 12 so direction doesn't become locked
							playerXmov *= 0.995;
							playerYmov *= 0.995;
						}
	            	}
	            	
	            	// warp meter is full and warp is engaged, change backround and begin loading particles
    	        	if (warpmeterSprite.y > -13.5 && warping == false && sublightOnly == false)
        	    	{
    	        		autoPilot = false;
    	        		stopped = false;
            			warping = true;
            			warpCount = 0;
            			warpTimer = TimeManager.currentTick;
	            		warpbackgroundSprite = sprMan.AddUnorderedSprite("warpbackground.bmp");
    	        		warpbackgroundSprite.sclX = warpbackgroundSprite.texture.sizeX * 0.0162f;
        	   			warpbackgroundSprite.sclY = warpbackgroundSprite.texture.sizeY * 0.0162f;
           				
           				// loads 50 warp particles to random positions
           				for (int h = 0; h < 50; h++)
	            		{
    	        			spawnCoordX = (float)random.Next( -200, 200 )/10;
        	    			spawnCoordY = (float)random.Next( -180, 180 )/10;
            				warpCount += 1;

    	        			warpparticleSprite = sprMan.AddParticle("warpparticle.png");
        	    			warpparticleSprite.sclX = warpparticleSprite.texture.sizeX * sizeCoefficient;
            				warpparticleSprite.sclY = warpparticleSprite.texture.sizeY * sizeCoefficient;
            				warpparticleSprite.x = spawnCoordX;
            				warpparticleSprite.y = spawnCoordY;
            				warpparticleSprite.rotZ = playerSprite.rotZ;
            				warpparticleSprite.customFunctions += new customFunction(WarpParticleControl);
           				}
            		}
					
	            	if (speed > 11.5 && Math.Abs(angleDifference) < 2*Math.PI*.025f && sublightOnly == false)
	            	{	            		
	            		if (warpmeterSprite.y < -13.5)
            			{
            				warpmeterSprite.y += 5 * TimeManager.secondDifference;
            			}
	            	}
            	}
            	#endregion
            	            	
            #endregion
        
            textMan.RemoveText(debugText1);
            debugText1 = textMan.AddText(playerXmov.ToString());
        }

        public override void Destroy()
        {
            base.Destroy();
        }
        
        // controls all dust particles for movement and destruction
        public void ParticleControl(Sprite sprite, SpriteManager sprMan)
        {   
        	// move dust based on the current values for the ships speed
        	sprite.x -= ((float)playerXmov * ((sprite.rotZ/10)+1)) * TimeManager.secondDifference;
        	sprite.y -= ((float)playerYmov * ((sprite.rotZ/10)+1)) * TimeManager.secondDifference;
        	  
        	// removes dust particles if they touch a screen border, or if warp is active
        	if(sprite.x > 22)
        	{
        		sprMan.RemoveSprite(sprite);
        		spawnCount--;
        	}
        	if(sprite.x < -22)
        	{
        		sprMan.RemoveSprite(sprite);
        		spawnCount--;
        	}
        	if(sprite.y > 18)
        	{
        		sprMan.RemoveSprite(sprite);
        		spawnCount--;
        	}
        	if(sprite.y < -18)
        	{
        		sprMan.RemoveSprite(sprite);
        		spawnCount--;
        	}
        	if (warping == true)
        	{
        		sprMan.RemoveSprite(sprite);
        		spawnCount = 0;
        	}
        }
        
        // controls all warp particles for movement and destruction
        public void WarpParticleControl(Sprite sprite, SpriteManager sprMan)
        {    	
        	// moves particles based on a set speed, usually ship speed when entering
        	// warp
        	sprite.x -= ((float)playerXmov * 6) * TimeManager.secondDifference;
        	sprite.y -= ((float)playerYmov * 6) * TimeManager.secondDifference;
        	
        	// removes warp particles if they touch a screen border, or if warp is
        	// deactivated
        	if(sprite.x > 22)
        	{
        		sprMan.RemoveSprite(sprite);
        		warpCount--;
        	}
        	if(sprite.x < -22)
        	{
        		sprMan.RemoveSprite(sprite);
        		warpCount--;
        	}
        	if(sprite.y > 18)
        	{
        		sprMan.RemoveSprite(sprite);
        		warpCount--;
        	}
        	if(sprite.y < -18)
        	{
        		sprMan.RemoveSprite(sprite);
        		warpCount--;
        	}
        	if (warping == false)
        	{
        		sprMan.RemoveSprite(sprite);
        		warpCount = 0;
        	}
        }
        
        // controls the viewscreen once opened
        public void ViewscreenControl(Sprite sprite, SpriteManager sprMan)
        {
        	
        	#region cause viewscreen to open up at moment of creation
        	// once rods are raised the viewscreen is attached and this function starts
        	// to run, first it stretches it out along the X axis, and then the Y, once
        	// done "raised" is set to true and the next steps are executed
        	if (raised == false)
        	{
        		if (sprite.sclX < 36)
        			sprite.sclX += 150 * TimeManager.secondDifference;
        		else
        			sprite.sclX = 36;
        	
        		if (sprite.sclX == 36 && sprite.sclY < 36)
        			sprite.sclY += 150 * TimeManager.secondDifference;
        		else if (sprite.sclY > 36)
        		{
	        		sprite.sclY = 36;
    	    		raised = true;
        		}
        	}
        	#endregion
        	
        	#region load all of the invisible clickable buttons onto the viewscreen 
        	// buttons for the system map view
        	if (viewbuttonsloaded == false && raised == true && sublightOnly == false)
        	{
        		planetButton1 = sprMan.AddOverlaySprite("defaultcircle.png");        	
        		planetButton1.sclX = 2.05f;
        		planetButton1.sclY = 2.05f;
        		planetButton1.x = -13.9f;
        		planetButton1.y = 9.65f;
        		planetButton1.fade = 255;
        		AssignTextureToScreen(planetButton1.texture);
        		
        		
        		planetButton2 = sprMan.AddOverlaySprite("defaultcircle.png");
        		planetButton2.sclX = 2.45f;
        		planetButton2.sclY = 2.45f;
        		planetButton2.x = -4.55f;
        		planetButton2.y = 1.225f;
        		planetButton2.fade = 255;
        		AssignTextureToScreen(planetButton2.texture);
        		
        		planetButton3 = sprMan.AddOverlaySprite("defaultcircle.png");
        		planetButton3.sclX = 1.95f;
        		planetButton3.sclY = 1.95f;
        		planetButton3.x = 5.75f;
        		planetButton3.y = 9.75f;
        		planetButton3.fade = 255;
        		AssignTextureToScreen(planetButton3.texture);
        		
        		planetButton4 = sprMan.AddOverlaySprite("defaultcircle.png");
        		planetButton4.sclX = 1.45f;
        		planetButton4.sclY = 1.45f;
        		planetButton4.x = 12.1f;
        		planetButton4.y = 0.425f;
        		planetButton4.fade = 255;
        		AssignTextureToScreen(planetButton4.texture);
        		
        		viewbuttonsloaded = true;
        	}
        	
       		// buttons for the planetary map view
        	if (viewbuttonsloaded == false && raised == true && sublightOnly == true)
        	{
        		planetButton1 = sprMan.AddOverlaySprite("defaultcircle.png");        	
        		planetButton1.sclX = 2.75f;
        		planetButton1.sclY = 2.75f;
        		planetButton1.x = 1.25f;
        		planetButton1.y = 4.0f;
        		planetButton1.fade = 255;
        		AssignTextureToScreen(planetButton1.texture);
        		
        		planetButton2 = sprMan.AddOverlaySprite("defaultcircle.png");
        		planetButton2.sclX = 1.2f;
        		planetButton2.sclY = 1.2f;
        		planetButton2.x = -9.3f;
        		planetButton2.y = 2.0f;
        		planetButton2.fade = 255;
        		AssignTextureToScreen(planetButton2.texture);
        		
        		planetButton3 = sprMan.AddOverlaySprite("defaultcircle.png");
        		planetButton3.sclX = 1.0f;
        		planetButton3.sclY = 1.0f;
        		planetButton3.x = 5.8f;
        		planetButton3.y = 9.0f;
        		planetButton3.fade = 255;
        		AssignTextureToScreen(planetButton3.texture);

        		viewbuttonsloaded = true;
        	}
        	#endregion
        	
        	#region functions for clicking planet buttons and setting destinations
        	// once buttons are loaded clicking them stops autopilot if it's active,
        	// and sets the target planet, marking it on the minimap(located in the
        	// minimap region)
        	if (viewbuttonsloaded == true && sublightOnly == false)
        	{
        		if (inpMan.KeyDown(Key.D1))
        		{
        			targetPlanet = 1;
        			playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;            		
            		turnTimer = 0;
            		
            		sprMan.RemoveSprite(planetmarkerSprite);
            		if (zoomin == true)
            		{
            			PlanetMarkerSpawn( -1.9125f, 1.55f, 0.365f);
            		}
        		}
        		if (inpMan.KeyDown(Key.D2))
        		{
        			targetPlanet = 2;
        			playerSprite.ClearInstructions();        			
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
            		
            		sprMan.RemoveSprite(planetmarkerSprite);
            		if (zoomin == true)
            		{
            			PlanetMarkerSpawn( 1.315f, -0.25f, 0.6f);
            		}
        		}
        		if (inpMan.KeyDown(Key.D3))
        		{
        			targetPlanet = 3;
        			playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
            		
            		sprMan.RemoveSprite(planetmarkerSprite);
            		if (zoomin == false)
            		{
	            		PlanetMarkerSpawn( -1.9125f, 1.55f, 0.365f);
            		}
        		}
        		if (inpMan.KeyDown(Key.D4))
        		{
        			targetPlanet = 4;
        			playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
            		
            		sprMan.RemoveSprite(planetmarkerSprite);
            		if (zoomin == false)
            		{
	            		PlanetMarkerSpawn( 1.315f, -0.25f, 0.6f);
            		}
        		}
        		
        		if(cursor.primaryDown)
            	{
	            	if (cursor.IsOn(planetButton1))
    	        	{
            			targetPlanet = 1;
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			
            			sprMan.RemoveSprite(planetmarkerSprite);
            			if (zoomin == true)
            			{
	            			PlanetMarkerSpawn( -1.9125f, 1.55f, 0.365f);
            			}
            		}
	            	if (cursor.IsOn(planetButton2))
    	        	{
            			targetPlanet = 2;
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			
            			sprMan.RemoveSprite(planetmarkerSprite);
            			if (zoomin == true)
            			{
		            		PlanetMarkerSpawn( 1.315f, -0.25f, 0.6f);
            			}
            		}
	            	if (cursor.IsOn(planetButton3))
    	        	{
            			targetPlanet = 3;
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			
            			sprMan.RemoveSprite(planetmarkerSprite);
            			if (zoomin == false)
            			{
		            		PlanetMarkerSpawn( -1.9125f, 1.55f, 0.365f);
            			}
            		}
	            	if (cursor.IsOn(planetButton4))
    	        	{
            			targetPlanet = 4;
            			playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			
            			sprMan.RemoveSprite(planetmarkerSprite);
            			if (zoomin == false)
            			{
		            		PlanetMarkerSpawn( 1.315f, -0.25f, 0.6f);
            			}
            		}
            	}
        	}
        	
        	// does the same as the above only in the planetary system map screen
        	if (viewbuttonsloaded == true && sublightOnly == true)
        	{
        		if (inpMan.KeyDown(Key.D1))
        		{
        			playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
        			targetPlanet = 1;
        			
        			PlanetMarkerSpawn( 0.05f, -0.05f, 0.605f);
        		}
        		if (inpMan.KeyDown(Key.D2))
        		{
        			playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
        			targetPlanet = 2;
        			
        			PlanetMarkerSpawn( -1.685f, -0.252f, 0.2f);
        		}
        		if (inpMan.KeyDown(Key.D3))
        		{
        			playerSprite.ClearInstructions();
            		autoPilot = false;
            		stopped = false;
            		turnTimer = 0;
        			targetPlanet = 3;
        			
        			PlanetMarkerSpawn( 0.85f, 1.01f, 0.2f);
        		}
        		
        		if(cursor.primaryDown)
            	{
	            	if (cursor.IsOn(planetButton1))
    	        	{
	            		playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			targetPlanet = 1;
            			
            			PlanetMarkerSpawn( 0.05f, -0.05f, 0.605f);
            		}
	            	if (cursor.IsOn(planetButton2))
    	        	{
	            		playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			targetPlanet = 2;
            			
            			PlanetMarkerSpawn( -1.685f, -0.252f, 0.2f);
            		}
	            	if (cursor.IsOn(planetButton3))
    	        	{
	            		playerSprite.ClearInstructions();
            			autoPilot = false;
            			stopped = false;
            			turnTimer = 0;
            			targetPlanet = 3;
            			
            			PlanetMarkerSpawn( 0.85f, 1.01f, 0.2f);
            		}
            	}
        	}
        	#endregion
        	
        	#region functions for removing everything and closing the viewscreen when prompted        	
        	if (lowering == true)
        	{      		  
        		sprMan.RemoveSprite(planetButton1);
        		sprMan.RemoveSprite(planetButton2);
        		sprMan.RemoveSprite(planetButton3);
        		sprMan.RemoveSprite(planetButton4);
        		
	        	if (viewscreenSprite.sclY > 0.1)
    	    		viewscreenSprite.sclY -= 150 * TimeManager.secondDifference;
        		else
        			viewscreenSprite.sclY = 0.09f;
        		
	        	if (viewscreenSprite.sclY < 0.1 && viewscreenSprite.sclX > 0.1)
        			viewscreenSprite.sclX -= 150 * TimeManager.secondDifference;
        		else if (viewscreenSprite.sclX < 0.1)
        		{
        			viewscreenSprite.sclX = 0.1f;
	        		raised = false;
	        		lowering = false;
	        		viewbuttonsloaded = false;
	        		viewrodlSprite.yVelocity = -90;
    	    		sprMan.RemoveSprite(sprite);
        		}
        	}
        	#endregion
        	
        }
        
        // respawns the planet market sprite during minimap transitions
        public void PlanetMarkerSpawn(float x, float y, float scl)
        {
        	sprMan.RemoveSprite(planetmarkerSprite);
      		planetmarkerSprite = sprMan.AddOverlaySprite("defaultcircle.png");   
			planetmarkerSprite.sclX = scl;
			planetmarkerSprite.sclY = scl;			
			planetmarkerSprite.AttachTo(minimapSprite, true);
			AssignTextureToScreen(planetmarkerSprite.texture);
			planetmarkerSprite.relX = x;
			planetmarkerSprite.relY = y;
			planetmarkerSprite.fade = 50;
        }
    }    
}