Beispiel #1
0
        /// <summary>
        /// This method should receive the Universe to add Aliens to and a set of AlienDefaultSettings
        ///
        /// Default values are handled in AlienCreation.AddAliens
        /// </summary>
        /// <param name="universe"></param>
        /// <param name="alienDefaultSettings"></param>
        /// <returns>
        /// Return the newly edited Universe
        /// </returns>
        /// <exception cref="FileNotFoundException"></exception>
        public Universe CreateAliens(Universe universe, AlienDefaultSettings alienDefaultSettings)
        {
            // If there are no Planets or Locations for the Problems to be tied to then throw an exception
            if (universe.Stars == null || universe.Stars.Count == 0)
            {
                throw new FileNotFoundException("No locations have been loaded.");
            }

            // Set the Universe to the Universe return from ProblemCreation.AddProblems and serialize/return it
            universe = new AlienCreation().AddAliens(universe, alienDefaultSettings, AlienData);
            SerializeData(universe);
            return(universe);
        }
Beispiel #2
0
        public Universe AddAliens(Universe universe, AlienDefaultSettings alienDefaultSettings, AlienData alienData)
        {
            // If no Characters have been created on the Universe then give it an empty list of them.
            universe.Aliens ??= new List <Alien>();

            var count = alienDefaultSettings.Count < 0
                ? Rand.Next(0, universe.Planets.Count)
                : alienDefaultSettings.Count;

            var bCount = alienDefaultSettings.BodyTraitCount < 0
                ? -1
                : alienDefaultSettings.BodyTraitCount;

            //Generate an Alien
            var aCount = 0;

            while (aCount < count)
            {
                var alien = new Alien();

                IdGen.GenerateId(alien);

                if (universe.Aliens.Exists(a => a.Id == alien.Id))
                {
                    continue;
                }

                alien.BodyTraits = new List <string>();

                // Alien Body Traits
                if (bCount > 0)
                {
                    var bCounter = 0;

                    while (bCounter < bCount)
                    {
                        var trait = alienData.BodyTraits[Rand.Next(0, alienData.BodyTraits.Count)];
                        if (!alien.BodyTraits.Contains(trait))
                        {
                            alien.BodyTraits.Add(trait);
                        }
                        else
                        {
                            continue;
                        }

                        bCounter++;
                    }
                }
                else // If there were no traits passed in, pick random
                {
                    while (true)
                    {
                        var trait = alienData.BodyTraits[Rand.Next(0, alienData.BodyTraits.Count)];
                        if (!alien.BodyTraits.Contains(trait))
                        {
                            alien.BodyTraits.Add(trait);
                        }
                        else
                        {
                            continue;
                        }

                        if (Rand.Next(0, 6) == 0)
                        {
                            continue;
                        }
                        break;
                    }
                }

                alien.Lenses = new List <string>();
                // Alien Lenses
                if (alienDefaultSettings.Lenses == null || alienDefaultSettings.Lenses.Count == 0)
                {
                    var lCount   = Rand.Next(0, 2) + 1;
                    var lCounter = 0;

                    while (lCounter < lCount)
                    {
                        var lens = alienData.Lenses[Rand.Next(0, alienData.Lenses.Count)].Type;
                        if (!alien.Lenses.Contains(lens))
                        {
                            alien.Lenses.Add(lens);
                        }
                        else
                        {
                            continue;
                        }

                        lCounter++;
                    }
                }
                else
                {
                    alien.Lenses = alienDefaultSettings.Lenses;
                }

                alien.SocialStructures = new List <string>();
                // Alien Social Structure
                if (Rand.Next(0, 2) == 0)
                {
                    alien.SocialStructures.Add(alienData
                                               .SocialStructures[Rand.Next(0, alienData.SocialStructures.Count)].Type);
                }
                else
                {
                    var sCounter = 0;
                    var sCount   = Rand.Next(0, 3) + 1;
                    alien.MultiPolarType = Rand.Next(0, 2) == 0 ? "Cooperative" : "Competitive";
                    while (sCounter < sCount)
                    {
                        var type = alienData.SocialStructures[Rand.Next(0, alienData.SocialStructures.Count)].Type;
                        if (!alien.SocialStructures.Contains(type))
                        {
                            alien.SocialStructures.Add(type);
                        }
                        else
                        {
                            continue;
                        }

                        sCounter++;
                    }
                }

                universe.Aliens.Add(alien);

                aCount++;
            }

            universe.Aliens = universe.Aliens.OrderBy(a => a.Id).ToList();

            return(universe);
        }