public void Decrease(Characteristics otherChars, int amount = 1) { var oldVal = value; value = KMaths.Clamp(value - amount, definition.min, definition.max); definition.rules.onChange(otherChars, value - oldVal); }
public void PopulateWithKingdoms(int amount, int maxSize = 1) { kingdoms.Clear(); for (int i = 0; i < amount; i++) { List <Region> territory = new List <Region>(); int size = 1 + KMaths.FloorToInt((1 - KMaths.Clamp01(Math.Abs((float)Game.state.random.NextGaussian()))) * maxSize); Region startingRegion = map.regions[KMaths.FloorToInt(Game.state.random.NextFloat() * map.regions.Count)]; var race = Library.races[Game.state.random.Range(0, Library.races.Count)]; Kingdom kingdom = new Kingdom(i, race.GetRandomKingdomName(), new List <Region>() { startingRegion }, race, Ruler.CreateRuler()); for (int j = 0; j < size; j++) { List <Region> blobCandidates = kingdom.GetNeighborRegions(); blobCandidates.RemoveAll(o => o.IsOwned()); if (blobCandidates.Count <= 0) { break; } kingdom.TakeOwnership(blobCandidates[KMaths.FloorToInt(blobCandidates.Count * Game.state.random.NextFloat())]); } kingdoms.Add(kingdom); } }
public static Character CreateCharacter() { var race = Library.races[Library.races.Keys.ToList().PickRandom(Game.state.random)]; var chara = new Character(race); chara.birthDate = Game.state.random.Range(1, Rules.set[RULE.DAYS_IN_YEAR].GetInt()); chara.age = Game.state.random.Range( race.rulerCreationRules.majority, KMaths.RoundToInt(Rules.set[RULE.LIFESPAN_MULTIPLIER].GetFloat() * race.rulerCreationRules.maximumLifespan) ); chara.name = race.GetRandomCharacterName(); return(chara); }
void MakeCalendar() { months.Clear(); days.Clear(); for (int i = 0; i < daysInAYear; i++) { var currentMonthIndex = KMaths.FloorToInt((i / ((float)daysInAYear)) * monthsInAYear); if (months.Count <= currentMonthIndex) { months.Add(new Month(currentMonthIndex)); } var month = months[currentMonthIndex]; var day = new Day(i); month.AddDay(day); days.Add(day); } currentDate = new Date() { year = 1, month = months[0], day = months[0].GetDay(0) }; }
public int GetClampedValue() { return(KMaths.Clamp(value, definition.min, definition.max)); }
static List <Region> GenerateRegions(Dictionary <Vector2f, Site> sites, Parameters parameters, Map parentMap) { List <Region> regions = new List <Region>(); List <Site> occupiedSites = new List <Site>(); int id = 1; foreach (Site site in sites.Values) { if (occupiedSites.Contains(site)) { continue; } Region region = new Region(id, parentMap, new List <Site>() { site }); id++; int size = parentMap.r.Range(parameters.minRegionSize, parameters.maxRegionSize); if (size > 0) { // Making list of candidates for expansion List <Site> blobCandidates = new List <Site>(); foreach (Site neighbor in site.NeighborSites()) { if (!occupiedSites.Contains(neighbor)) { blobCandidates.Add(neighbor); } } for (int i = 0; i < size; i++) { if (blobCandidates.Count <= 0) { break; } Site toBlob = blobCandidates[KMaths.FloorToInt(parentMap.r.NextFloat() * blobCandidates.Count)]; region.sites.Add(toBlob); occupiedSites.Add(toBlob); blobCandidates.Clear(); // Updating neighbors var newNeighbors = region.GetNeighborSites(); foreach (Site neighbor in newNeighbors) { if (!occupiedSites.Contains(neighbor)) { blobCandidates.Add(neighbor); } } } } occupiedSites.Add(site); regions.Add(region); } logger.Info("Generated " + regions.Count + " regions from " + sites.Count + " sites"); return(regions); }