public FactionCreator(RandomizerMethod iRandomMethod, TraitDefinitions iTraitDefinition, Preferences iPreferences)
 {
     _randomizerMethod = iRandomMethod;
     _definitions      = iTraitDefinition;
     _definitions.Initialize();
     _preferences = iPreferences;
 }
예제 #2
0
 public static void LoadTraitDefinitions()
 {
     if (JsonFiles.JsonFilePaths[typeof(TraitDefinitions).Name] == "")
     {
         definitions = JsonFiles.LoadFromCommonDirectory <TraitDefinitions>(TRAIT_FILE);
     }
     else
     {
         definitions = JsonFiles.LoadFrom <TraitDefinitions>(JsonFiles.JsonFilePaths[typeof(TraitDefinitions).Name]);
     }
     loaded = true;
 }
예제 #3
0
        public override List <CustomFaction> GenerateRandomCustomFactions(int iNumbers, TraitDefinitions iDefinitions, Preferences iPreferences)
        {
            List <CustomFaction> customFactionList = new List <CustomFaction>();

            for (int i = 0; i < iNumbers; i++)
            {
                CustomFaction newFaction = GenerateRandomCustomFaction(iDefinitions, iPreferences);
                customFactionList.Add(newFaction);
            }

            return(customFactionList);
        }
