示例#1
0
        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;
        }