Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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)
        };
    }
Ejemplo n.º 5
0
 public int GetClampedValue()
 {
     return(KMaths.Clamp(value, definition.min, definition.max));
 }
Ejemplo n.º 6
0
    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);
    }