public Planet(int Distance, Texture2D planetTex, Vector2 Origin, Rectangle SystemRectangle, string name, int type, int texNum, string system, int listIndex, int systemIndex, MapGenerator planetMapGenerator, Player ControlledBy = null) { PlanetsListIndex = listIndex; if (ControlledBy == null) { OwnerName = "None"; } else { OwnerName = ControlledBy.Name; Owner = ControlledBy; } OrbitingSystem = system; OrbitingSystemListPosition = systemIndex; distance = Distance; PlanetTex = planetTex; randomDouble = (StrategyGame.r.NextDouble() + 0.001); rotation = MathHelper.Lerp(0.0f, 100f, (float)randomDouble); speed = MathHelper.Lerp(0.0f, 0.0001f, (float)randomDouble); position = new Vector2(distance, distance); origin = Origin; PlanetName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name); planetsResourcesList = new List<ResourceDeposit>(); planetsBuildingList = new List<Building>(); PlanetTier = type; TextureNum = texNum; this.planetMapGenerator = planetMapGenerator; if (SystemRectangle.Width > 100) { Rect = new Rectangle(0, 0, SystemRectangle.Width / 8, SystemRectangle.Height / 8); } else { Rect = new Rectangle(0, 0, SystemRectangle.Width / 5, SystemRectangle.Height / 5); } #region if Tier 2 if (PlanetTier == 2) { IsHabited = true; Population = (11000000000 + StrategyGame.r.Next(500000000, 900000000)); PopIncreaseRate = 0.01f; TaxRate = 30; int x; #region metal for (int i = 1; i <= NumMetals; i++) { switch (i) { case 1: x = ResourceQuantity(3); planetsResourcesList.Add(new IronResource(x, 3)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; case 2: x = ResourceQuantity(4); planetsResourcesList.Add(new ZincResource(x, 4)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; case 3: x = ResourceQuantity(4); planetsResourcesList.Add(new CopperResource(x, 4)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; case 4: x = ResourceQuantity(4); planetsResourcesList.Add(new AluminiumResource(x, 4)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; case 5: x = ResourceQuantity(3); planetsResourcesList.Add(new TitaniumResource(x, 3)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; case 6: x = ResourceQuantity(4); planetsResourcesList.Add(new MagnesiumResource(x, 4)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; case 7: x = ResourceQuantity(4); planetsResourcesList.Add(new LeadResource(x, 4)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); break; } } #endregion #region blues x = ResourceQuantity(1); planetsResourcesList.Add(new SilverResource(x, 1)); x = ResourceQuantity(1); planetsResourcesList.Add(new GoldResource(x, 1)); x = ResourceQuantity(1); planetsResourcesList.Add(new PlatinumResource(x, 1)); x = ResourceQuantity(1); planetsResourcesList.Add(new DiamondResource(x, 1)); #endregion #region fuels x = ResourceQuantity(StartingFuelDepositLevel); planetsResourcesList.Add(new CoalResource(x, StartingFuelDepositLevel)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); x = ResourceQuantity(StartingFuelDepositLevel); planetsResourcesList.Add(new OilResource(x, StartingFuelDepositLevel)); x = ResourceQuantity(StartingFuelDepositLevel); planetsResourcesList.Add(new NaturalGasResource(x, StartingFuelDepositLevel)); x = ResourceQuantity(StartingFuelDepositLevel); planetsResourcesList.Add(new UraniumResource(x, StartingFuelDepositLevel)); x = ResourceQuantity(StartingFuelDepositLevel); planetsResourcesList.Add(new ThoriumResource(x, StartingFuelDepositLevel)); #endregion #region misc x = ResourceQuantity(StartingMiscDepositLevel); planetsResourcesList.Add(new TimberResource(x, StartingMiscDepositLevel)); x = ResourceQuantity(StartingMiscDepositLevel); planetsResourcesList.Add(new LivestockResource(x, StartingMiscDepositLevel)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); x = ResourceQuantity(StartingMiscDepositLevel); planetsResourcesList.Add(new CropsResource(x, StartingMiscDepositLevel)); planetsBuildingList.Add( planetsResourcesList[planetsResourcesList.Count - 1].BuildOn( StartingExtractorSize, StartingExtractorLevel, planetsBuildingList.Count)); x = ResourceQuantity(StartingMiscDepositLevel); planetsResourcesList.Add(new CleanWaterResource(x, StartingMiscDepositLevel)); #endregion } #endregion #region if Tier 4 else if (PlanetTier == 4) { IsHabited = false; Population = 0; PopIncreaseRate = 0; int[] resources = new int[Tier4NumMetalResources]; int x; int randomResource; #region metal for (int i = 0; i < Tier4NumMetalResources; i++) { do { x = ResourceQuantity(Tier4StartingMetalDepositLevel); randomResource = StrategyGame.r.Next(1, 8); } while (resources.Contains(randomResource)); resources[i] = randomResource; switch (randomResource) { case 1: planetsResourcesList.Add(new IronResource(x, Tier4StartingMetalDepositLevel)); break; case 2: planetsResourcesList.Add(new ZincResource(x, Tier4StartingMetalDepositLevel)); break; case 3: planetsResourcesList.Add(new CopperResource(x, Tier4StartingMetalDepositLevel)); break; case 4: planetsResourcesList.Add(new AluminiumResource(x, Tier4StartingMetalDepositLevel)); break; case 5: planetsResourcesList.Add(new TitaniumResource(x, Tier4StartingMetalDepositLevel)); break; case 6: planetsResourcesList.Add(new MagnesiumResource(x, Tier4StartingMetalDepositLevel)); break; case 7: planetsResourcesList.Add(new LeadResource(x, Tier4StartingMetalDepositLevel)); break; } } #endregion resources = new int[Tier4NumFuelDeposits]; #region fuel for (int i = 0; i < Tier4NumFuelDeposits; i++) { do { x = ResourceQuantity(Tier4StartingFuelDepositsLevel); randomResource = StrategyGame.r.Next(1, 6); } while (resources.Contains(randomResource)); resources[i] = randomResource; switch (randomResource) { case 1: planetsResourcesList.Add(new OilResource(x, Tier4StartingFuelDepositsLevel)); break; case 2: planetsResourcesList.Add(new CoalResource(x, Tier4StartingFuelDepositsLevel)); break; case 3: planetsResourcesList.Add(new NaturalGasResource(x, Tier4StartingFuelDepositsLevel)); break; case 4: planetsResourcesList.Add(new UraniumResource(x, Tier4StartingFuelDepositsLevel)); break; case 5: planetsResourcesList.Add(new ThoriumResource(x, Tier4StartingFuelDepositsLevel)); break; } } #endregion resources = new int[Tier4NumBlues]; #region blues for (int i = 0; i < Tier4NumBlues; i++) { do { x = ResourceQuantity(Tier4StartingBluesDepositsLevel); randomResource = StrategyGame.r.Next(1, 5); } while (resources.Contains(randomResource)); resources[i] = randomResource; switch (randomResource) { case 1: planetsResourcesList.Add(new SilverResource(x, Tier4StartingBluesDepositsLevel)); break; case 2: planetsResourcesList.Add(new GoldResource(x, Tier4StartingBluesDepositsLevel)); break; case 3: planetsResourcesList.Add(new PlatinumResource(x, Tier4StartingBluesDepositsLevel)); break; case 4: planetsResourcesList.Add(new DiamondResource(x, Tier4StartingBluesDepositsLevel)); break; } } #endregion } #endregion #region if Tier 3 else if (PlanetTier == 3) { IsHabited = false; Population = 0; PopIncreaseRate = 0; int[] resources = new int[Tier3NumMetalResources]; int x, size; int randomResource; #region metals for (int i = 0; i < Tier3NumMetalResources; i++) { size = StrategyGame.r.Next(Tier3MaxMetalResourceSize + 1); do { size = StrategyGame.r.Next(1, Tier3MaxMetalResourceSize); x = ResourceQuantity(size); randomResource = StrategyGame.r.Next(1, 8); } while (resources.Contains(randomResource)); resources[i] = randomResource; switch (randomResource) { case 1: planetsResourcesList.Add(new IronResource(x, size)); break; case 2: planetsResourcesList.Add(new ZincResource(x, size)); break; case 3: planetsResourcesList.Add(new CopperResource(x, size)); break; case 4: planetsResourcesList.Add(new AluminiumResource(x, size)); break; case 5: planetsResourcesList.Add(new TitaniumResource(x, size)); break; case 6: planetsResourcesList.Add(new MagnesiumResource(x, size)); break; case 7: planetsResourcesList.Add(new LeadResource(x, size)); break; } } #endregion #region blues size = StrategyGame.r.Next(1, Tier3MaxBluesResourceSize); x = ResourceQuantity(size); randomResource = StrategyGame.r.Next(1, 5); switch (randomResource) { case 1: planetsResourcesList.Add(new SilverResource(x, size)); break; case 2: planetsResourcesList.Add(new GoldResource(x, size)); break; case 3: planetsResourcesList.Add(new PlatinumResource(x, size)); break; case 4: planetsResourcesList.Add(new DiamondResource(x, size)); break; } #endregion #region misc x = ResourceQuantity(Tier3StartingMiscDepositLevel); planetsResourcesList.Add(new TimberResource(x, Tier3StartingMiscDepositLevel)); x = ResourceQuantity(Tier3StartingMiscDepositLevel); planetsResourcesList.Add(new LivestockResource(x, Tier3StartingMiscDepositLevel)); x = ResourceQuantity(Tier3StartingMiscDepositLevel); planetsResourcesList.Add(new CropsResource(x, Tier3StartingMiscDepositLevel)); x = ResourceQuantity(Tier3StartingMiscDepositLevel); planetsResourcesList.Add(new CleanWaterResource(x, Tier3StartingMiscDepositLevel)); #endregion } #endregion #region if Tier 1 else if (PlanetTier == 1) { IsHabited = false; Population = 0; PopIncreaseRate = 0; int[] resources = new int[Tier1NumMetalResources]; int x, size; int randomResource; #region metal for (int i = 0; i < Tier1NumMetalResources; i++) { do { size = StrategyGame.r.Next(1, Tier1MaxMetalResourceSize); x = ResourceQuantity(size); randomResource = StrategyGame.r.Next(1, 8); } while (resources.Contains(randomResource)); resources[i] = randomResource; switch (randomResource) { case 1: planetsResourcesList.Add(new IronResource(x, size)); break; case 2: planetsResourcesList.Add(new ZincResource(x, size)); break; case 3: planetsResourcesList.Add(new CopperResource(x, size)); break; case 4: planetsResourcesList.Add(new AluminiumResource(x, size)); break; case 5: planetsResourcesList.Add(new TitaniumResource(x, size)); break; case 6: planetsResourcesList.Add(new MagnesiumResource(x, size)); break; case 7: planetsResourcesList.Add(new LeadResource(x, size)); break; } } #endregion #region blues x = ResourceQuantity(Tier1StartingPreciousDepositLevel); planetsResourcesList.Add(new SilverResource(x, Tier1StartingPreciousDepositLevel)); x = ResourceQuantity(Tier1StartingPreciousDepositLevel); planetsResourcesList.Add(new GoldResource(x, Tier1StartingPreciousDepositLevel)); x = ResourceQuantity(Tier1StartingPreciousDepositLevel); planetsResourcesList.Add(new PlatinumResource(x, Tier1StartingPreciousDepositLevel)); #endregion #region fuels x = ResourceQuantity(Tier1StartingFuelDepositLevel); planetsResourcesList.Add(new OilResource(x, Tier1StartingFuelDepositLevel)); x = ResourceQuantity(Tier1StartingFuelDepositLevel); planetsResourcesList.Add(new UraniumResource(x, Tier1StartingFuelDepositLevel)); x = ResourceQuantity(Tier1StartingFuelDepositLevel); planetsResourcesList.Add(new ThoriumResource(x, Tier1StartingFuelDepositLevel)); #endregion } #endregion #region Buildings buildQueue = new BuildQueue(); if (ControlledBy != null) { } #endregion #region map mapSitesList = new List<Vector2>(); for (int y = 2; y < MapHeight ; y += 40) { for(int x = StrategyGame.r.Next(1, 10); x < MapWidth - 20; x += StrategyGame.r.Next(40, 60)) { bool finishedX = false; if(x > (MapWidth - 20)) { finishedX = true; x = MapWidth - 5; } bool finishedY = false; if (y > (MapHeight - 20)) { finishedY = true; y = MapHeight - 5; } mapSitesList.Add(new Vector2(x, y)); if (finishedX) x = MapWidth + 1; if (finishedY) y = MapHeight + 1; } } #endregion }
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; }
public PlanetsSystem(Rectangle rect, Texture2D Systex, Texture2D Ringtex, int planets, Texture2D[] PlanetTex, Color colour, ref List<string> planetName, string systemName, int allCoordsIndex, Point gridPosition, EventHandler UpdateResourceDetails, int allSystemsListIndex, MapGenerator planetMapGenerator, Player ControlledBy = null) : base(Systex) { if (ControlledBy != null) { controlledBy = ControlledBy.Name + " of " + ControlledBy.faction.Name; controllingPlayer = ControlledBy; } else { controlledBy = "Unknown"; controllingPlayer = null; } updateResourceDetails = UpdateResourceDetails; AllSystemsListIndex = allSystemsListIndex; GridPosition = gridPosition; index = allCoordsIndex; scale = 1.0f; tint = Color.White; SystemTexture = Systex; RingTexture = Ringtex; SystemRectangle = rect; Planets = planets; SystemColour = colour; speed = 0.01f; ID = systemName; origin = new Vector2(Systex.Width / 2, Systex.Height / 2); RingRectangle = new Rectangle(SystemRectangle.X + (SystemRectangle.Width / 2), SystemRectangle.Y + (SystemRectangle.Height / 2), SystemRectangle.Width, SystemRectangle.Height); PlanetsList = new List<Planet>(Planets); #region region string fullname; char one, two; for (int i = 0; i < Planets; i++) { if (planets > 1) { switch (i) { case 0: case 1: randomNumber = StrategyGame.r.Next(0, T1Planets.Length); randomNumber = T1Planets[randomNumber]; tier = 1; break; case 2: randomNumber = StrategyGame.r.Next(0, T2Planets.Length); randomNumber = T2Planets[randomNumber]; tier = 2; break; case 3: case 4: case 5: tier = StrategyGame.r.Next(3, 5); if (tier == 3) { randomNumber = StrategyGame.r.Next(0, T3Planets.Length); randomNumber = T3Planets[randomNumber]; } else if (tier == 4) { randomNumber = StrategyGame.r.Next(0, T4Planets.Length); randomNumber = T4Planets[randomNumber]; } break; case 7: case 8: case 9: case 10: randomNumber = StrategyGame.r.Next(0, T4Planets.Length); randomNumber = T4Planets[randomNumber]; tier = 4; break; } } else { do { randomNumber = StrategyGame.r.Next(1, PlanetTex.Length); } while (randomNumber == 6); if (T1Planets.Contains(randomNumber)) { tier = 1; } else if (T2Planets.Contains(randomNumber)) { tier = 2; } else if (T3Planets.Contains(randomNumber)) { tier = 3; } else if (T4Planets.Contains(randomNumber)) { tier = 4; } } if (tier == 2) { int namePosition = StrategyGame.r.Next(0, planetName.Count); fullname = planetName[namePosition]; planetName.RemoveAt(namePosition); } else { one = (char)StrategyGame.r.Next(65, 91); two = (char)StrategyGame.r.Next(65, 91); fullname = one.ToString() + two.ToString() + " " + StrategyGame.r.Next(100, 999).ToString(); } if (tier == 2) { PlanetsList.Add(new Planet(distance, PlanetTex[randomNumber - 1], new Vector2((SystemRectangle.X + (SystemRectangle.Width / 2.1f)), (SystemRectangle.Y + (SystemRectangle.Height / 2.1f))), SystemRectangle, fullname, tier, randomNumber - 1, ID, i, AllSystemsListIndex, planetMapGenerator, controllingPlayer)); } else { PlanetsList.Add(new Planet(distance, PlanetTex[randomNumber - 1], new Vector2((SystemRectangle.X + (SystemRectangle.Width / 2.1f)), (SystemRectangle.Y + (SystemRectangle.Height / 2.1f))), SystemRectangle, fullname, tier, randomNumber - 1, ID, i, AllSystemsListIndex, planetMapGenerator)); } distance += distanceInterval; PlanetsList[PlanetsList.Count - 1].queueItemFinished = updateResourceDetails; } #endregion }