Example #1
0
        public Level(List<Collidable> collidableRef, float[] radiusArray, BasicModel[] asteroidModels, Planet levelPlanet, 
            Starbase playerStarBase, Starbase enemyStarBase, Skybox skybox, Dock dock, Sun sun, PlayerShip pShip, int amtAsteroids, 
            List<Objective> objectiveList, GraphicsDevice device, TimeSpan time, Vector3 minArea, Vector3 maxArea, Save save)
        {
            CollidableReference = collidableRef;
            _radiusArray = radiusArray;

            _asteroidList = new List<Asteroid>();
            _skybox = skybox;
            _asteroidModels = asteroidModels;
            _dock = dock;
            _randomVar = new Random();

            for (int i = 0; i < amtAsteroids; i++)
            {
                GenerateAsteroid(minArea, maxArea);
            }

            _levelSoundVoiceDump = new List<SoundVoice>();

            foreach (Objective obj in objectiveList)
            {
                obj.Completed += (object sender, EventArgs args) =>
                    {
                        //Vector3.Zero is used because position is irrelevant.
                        _levelSoundVoiceDump.Add(new SoundVoice(SoundType.None, Vector3.Zero, false, SoundVoiceType.Completed));
                    };
                obj.Failed += (object sender, EventArgs args) =>
                    {
                        _levelSoundVoiceDump.Add(new SoundVoice(SoundType.None, Vector3.Zero, false, SoundVoiceType.Failed));
                    };
            }

            pShip.LeftBattlefield += (object sender, EventArgs args) =>
                {
                    _levelSoundVoiceDump.Add(new SoundVoice(SoundType.None, Vector3.Zero, false, SoundVoiceType.Leaving));
                };

            _levelPlanet = levelPlanet;

            PlayerStarBase = playerStarBase;
            EnemyStarBase = enemyStarBase;

            ObjectiveList = objectiveList;
            _device = device;

            TimeRemaining = time;

            _sun = sun;
            StartGame += (object sender, EventArgs args) =>
                {
                    _levelSoundVoiceDump.Add(new SoundVoice(SoundType.None, Vector3.Zero, false, SoundVoiceType.Start));
                };

            WinGame += (object sender, EventArgs args) =>
                {
                    _levelSoundVoiceDump.Add(new SoundVoice(SoundType.None, Vector3.Zero, false, SoundVoiceType.Win));
                };

            LoseGame += (object sender, EventArgs args) =>
                {
                    _levelSoundVoiceDump.Add(new SoundVoice(SoundType.None, Vector3.Zero, false, SoundVoiceType.Lose));
                };
            StartGameEvent();

            CollidableReference.Add(PlayerStarBase);
            CollidableReference.Add(EnemyStarBase);
            CollidableReference.AddRange(_asteroidList);
            CollidableReference.Add(_dock);

            foreach(Objective obj in ObjectiveList)
            {
                CollidableReference.Add(obj);
            }

            _save = save;
        }
