internal void Initialize(int numSystems, Texture2D SystemTexture, Texture2D RingTexture, Vector2 MapSize, Texture2D[] planetTextures, ref AIPlayer[] aiPlayers, ref Player player, Texture2D SectorTexture, SpriteFont Font, GraphicsDevice device, GraphicsDeviceManager graphics, SpriteBatch spriteBatch) { playerName = player.Name + " of " + player.faction.Name; font = Font; sectorTexture = SectorTexture; string playerSysID; NumSystems = numSystems; systex = SystemTexture; ringtex = RingTexture; AllSystems = new PlanetsSystem[NumSystems]; Width = (int)MapSize.X; Height = (int)MapSize.Y; selectedSystem = 0; PlanetTextures = planetTextures; string username = Environment.UserName; var PLANET_NAME_FILES = System.IO.File.ReadAllLines(@"C:\\Users\\" + username + "\\Documents\\RES\\TextAssets\\planetNames.txt"); var SYSTEM_NAME_FILES = System.IO.File.ReadAllLines(@"C:\\Users\\" + username + "\\Documents\\RES\\TextAssets\\systemNames.txt"); planetNames = new List<string>(PLANET_NAME_FILES); //Lit of all available planet names, each one is removed when used systemNames = new List<string>(SYSTEM_NAME_FILES); AIPlayerNumbers = new List<int>(aiPlayers.Length); //list is limited to number of AI planetMapGenerator = new MapGenerator(device, spriteBatch); List<Player> tempPlayerList = new List<Player>(); tempPlayerList.Add(player); foreach (Player p in aiPlayers) { tempPlayerList.Add(p); } int currentPlayer = 0; bool isPlayerSystem = true; PlayerNumber = StrategyGame.r.Next(0, NumSystems); #region AIPlayer list position setup for (int i = 0; i < aiPlayers.Length; i++) //Setting up the number in the list of systems where the AI Players will be { int tempIDNumber = 0; do { tempIDNumber = StrategyGame.r.Next(0, NumSystems); } while (tempIDNumber == PlayerNumber || AIPlayerNumbers.Contains(tempIDNumber)); AIPlayerNumbers.Add(tempIDNumber); } #endregion SetupMapPositions(MapSize); //Action action = () => //{ #region Player Systems size = PlayerSystemSize; SystemPosition = RandCoordinates(size, true); NumPlanets = 5; rect = new Rectangle(SystemPosition, new Point(size, size)); SystemColour = player.faction.colour; randomName = StrategyGame.r.Next(0, systemNames.Count); systemName = systemNames[randomName]; systemNames.RemoveAt(randomName); //make sure the name can't be assigned twice AllSystems[PlayerNumber] = new PlanetsSystem(rect, systex, ringtex, NumPlanets, planetTextures, SystemColour, ref planetNames, systemName, SystemIndex, gridPosition, new EventHandler(UpdateResources), PlayerNumber, planetMapGenerator, player); playerSysID = systemName; player.AddSystem(ref AllSystems[PlayerNumber]); for (int i = 0; i < AllSystems[PlayerNumber].Planets; i++) { if (AllSystems[PlayerNumber].PlanetsList[i].PlanetTier == 2) { player.AddPlanet(ref AllSystems[PlayerNumber], i); //add planet to player list } } #endregion for (int i = 0; i < NumSystems; i++) { #region AIPlayerSystems if (AIPlayerNumbers.Contains(i)) //coords are being all set the same and sizes are being set to 200 - fix { size = PlayerSystemSize; NumPlanets = 5; randomName = StrategyGame.r.Next(0, systemNames.Count); systemName = systemNames[randomName]; systemNames.RemoveAt(randomName); randomName = StrategyGame.r.Next(0, planetNames.Count); tempPlanetName = planetNames[randomName]; planetNames.RemoveAt(randomName); SystemPosition = RandAICoordinates(size); rect = new Rectangle(SystemPosition, new Point(size, size)); SystemColour = Color.Red; isPlayerSystem = true; currentPlayer++; } #endregion else if (i >= 0 && i < NumSystems && i != PlayerNumber) { size = StrategyGame.r.Next(MinSize, MaxSize); NumPlanets = StrategyGame.r.Next(1, 5); SystemColour = Color.White; randomName = StrategyGame.r.Next(0, systemNames.Count); systemName = systemNames[randomName]; systemNames.RemoveAt(randomName); SystemPosition = RandCoordinates(size); rect = new Rectangle(SystemPosition, new Point(size, size)); randomName = StrategyGame.r.Next(0, planetNames.Count); tempPlanetName = planetNames[randomName]; planetNames.RemoveAt(randomName); isPlayerSystem = false; } if (i != PlayerNumber) //players system has to be initialized first - don't want to override it { if (isPlayerSystem) { AllSystems[i] = new PlanetsSystem(rect, systex, ringtex, NumPlanets, planetTextures, SystemColour, ref planetNames, systemName, SystemIndex, gridPosition, new EventHandler(UpdateResources), i, planetMapGenerator, tempPlayerList[currentPlayer]); aiPlayers[currentPlayer - 1].AddSystem(ref AllSystems[i]); for (int index = 0; index < AllSystems[i].Planets; index++) { if (AllSystems[i].PlanetsList[index].PlanetTier == 2) { aiPlayers[currentPlayer - 1].AddPlanet(ref AllSystems[i], index); //add planet to player list } } } else { AllSystems[i] = new PlanetsSystem(rect, systex, ringtex, NumPlanets, planetTextures, SystemColour, ref planetNames, systemName, SystemIndex, gridPosition, new EventHandler(UpdateResources), i, planetMapGenerator); } } } selectedSystem = PlayerNumber; AllSystems[selectedSystem].OnSelected(); int systemCount = 0; foreach (PlanetsSystem system in AllSystems) { int sectorCount = 0; foreach (MapSector sector in SectorsList) { int count = 0; foreach (Point p in sector.ContainedCoords) { if (system.GridPosition == p) { sector.AddSystem(ref AllSystems[systemCount], count); system.Sector = Int32.Parse(sector.Name); AllSystems[systemCount].AllSystemsListIndex = systemCount; if (system.ID == playerSysID) { CurrentSector = sectorCount; } } count++; } sectorCount++; } systemCount++; } //}; //Task t = new Task(action); //t.RunSynchronously(); //t.Wait(); PLANET_NAME_FILES = null; SYSTEM_NAME_FILES = null; }