public static GalaxyModel Create(int galaxySizeX, int galaxySizeY) { var maxNumberForAllegiance = galaxySizeX*galaxySizeY*4/10; var counts = new int[Enums.All_Allegiances.Count]; var model = new GalaxyModel { StarSystems = new StarSystemModel[galaxySizeY,galaxySizeX] }; for (var i = 0; i < galaxySizeY; i++) for (var j = 0; j < galaxySizeX; j++) { int allegianceIndex; do { allegianceIndex = RNG.GetNumber(Enums.All_Allegiances.Count); } while (counts[allegianceIndex] >= maxNumberForAllegiance); model.StarSystems[i, j] = StarSystemModel.CreateRandom((Allegiance)allegianceIndex); model.StarSystems[i, j].Coords = new Coord(j, i); counts[allegianceIndex]++; } return model; }
public static void Create(GalaxyModel galaxy, StarSystemModel currentSystem) { galaxy.LastEventDate = galaxy.GameDate; var globalEvent = Enums.All_GlobalEvents.Get_Random(); if (globalEvent == GlobalEventType.Normal) globalEvent = GlobalEventType.AlienInvasion; #region If it's time for Great Alien Attack if (galaxy.AlienStrength != AlienStrength.FatherIsKilled && (galaxy.GameDate > GameConfig.AlienAttackDate || galaxy.AlienStrength == AlienStrength.FatherIsHere || (globalEvent == GlobalEventType.AlienInvasion && galaxy.Get_AllSystems().Count(a => a.CurrentEvent == GlobalEventType.AlienInvasion) > GameConfig.AlienAttackTriggerCount))) { galaxy.AlienStrength = AlienStrength.FatherIsHere; globalEvent = GlobalEventType.AlienInvasion; } #endregion #region Get star system and event duration var system = galaxy.Get_RandomSystemForEvent(globalEvent); if (globalEvent == GlobalEventType.Epidemy || globalEvent == GlobalEventType.Starvation || globalEvent == GlobalEventType.CivilWar) { system.CurrentEvent = globalEvent; system.EventDuration = GameConfig.BaseGlobalEventDuration + RNG.GetDice(); system.EventEndDate = galaxy.GameDate.AddDays(system.EventDuration); } if (globalEvent == GlobalEventType.AlienInvasion) system.CurrentEvent = globalEvent; var eventValue = system.EventDuration; #endregion #region Process the event impact switch (globalEvent) { case GlobalEventType.AlienInvasion: break; case GlobalEventType.LevelUp : system.TechLevel++; eventValue = system.TechLevel; break; case GlobalEventType.LevelDown : system.TechLevel--; eventValue = system.TechLevel; break; case GlobalEventType.IllegalAdd : var merchToAdd = Enums.All_MerchandiseIllegal.Where(a => !system.IllegalGoods.Contains(a)).ToList().Get_Random(); system.IllegalGoods.Add(merchToAdd); eventValue = (int) merchToAdd; break; case GlobalEventType.IllegalRemove: var merchToRemove = system.IllegalGoods.Get_Random(); system.IllegalGoods.Remove(merchToRemove); eventValue = (int) merchToRemove; break; } #endregion #region Add the event to EventLog and print it if needed var newGlobalEvent = new GlobalEvent(system, globalEvent, eventValue, galaxy.GameDate); galaxy.GlobalEventLog.Add(newGlobalEvent); if (globalEvent == GlobalEventType.AlienInvasion || (Enums.All_GlobalEventsWithDuration.Contains(globalEvent) && system.Allegiance == currentSystem.Allegiance)) { newGlobalEvent.Print(); } #endregion }