예제 #4
0
        public override CustomFaction GenerateRandomCustomFaction(TraitDefinitions iDefinitions, Preferences iPreferences)
        {
            ///
            // Handle Required Traits
            ///
            var faction = new CustomFaction();

            faction._gameplayAffinity = iDefinitions._gameplayAffinityGroup.GetRandomGameplayAffinity();
            if (iPreferences._matchAffinityType == Preferences.MatchAffinityType.MatchAffinity)
            {
                faction._visualAffinity = iDefinitions._visualAffinityGroup.GetVisualAffinity((VisualAffinityType)faction._gameplayAffinity._id);
            }
            else
            {
                faction._visualAffinity = iDefinitions._visualAffinityGroup.GetRandomVisualAffinity();
            }
            faction._government = iDefinitions._governmentGroup.GetRandomGovernment();
            if (faction._gameplayAffinity._type != GameplayAffinityType.AffinityGameplayUmbralChoir)
            {
                faction._homePlanet = iDefinitions._homePlanetGroup.GetRandomHomePlanet();
            }
            else
            {
                faction._homePlanet = iDefinitions._homePlanetGroup._fakeHomePlanet;
            }

            ///
            // Handle Population Traits.
            ///

            faction._primaryPolitics = iDefinitions._primaryPoliticsGroup.GetRandomPrimaryPolitics();

            ///
            // Manage the optional population traits.
            // PrimaryPolitics (assigned, not optional), SecondaryPolitics (1), SecondaryPolitics (2)
            // PrimaryPopulationModifier (3), SecondaryPopulationModifier (4), TertiaryPopulationModifier (5)
            // TODO - handle the valid case where nothing is found based on remaining points.
            // Need to make sure recorded as "None".
            ///

            var populationTraits = new List <int> {
                1, 2, 3, 4, 5
            };

            RandomUtil.Shuffle(populationTraits); // hack to make sure we don't consistently blow our points on the first catagories
            foreach (int popTrait in populationTraits)
            {
                int desiredPopTraitPoints   = iPreferences._desiredPopScore;
                int remainingPopTraitPoints = desiredPopTraitPoints - faction.CalculatePopulationScore();
                var secondaryPoliticsChosen = new List <int>();
                switch (popTrait)
                {
                case 1:
                    faction._secondaryPolitics1 = iDefinitions._secondaryPoliticsGroup.GetRandomSecondaryPolitics(secondaryPoliticsChosen, remainingPopTraitPoints);
                    secondaryPoliticsChosen.Add(faction._secondaryPolitics1._id);
                    break;

                case 2:
                    faction._secondaryPolitics2 = iDefinitions._secondaryPoliticsGroup.GetRandomSecondaryPolitics(secondaryPoliticsChosen, remainingPopTraitPoints);
                    secondaryPoliticsChosen.Add(faction._secondaryPolitics2._id);
                    break;

                case 3:
                    faction._primaryPopulationModifier = iDefinitions._primaryPopulationModifierGroup.GetRandomPrimaryPopulationModifier(remainingPopTraitPoints);
                    break;

                case 4:
                    faction._secondaryPopulationModifier = iDefinitions._secondaryPopulationModifierGroup.GetRandomSecondaryPopulationModifier(remainingPopTraitPoints);
                    break;

                case 5:
                    faction._tertiaryPopulationModifier = iDefinitions._tertiaryPopulationModifierGroup.GetRandomTertiaryPopulationModifier(remainingPopTraitPoints);
                    break;

                default:
                    break;
                }
            }

            ///
            // Handle possibly guaranteed minor population and tech traits
            ///

            int desiredTraitScore   = iPreferences._desiredTraitScore;
            int remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            if (iPreferences._guaranteeTechType == Preferences.GuaranteeTechType.Guarantee1Tech)
            {
                faction._tech.Add(iDefinitions._techGroup.GetRandomTech());
            }
            else if (iPreferences._guaranteeTechType == Preferences.GuaranteeTechType.Guarantee2Tech)
            {
                var        tech1       = iDefinitions._techGroup.GetRandomTech();
                List <int> excludeTech = new List <int> {
                    tech1._id
                };
                var tech2 = iDefinitions._techGroup.GetRandomTech(excludeTech, remainingTraitScore);
                faction._tech.Add(tech1);
                faction._tech.Add(tech2);
            }

            if ((iPreferences._guaranteeMinorPopulationType == Preferences.GuaranteeMinorPopulationType.GuaranteeMinorPopulation) &&
                (faction._gameplayAffinity._canHaveMinorPop))
            {
                faction._minorPopulation = iDefinitions._minorPopulationGroup.GetRandomMinorPopulation();
            }

            ///
            // Handle faction traits
            // - Want a couple skills to define the faction (25-40 points)
            // - A couple downsides
            // - A handful of minor buffs
            ///


            remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            List <int> excludeTraits = new List <int>(faction._gameplayAffinity._factionTraitExclusionList);

            var trait = iDefinitions._factionTraitGroup.GetRandomFactionTraitRange(excludeTraits, 25, remainingTraitScore);

            excludeTraits.Add(trait._id);
            faction._factionTraits.Add(trait);
            remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            trait = iDefinitions._factionTraitGroup.GetRandomFactionTraitRange(excludeTraits, 25, remainingTraitScore);
            excludeTraits.Add(trait._id);
            faction._factionTraits.Add(trait);
            remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            trait = iDefinitions._factionTraitGroup.GetRandomFactionTraitRange(excludeTraits, -25, -10);
            excludeTraits.Add(trait._id);
            faction._factionTraits.Add(trait);
            remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            trait = iDefinitions._factionTraitGroup.GetRandomFactionTraitRange(excludeTraits, 5, remainingTraitScore);
            excludeTraits.Add(trait._id);
            faction._factionTraits.Add(trait);
            remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            trait = iDefinitions._factionTraitGroup.GetRandomFactionTraitRange(excludeTraits, -5, remainingTraitScore);
            excludeTraits.Add(trait._id);
            faction._factionTraits.Add(trait);
            remainingTraitScore = desiredTraitScore - faction.CalculateTraitScore();

            trait = iDefinitions._factionTraitGroup.GetRandomFactionTraitRange(excludeTraits, 5, remainingTraitScore);
            excludeTraits.Add(trait._id);
            faction._factionTraits.Add(trait);

            return(faction);
        }
 abstract public List <CustomFaction> GenerateRandomCustomFactions(int iNumbers, TraitDefinitions iDefinitions, Preferences iPreferences);
 abstract public CustomFaction GenerateRandomCustomFaction(TraitDefinitions iDefinitions, Preferences iPreferences);