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); } }
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); }
public override string Generate() { var rand = new RandomUtil(); return($"{RandomUtil.Get(_prefix)}{RandomUtil.Get(_suffix)}"); }
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); }
private void FindRelationship(Settlement.Settlement settlement) { Relationship = RandomUtil.Get(settlement.SettlerManager.Relationships.Where(IsPossibleRelationship).ToArray()); }