bool find_new_start()
    {
        var nocheckpathlist = new List <int>();

        for (var i = 0; i < m_pathlist.Count; i++)
        {
            nocheckpathlist.Add(i);
        }

        while (nocheckpathlist.Count > 0)
        {
            var index = RandomUtil.Get(nocheckpathlist);
            nocheckpathlist.Remove(index);

            var cand_point = m_pathlist[index];
            if (cand_point.Length != 2)
            {
                throw new SystemException("{2F1EDAA0-C514-4505-A374-BC45BAE5AD76}");
            }
            var cx = cand_point[0];
            var cy = cand_point[1];

            var cdirs = collect_available_dirs(cx, cy);
            if (cdirs.Count > 0)
            {
                m_cur_x = cx;
                m_cur_y = cy;
                return(true);
            }
        }

        return(false);
    }
 /*
  *  S_DIGDIR
  *  可能な方向の一つを選び
  *  2つ掘る。
  *  記録する。
  */
 void S_DIGDIR(bool bFirst)
 {
     if (bFirst)
     {
         var d = RandomUtil.Get(m_availableDirs);
         if (d == DIR.UP)
         {
             dig(0, 1); dig(0, 2, true);
         }
         if (d == DIR.RIGHT)
         {
             dig(1, 0); dig(2, 0, true);
         }
         if (d == DIR.DOWN)
         {
             dig(0, -1); dig(0, -2, true);
         }
         if (d == DIR.LEFT)
         {
             dig(-1, 0); dig(-2, 0, true);
         }
     }
     //
     if (!HasNextState())
     {
         Goto(S_AVAILABLE_DIRECTIONS);
     }
 }
Beispiel #3
0
        private void AddMaleRivalry(Model.Settlement.Settlement settlement)
        {
            var settler1 = RandomUtil.Get(settlement.SettlerManager.Settlers.Where(s => BinaryGender.Male.Is(s)).ToList());
            var settler2 =
                RandomUtil.Get(settlement.SettlerManager.Settlers.Where(s => BinaryGender.Male.Is(s) && s != settler1).ToList());

            AcquaintanceRelationship.Make(settlement.SettlerManager, -25, settler1, settler2);
        }
 public static void EnsureMajorTrait(Settler settler)
 {
     //Always some major trait
     if (Trait.Traits.ToList().TrueForAll(trait => settler.Traits[trait] > TraitLevel.Low && settler.Traits[trait] < TraitLevel.High))
     {
         settler.Traits[RandomUtil.Get(Trait.Traits)] = RandomUtil.Get(new[]
                                                                       { TraitLevel.VeryLow, TraitLevel.Low, TraitLevel.High, TraitLevel.VeryHigh });
     }
 }
        private RandomEvent Generate(Settlement.Settlement settlement)
        {
            var today  = settlement.TodaysDate.DaysSinceSettlement;
            var rarity =
                RandomUtil.WeightedPercentGet(EventRarity.Rarities, null, eventRarity => eventRarity.PercentChance);
            var ev = !(rarity == null) ? RandomUtil.Get(RandomEventArrays[rarity].Where(ev => ev.IsAvailable(settlement)).ToList()) : null;

            //Add Today's Event to Calendar if not null
            EventCalendar.Add(today, ev != null ? new List <Event> {
                ev
            } : new List <Event>());
            return(ev);
        }
Beispiel #6
0
        public override string Generate()
        {
            var rand = new RandomUtil();

            return($"{RandomUtil.Get(_prefix)}{RandomUtil.Get(_suffix)}");
        }
Beispiel #7
0
        public static void GenerateChildTraits(Human child)
        {
            List <Settler> parents = new List <Settler>();

            foreach (var relationship in child.Relationships)
            {
                if (relationship is ParentChildRelationship pcr && pcr.Role(child) == ParentChildRelationship.Child)
                {
                    parents.Add(pcr.Other(child));
                }
            }

            var badRelationshipParents = parents.Where(parent =>
                                                       child.Relationships
                                                       .FirstOrDefault(rel => rel is ParentChildRelationship pcr && pcr.Other(parent) == child)?.Level <=
                                                       RelationshipLevel.Dislike).ToList();

            foreach (var trait in Trait.Traits)
            {
                var parentsTraitsArray = parents.ToArray().Select(parent => parent.Traits[trait].Value).ToArray();

                if (badRelationshipParents.Count > 0 && RandomUtil.Chance(1, 3))
                {
                    var parent = RandomUtil.Get(badRelationshipParents);
                    var level  = parent.Traits[trait];

                    if (level == TraitLevel.Average) //Reaction goes extreme
                    {
                        child.Traits[trait] = RandomUtil.Get(new[]
                                                             { TraitLevel.VeryLow, TraitLevel.Low, TraitLevel.High, TraitLevel.VeryHigh });
                    }
                    else if (level == TraitLevel.AboveAverage) // Reaction goes extreme, more down
                    {
                        child.Traits[trait] = RandomUtil.Get(new[]
                                                             { TraitLevel.VeryLow, TraitLevel.Low, TraitLevel.VeryHigh });
                    }
                    else if (level == TraitLevel.BelowAverage)
                    {
                        child.Traits[trait] = RandomUtil.Get(new[]
                                                             { TraitLevel.VeryLow, TraitLevel.High, TraitLevel.VeryHigh });
                    }
                    else if (level >= TraitLevel.High)
                    {
                        child.Traits[trait] = RandomUtil.Get(new[] { TraitLevel.VeryLow, TraitLevel.Low, TraitLevel.BelowAverage });
                    }
                    else
                    {
                        child.Traits[trait] = RandomUtil.Get(new[] { TraitLevel.AboveAverage, TraitLevel.High, TraitLevel.VeryHigh });
                    }
                }
                else
                {
                    var baseLevel = TraitLevel.Average.Get(MathUtil.RoundTowardsZero(MathUtil.UnroundedAverage(parentsTraitsArray)));

                    if (RandomUtil.CoinFlip()) //Drift
                    {
                        if (baseLevel == TraitLevel.VeryLow || baseLevel <= TraitLevel.High && RandomUtil.CoinFlip())
                        {
                            baseLevel = baseLevel.Get(baseLevel.Value + 1);
                        }
                        else
                        {
                            baseLevel = baseLevel.Get(baseLevel.Value - 1);
                        }
                    }

                    child.Traits[trait] = baseLevel as TraitLevel;
                }
            }

            TraitGenerator.EnsureMajorTrait(child);
        }
Beispiel #8
0
 private void FindRelationship(Settlement.Settlement settlement)
 {
     Relationship = RandomUtil.Get(settlement.SettlerManager.Relationships.Where(IsPossibleRelationship).ToArray());
 }