Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
		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
	    }