Example #2
0
        public void LoadingThread()
        {
            GameEngine.CollidableList.Clear();
            _save.Config.Win = false;
            _save.Config.End = false;
            _device = GraphicsDevice;
            // Create a new SpriteBatch, which can be used to draw textures.
            _spriteBatch = new SpriteBatch(GraphicsDevice);
            Texture2D[] Skywalls = { Game.Content.Load<Texture2D>(@"Game/Levels/Skybox/SkyBox_Back"), Game.Content.Load<Texture2D>(@"Game/Levels/Skybox/SkyBox_Bottom"), Game.Content.Load<Texture2D>(@"Game/Levels/Skybox/SkyBox_Front"),
                                       Game.Content.Load<Texture2D>(@"Game/Levels/Skybox/SkyBox_Left"), Game.Content.Load<Texture2D>(@"Game/Levels/Skybox/SkyBox_Right"), Game.Content.Load<Texture2D>(@"Game/Levels/Skybox/SkyBox_Top") };
            SkyboxTEST = new Skybox(_device, Skywalls, Game.Content.Load<Model>(@"Game/Levels/Skybox/Skybox"));

            Texture2D[] ExplosionArray = {
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen0"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen1"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen2"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen3"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen4"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen5"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen6"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen7"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen8"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen9"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen10"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen11"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen12"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet1/screen13")
                                         };

            Texture2D[] ExplosionArray2 = {
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen1"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen2"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen3"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen4"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen5"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen6"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen7"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen8"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen9"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen10"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen11"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen12"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen13"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen14"),
                                             Game.Content.Load<Texture2D>(@"Game/Images/Explosions/ExplosionSet2/screen15")
                                         };
            #region Spawn Manager
            List<ShipProfile> shipProfiles = new List<ShipProfile>();
            shipProfiles.Add(new ShipProfile(6, 5, 2, 2));
            shipProfiles.Add(new ShipProfile(4, 5, 3, 3));
            shipProfiles.Add(new ShipProfile(2, 4, 6, 6));
            SpriteFont spawnerFont = Game.Content.Load<SpriteFont>(@"Game/Fonts/SpawnerFont");

            Texture2D[] arrows = { Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ArrowLeft"),
                                  Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ArrowLeftShaded"),
                                  Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ArrowRight"),
                                  Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ArrowRightShaded")
                                 };

            Texture2D[] bars = {
                                 Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/GreenBar"),
                                 Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/RedBar")
                             };

            Texture2D overlay = Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/Overlay");

            Texture2D[] shipImages = {
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ShipImage"),
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ShipImage"),
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Spawner/ShipImage")
                                     };

            SpawnerManager spawnerManager = new SpawnerManager(_device, shipProfiles, spawnerFont, arrows, bars, overlay, shipImages, 3);
            #endregion

            WeaponSystem2D weaponSystem2D = new WeaponSystem2D(GameEngine.CollidableList, CollidableType.PlayerBullet, 1f, SoundType.Player_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                0.25f, _device, 10, new Vector3(0, 0, 0), 150, 300, 0.001f);
            WeaponSystem2D weaponSystem2D2 = new WeaponSystem2D(GameEngine.CollidableList, CollidableType.PlayerBullet, 1f, SoundType.Player_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                0.25f, _device, 10, new Vector3(0, 0, 0), 100, 300, 0.001f);
            WeaponSystem2D weaponSystem2D3 = new WeaponSystem2D(GameEngine.CollidableList, CollidableType.PlayerBullet, 1f, SoundType.Player_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                0.25f, _device, 10, new Vector3(0, 0, 0), 75, 300, 0.001f);
            MissleSystem2D missleSystem2D = new MissleSystem2D(GameEngine.CollidableList, CollidableType.FriendMissle, 1f, SoundType.PlayerMissle, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"), 1f,
                _device, 10, new Vector3(0, 0, 0), 1400, 100, 0.0001f, 14, 600);

            Model playerModel1 = Game.Content.Load<Model>("Game/Models/Viper/bomber");
            float playermodelscale1 = 0.07f;

            //Player Configurations
            PlayerConfig[] playerConfigurations = new PlayerConfig[3];

            playerConfigurations[0] = new PlayerConfig(new BasicModel(playerModel1, playermodelscale1), 13, new Vector3(0, 0.5f, -7), weaponSystem2D, missleSystem2D, 15, 25, -25, 2, 1.5f, 1.5f, 1f);
            playerConfigurations[1] = new PlayerConfig(new BasicModel(Game.Content.Load<Model>(@"Game/Models/Viper/inceptor"), playermodelscale1), 10, new Vector3(0, 0.5f, -7), weaponSystem2D2, missleSystem2D, 5, 30, -30, 2, 2f, 2f, 1f);
            playerConfigurations[2] = new PlayerConfig(new BasicModel(Game.Content.Load<Model>(@"Game/Models/Viper/ghoul"), playermodelscale1), 5, new Vector3(0, 0.5f, -7), weaponSystem2D3, missleSystem2D, 2, 40, -40, 2f, 2.5f, 2.5f, 1f);

            PlayerShip playerShipTEST = new PlayerShip(GameEngine.CollidableList, CollidableType.FriendlyShip, playerModel1.Meshes.ToList()[0].BoundingSphere.Radius * playermodelscale1, playerModel1, new Vector3(800, 40, -200),
                _device, new Vector3(0, 0.5f, -7), playermodelscale1, -30, 30, 2, 2, 1.5f, 1f, weaponSystem2D, missleSystem2D, spawnerManager, playerConfigurations);

            Planet planet;
            //Setting up the planet for the mission.
            switch (_save.Config.Mission)
            {
                case 0:
                    planet = new Planet(Game.Content.Load<Model>("Game/Models/Planets/Planet2/earth"), new Vector3(2800, 0, 0), Quaternion.Identity, 0.01f, 15f);
                    break;
                case 1:
                    planet = new Planet(Game.Content.Load<Model>("Game/Models/Planets/Planet1/dradis"), new Vector3(-300, -2800, 1300), Quaternion.Identity, 0.01f, 120f);
                    break;
                case 2:
                    planet = new Planet(Game.Content.Load<Model>("Game/Models/Planets/Planet3/mars"), new Vector3(300, 2800, 1300), Quaternion.CreateFromAxisAngle(new Vector3(0,0,1), 2f), 0.01f, 60f);
                    break;
                default:
                    planet = new Planet(Game.Content.Load<Model>("Game/Models/Planets/Planet2/earth"), new Vector3(2800, 0, 0), Quaternion.Identity, 0.01f, 50f);
                    break;
            }

            Starbase playerstarbase;
            Model playerBaseModel;
            float playerBaseScale;
            //Setting up the playerbase for the mission.
            switch (_save.Config.Mission)
            {
                case 0:
                    playerBaseModel = Game.Content.Load<Model>("Game/Models/Starbase/PlayerBase/Station/Battlestation");
                    playerBaseScale = 25f;
                    playerstarbase = new Starbase(CollidableType.FriendBase, playerBaseModel.Meshes.ToList()[0].BoundingSphere.Radius * playerBaseScale, playerBaseModel, new Vector3(0, -300, -1000), Quaternion.Identity, playerBaseScale);
                    break;
                case 1:
                    playerBaseModel = Game.Content.Load<Model>("Game/Models/Starbase/PlayerBase/Station/Battlestation2");
                    playerBaseScale = 50f;
                    playerstarbase = new Starbase(CollidableType.FriendBase, playerBaseModel.Meshes.ToList()[0].BoundingSphere.Radius * playerBaseScale, playerBaseModel, new Vector3(0, -300, -1000), Quaternion.Identity, playerBaseScale);
                    break;
                case 2:
                    playerBaseModel = Game.Content.Load<Model>("Game/Models/Starbase/PlayerBase/Station/Battlestation2");
                    playerBaseScale = 50f;
                    playerstarbase = new Starbase(CollidableType.FriendBase, playerBaseModel.Meshes.ToList()[0].BoundingSphere.Radius * playerBaseScale, playerBaseModel, new Vector3(0, -300, -1000), Quaternion.Identity, playerBaseScale);
                    break;
                default:
                    playerBaseModel = Game.Content.Load<Model>("Game/Models/Starbase/PlayerBase/Station/Battlestation");
                    playerBaseScale = 25f;
                    playerstarbase = new Starbase(CollidableType.FriendBase, playerBaseModel.Meshes.ToList()[0].BoundingSphere.Radius * playerBaseScale, playerBaseModel, new Vector3(0, -300, -1000), Quaternion.Identity, playerBaseScale);

                    break;

            }
            Model enemyBaseModel = Game.Content.Load<Model>("Game/Models/Starbase/EnemyBase/Station/sleeper7");
            float enemyBaseScale = 40f;

            Starbase enemyStarBase = new Starbase(CollidableType.EnemyBase, enemyBaseModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyBaseScale, enemyBaseModel, new Vector3(950, 950, 950), Quaternion.CreateFromAxisAngle(Vector3.Up, 90f), enemyBaseScale);

            Model asteroid1 = Game.Content.Load<Model>(@"Game/Models/Asteroids/smallAsteroid");
            float asteroid1Scale = 1f;

            Model asteroid3 = Game.Content.Load<Model>(@"Game/Models/Asteroids/largeAsteroid");
            float asteroid3Scale = 5f;

            BasicModel[] basicAsteroidModel = { new BasicModel(asteroid1, asteroid1Scale),
                                                  new BasicModel(asteroid3, asteroid3Scale) };
            float[] radiusArray = { asteroid1.Meshes.ToList()[0].BoundingSphere.Radius * asteroid1Scale, asteroid3.Meshes.ToList()[0].BoundingSphere.Radius * asteroid3Scale };

            Model dockModel = Game.Content.Load<Model>(@"Game/Models/Dock/Dock");
            float dockScale = 0.15f;

            Dock dock = new Dock(CollidableType.Dock, dockModel.Meshes.ToList()[0].BoundingSphere.Radius * dockScale, new BasicModel(dockModel, dockScale), new Vector3(800, 40, -200), Quaternion.Identity);

            #region Objective Stuff
            List<Objective> objectiveList = new List<Objective>();

            Model Bstation = Game.Content.Load<Model>(@"Game/Models/Station/BStation");
            float BstationScale = 1f;

            switch (_save.Config.Mission)
            {
                case 0:
                    objectiveList.Add(new ObjectiveDestroyable(CollidableType.Station, Bstation.Meshes.ToList()[0].BoundingSphere.Radius * BstationScale, 0.05f, new BasicModel(Bstation, BstationScale),
                new Vector3(600, 600, 600), Quaternion.Identity, "Protect the Relay Station for 3:00 Minutes", 800, new TimeSpan(0, 3, 0)));
            objectiveList.Add(new ObjectiveEnemy("Eliminate 10 Enemies: ", 10));
            objectiveList.Add(new ObjectiveEnemyFrigate("Eliminate 1 Frigate: ", 1));
                    break;
                case 1:
                    objectiveList.Add(new ObjectiveDestroyable(CollidableType.Station, Bstation.Meshes.ToList()[0].BoundingSphere.Radius * BstationScale, 0.05f, new BasicModel(Bstation, BstationScale),
                new Vector3(600, 600, 600), Quaternion.Identity, "Protect the Relay Station for 5:00 Minutes", 800, new TimeSpan(0, 5, 0)));
                    objectiveList.Add(new ObjectiveDestroyable(CollidableType.Station, Bstation.Meshes.ToList()[0].BoundingSphere.Radius * BstationScale, 0.05f, new BasicModel(Bstation, BstationScale),
                new Vector3(800, 200, 500), Quaternion.CreateFromAxisAngle(new Vector3(0,0,1), 2f), "Protect the Secondary Station for 2:00 Minutes", 300, new TimeSpan(0, 2, 0)));
            objectiveList.Add(new ObjectiveEnemy("Eliminate 20 Enemies: ", 20));
            objectiveList.Add(new ObjectiveEnemyFrigate("Eliminate 2 Frigates: ", 2));
                    break;
                case 2:
                    objectiveList.Add(new ObjectiveDestroyable(CollidableType.Station, Bstation.Meshes.ToList()[0].BoundingSphere.Radius * BstationScale, 0.05f, new BasicModel(Bstation, BstationScale),
                new Vector3(600, 600, 600), Quaternion.Identity, "Protect the Relay Station for 6:00 Minutes", 800, new TimeSpan(0, 5, 0)));
                    objectiveList.Add(new ObjectiveDestroyable(CollidableType.Station, Bstation.Meshes.ToList()[0].BoundingSphere.Radius * BstationScale, 0.05f, new BasicModel(Bstation, BstationScale),
                new Vector3(800, 200, 500), Quaternion.CreateFromAxisAngle(new Vector3(0,0,1), 2f), "Protect the Secondary Station for 4:00 Minutes", 400, new TimeSpan(0, 2, 0)));
            objectiveList.Add(new ObjectiveEnemy("Eliminate 30 Enemies: ", 30));
            objectiveList.Add(new ObjectiveEnemyFrigate("Eliminate 3 Frigates: ", 3));
                    break;
                default:
                    objectiveList.Add(new ObjectiveDestroyable(CollidableType.Station, Bstation.Meshes.ToList()[0].BoundingSphere.Radius * BstationScale, 0.05f, new BasicModel(Bstation, BstationScale),
                new Vector3(600, 600, 600), Quaternion.Identity, "Protect the Relay Station for 3:00 Minutes", 800, new TimeSpan(0, 3, 0)));
            objectiveList.Add(new ObjectiveEnemy("Eliminate 10 Enemies: ", 10));
            objectiveList.Add(new ObjectiveEnemyFrigate("Eliminate 1 Frigate: ", 1));
                    break;
            }

            #endregion

            Sun sun;
            switch (_save.Config.Mission)
            {
                case 0:
                    sun = new Sun(_device, Game.Content.Load<Texture2D>(@"Game/Images/Other/sun"), new Vector3(-300, 1300, 1300), 1000);
                    break;
                case 1:
                    sun = new Sun(_device, Game.Content.Load<Texture2D>(@"Game/Images/Other/sun"), new Vector3(-300, -1300, -1300), 1000);
                    break;
                case 2:
                    sun = new Sun(_device, Game.Content.Load<Texture2D>(@"Game/Images/Other/sun"), new Vector3(300, -1300, 1300), 1000);
                    break;
                default:
                    sun = new Sun(_device, Game.Content.Load<Texture2D>(@"Game/Images/Other/sun"), new Vector3(-300, 1300, 1300), 1000);
                    break;
            }

            Level level = new Level(GameEngine.CollidableList, radiusArray, basicAsteroidModel, planet, playerstarbase, enemyStarBase, SkyboxTEST, dock, sun, playerShipTEST, 40, objectiveList, _device,
                new TimeSpan(0, 10, 0), new Vector3(0, 0, 0), new Vector3(1000, 1000, 1000), _save);

            #region Enemy Stuff
            Model enemyModel = Game.Content.Load<Model>("Game/Models/Raider/fighter1");
            float enemyScale = 1f;
            List<Enemy> enemyList = new List<Enemy>();

            enemyList.Add(new Enemy(CollidableType.EnemyShip, enemyModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyScale, new Vector3(900, 900, 900), Quaternion.CreateFromAxisAngle(Vector3.UnitX, 10), -30, 30, 30, 50, 10, 3));

            WeaponSystem2D enemyWeaponSystem = new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 1f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bulletBlue"), 0.25f, _device, 125, new Vector3(0, 0, 0), 300, 300, 0.001f);

            List<EnemyFrigate> enemyFrigateList = new List<EnemyFrigate>();
            Model enemyFrigateModel = Game.Content.Load<Model>("Game/Models/Frigate/PirateShip");
            float enemyFrigateScale = 3f;
            List<WeaponSystem2D> frigateweaponSystemList = new List<WeaponSystem2D>();

            switch (_save.Config.Mission)
            {
                case 0:
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 2.5f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(0, 0.2f, 0), 300, 300, 0.001f));
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 3f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(5f, 0.2f, 0), 300, 300, 0.001f));

                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1000, 1000, 1000), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    break;
                case 1:
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 2.5f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(0, 0.2f, 0), 300, 300, 0.001f));
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 3f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(5f, 0.2f, 0), 300, 300, 0.001f));

                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1000, 1000, 1000), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1400, 1400, 1400), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    break;
                case 2:
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 2.5f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(0, 0.2f, 0), 300, 300, 0.001f));
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 3f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(5f, 0.2f, 0), 300, 300, 0.001f));

                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1000, 1000, 1000), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1400, 1400, 1400), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1400, 900, 1400), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    break;

                default:
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 2.5f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(0, 0.2f, 0), 300, 300, 0.001f));
                    frigateweaponSystemList.Add(new WeaponSystem2D(GameEngine.CollidableList, CollidableType.EnemyBullet, 3f, SoundType.Enemy_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bullet"),
                        2.5f, _device, 100, new Vector3(5f, 0.2f, 0), 300, 300, 0.001f));

                    enemyFrigateList.Add(new EnemyFrigate(new BasicModel(enemyFrigateModel, enemyFrigateScale), CollidableType.EnemyShip, enemyFrigateModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyFrigateScale,
                        new Vector3(1000, 1000, 1000), Quaternion.Identity, -10, 10, 0.1f, 20, 10, 300, frigateweaponSystemList));
                    break;
            }

            EnemySquadron enemySquadron = new EnemySquadron(GameEngine.CollidableList, CollidableType.EnemyShip, enemyModel.Meshes.ToList()[0].BoundingSphere.Radius * enemyScale, new BasicModel(enemyModel, enemyScale), enemyList, enemyFrigateList, enemyWeaponSystem, new Vector3(950, 950, 950), 10, 40, 300);

            #endregion

            #region Friend Stuff
            Model friendModel = Game.Content.Load<Model>("Game/Models/Viper/inceptor");
            float friendScale = 0.07f;

            List<Friend> friendList = new List<Friend>();

            friendList.Add(new Friend(CollidableType.FriendlyShip, friendModel.Meshes.ToList()[0].BoundingSphere.Radius * friendScale, new Vector3(-300, -300, -1000), Quaternion.Identity, -30, 30, 30, 2, 10, 50, 3));
            //new ParticleEngine(pEngine._device, pEngine._displacement, pEngine._textureArray, pEngine.size, pEngine.size, _particleEngine._delayReset)

            WeaponSystem2D friendWeaponSystem = new WeaponSystem2D(GameEngine.CollidableList, CollidableType.FriendBullet, 1f, SoundType.Friend_Shoot, Game.Content.Load<Texture2D>(@"Game/Images/Weapons/bulletRed"), 0.25f, _device, 125, new Vector3(0, 0, 0), 300, 300, 0.001f);

            FriendSquadron friendSquadron = new FriendSquadron(GameEngine.CollidableList, CollidableType.FriendlyShip, friendModel.Meshes.ToList()[0].BoundingSphere.Radius * friendScale, new BasicModel(friendModel, friendScale), friendList, friendWeaponSystem, new Vector3(0, -300, -1000), 15, 20, 100);

            #endregion

            ExplosionEngine explosionEngine = new ExplosionEngine(_device, ExplosionArray, 20, 5);
            SoundEffect[] soundEffectArray = { Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Player_Engine"),
                                                 Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Player_Hit"),
                                                 Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Player_Shoot"),
                                                 Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Friend_Shoot"),
                                                 Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Enemy_Shoot"),
                                                 Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Explosion"),
                                                 Game.Content.Load<SoundEffect>(@"Game/Audio/Effects/Player_Missle")
                                             };

            SoundEffect[] voiceChatterSounds = new SoundEffect[30];
            for (int i = 0; i < 30; i++)
                voiceChatterSounds[i] = Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Chatter/" + (i + 1));

            SoundEffect[] musicSounds = new SoundEffect[6];

            for (int i = 0; i < 6; i++)
                musicSounds[i] = Game.Content.Load<SoundEffect>(@"Game/Audio/Music/" + (i + 1));

            #region Voices

            List<SoundEffect[]> SoundVoiceEffects = new List<SoundEffect[]>();
            SoundEffect[] start = {
                                      Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/srt1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/srt2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/srt3")
                                  };
            SoundVoiceEffects.Add(start);

            SoundEffect[] stationHit = {
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/sd1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/sd2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/sd3")
                                       };
            SoundVoiceEffects.Add(stationHit);

            SoundEffect[] leaving = {
                                        Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/lb1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/lb2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/lb3")
                                    };
            SoundVoiceEffects.Add(leaving);

            SoundEffect[] lose = {
                                     Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/bw1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/bw2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/bw3")
                                 };

            SoundVoiceEffects.Add(lose);

            SoundEffect[] win = {
                                    Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/gw1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/gw2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/gw3")
                                };

            SoundVoiceEffects.Add(win);

            SoundEffect[] completed = {
                                          Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/boc1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/boc2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/boc3")
                                      };
            SoundVoiceEffects.Add(completed);

            SoundEffect[] failed = {
                                       Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/bof1"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/bof2"),
                                           Game.Content.Load<SoundEffect>(@"Game/Audio/Voice/Battlestation/bof3")
                                   };
            SoundVoiceEffects.Add(failed);
            #endregion
            SoundEngine soundEngine = new SoundEngine(soundEffectArray, voiceChatterSounds, musicSounds, SoundVoiceEffects, _save);

            Texture2D[] hudOverlay = {
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Overlay/BottomLeftCorner"),
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Overlay/BottomRightCorner"),
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Overlay/TopLeftCorner"),
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Overlay/TopMiddle"),
                                         Game.Content.Load<Texture2D>(@"Game/Images/HUD/Overlay/TopRightCorner")
                                     };

            GameEngineTEST = new GameEngine(playerShipTEST, level, enemySquadron, friendSquadron, explosionEngine, soundEngine);

            Texture2D[] radarImages = { Game.Content.Load<Texture2D>(@"Game/Images/HUD/friend"), Game.Content.Load<Texture2D>(@"Game/Images/HUD/enemy"), Game.Content.Load<Texture2D>(@"Game/Images/HUD/friendBase"), Game.Content.Load<Texture2D>(@"Game/Images/HUD/enemyBase") };
            ShipOverlay enemyOverlay = new ShipOverlay(Game.Content.Load<Texture2D>(@"Game/Images/HUD/EnemyOverlay"), _device, 3.7f);
            ShipOverlay friendOverlay = new ShipOverlay(Game.Content.Load<Texture2D>(@"Game/Images/HUD/FriendOverlay"), _device, 3f);

            HUDManager = new HUDManager(_device, _spriteBatch, spawnerManager, Game.Content.Load<SpriteFont>(@"Game/Fonts/Segoe"), Game.Content.Load<SpriteFont>(@"Game/Fonts/HUDFont"),
                Game.Content.Load<SpriteFont>(@"Game/Fonts/SHUDFont"), radarImages, friendOverlay, enemyOverlay, hudOverlay, Game.Content.Load<Texture2D>(@"Game/Images/HUD/crosshairs"), _save);
            _gameActive = true;
            FinishedLoadingEvent();
        }