private static bool AnyFlagsSet(ModifierTag required, ModifierTag set) { var toCheck = Enum.GetValues(typeof(ModifierTag)) as IEnumerable <ModifierTag>; foreach (Enum value in toCheck.Where(x => required.HasFlag(x) && x != ModifierTag.None)) { if (set.HasFlag(value)) { return(true); } } return(false); }
public Modifier(ModifierCategory category, ModifierTag tag) { Tag = tag; Category = category; switch (Category) { case ModifierCategory.Domain: defineDomains(tag); break; case ModifierCategory.Province: defineProvincialModifiers(tag); break; } }
private void defineProvincialModifiers(ModifierTag tag) { switch (tag) { case ModifierTag.ThePlague: Excludes = null; Forbids = new CreationTag[] { CreationTag.Creation }; IncreasesWeight = null; DecreasesWeight = new CreationTag[] { CreationTag.Conquest, CreationTag.Construction, CreationTag.Army }; IncreaseCost = null; DecreaseCost = null; break; case ModifierTag.Permafrost: Excludes = null; Forbids = new CreationTag[] { CreationTag.Tree }; IncreasesWeight = null; DecreasesWeight = new CreationTag[] { CreationTag.Life }; IncreaseCost = null; DecreaseCost = null; break; } }
private void defineDomains(ModifierTag tag) { switch (tag) { case ModifierTag.Architecture: Excludes = null; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Construction }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Construction }; break; case ModifierTag.Battle: Excludes = new List <ModifierTag>() { ModifierTag.Peace }; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Military, CreationTag.Battle, CreationTag.Combat }; DecreasesWeight = new CreationTag[] { CreationTag.Peace }; IncreaseCost = new CreationTag[] { CreationTag.Peace }; DecreaseCost = new CreationTag[] { CreationTag.Battle }; break; case ModifierTag.Cold: Excludes = new List <ModifierTag>() { ModifierTag.Heat, ModifierTag.Fire }; Forbids = new CreationTag[] { CreationTag.Heat }; IncreasesWeight = new CreationTag[] { CreationTag.Cold }; DecreasesWeight = new CreationTag[] { CreationTag.Fire, CreationTag.Heat }; IncreaseCost = new CreationTag[] { CreationTag.Cold }; DecreaseCost = new CreationTag[] { CreationTag.Heat }; break; case ModifierTag.Community: Excludes = new List <ModifierTag>() { ModifierTag.Solitary }; Forbids = new CreationTag[] { CreationTag.Solitary }; IncreasesWeight = new CreationTag[] { CreationTag.Community }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Community }; break; case ModifierTag.Conquest: Excludes = new List <ModifierTag>() { ModifierTag.Peace }; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Military, CreationTag.War, CreationTag.Expansion }; DecreasesWeight = new CreationTag[] { CreationTag.Peace }; IncreaseCost = new CreationTag[] { CreationTag.Peace }; DecreaseCost = new CreationTag[] { CreationTag.Expansion }; break; case ModifierTag.Creation: Excludes = null; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Creation }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Creation }; break; case ModifierTag.Drought: Excludes = new List <ModifierTag>() { ModifierTag.Water }; Forbids = new CreationTag[] { CreationTag.Water }; IncreasesWeight = new CreationTag[] { CreationTag.Dry }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Dry }; break; case ModifierTag.Earth: Excludes = new List <ModifierTag>() { ModifierTag.Water }; Forbids = new CreationTag[] { CreationTag.Water }; IncreasesWeight = new CreationTag[] { CreationTag.Earth }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Earth }; break; case ModifierTag.Exploration: Excludes = null; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Exploration, CreationTag.Expansion }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Exploration }; break; case ModifierTag.Fire: Excludes = new List <ModifierTag>() { ModifierTag.Water }; Forbids = new CreationTag[] { CreationTag.Water }; IncreasesWeight = new CreationTag[] { CreationTag.Fire, CreationTag.Heat, CreationTag.Resurrection }; DecreasesWeight = new CreationTag[] { CreationTag.Cold }; IncreaseCost = new CreationTag[] { CreationTag.Cold }; DecreaseCost = new CreationTag[] { CreationTag.Fire }; break; case ModifierTag.Heat: Excludes = new List <ModifierTag>() { ModifierTag.Cold }; Forbids = new CreationTag[] { CreationTag.Cold }; IncreasesWeight = new CreationTag[] { CreationTag.Heat, CreationTag.Fire }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Heat }; break; case ModifierTag.Magic: Excludes = new List <ModifierTag>() { ModifierTag.AntiMagic }; Forbids = new CreationTag[] { CreationTag.AntiMagic }; IncreasesWeight = new CreationTag[] { CreationTag.Magic }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Magic }; break; case ModifierTag.Metallurgy: Excludes = null; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Metal }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Metal }; break; case ModifierTag.Nature: Excludes = null; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Nature }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Nature }; break; case ModifierTag.Peace: Excludes = new List <ModifierTag>() { ModifierTag.War }; Forbids = new CreationTag[] { CreationTag.War }; IncreasesWeight = new CreationTag[] { CreationTag.Peace, CreationTag.Alliance }; DecreasesWeight = new CreationTag[] { CreationTag.Military, CreationTag.Battle }; IncreaseCost = new CreationTag[] { CreationTag.Military }; DecreaseCost = new CreationTag[] { CreationTag.Peace }; break; case ModifierTag.Pestilence: Excludes = new List <ModifierTag>() { ModifierTag.Health }; Forbids = new CreationTag[] { CreationTag.Health }; IncreasesWeight = new CreationTag[] { CreationTag.Disease }; DecreasesWeight = new CreationTag[] { CreationTag.Healing }; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Disease }; break; case ModifierTag.Solitary: Excludes = new List <ModifierTag>() { ModifierTag.Community }; Forbids = null; IncreasesWeight = new CreationTag[] { CreationTag.Solitary, CreationTag.Isolationism }; DecreasesWeight = new CreationTag[] { CreationTag.Community, CreationTag.Diplomacy }; IncreaseCost = new CreationTag[] { CreationTag.Community }; DecreaseCost = new CreationTag[] { CreationTag.Solitary }; break; case ModifierTag.War: Excludes = new List <ModifierTag>() { ModifierTag.Peace }; Forbids = new CreationTag[] { CreationTag.Peace }; IncreasesWeight = new CreationTag[] { CreationTag.War, CreationTag.Military }; DecreasesWeight = new CreationTag[] { CreationTag.Alliance }; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.War }; break; case ModifierTag.Water: Excludes = new List <ModifierTag>() { ModifierTag.Fire }; Forbids = new CreationTag[] { CreationTag.Fire }; IncreasesWeight = new CreationTag[] { CreationTag.Water }; DecreasesWeight = new CreationTag[] { CreationTag.Earth, CreationTag.Dry }; IncreaseCost = new CreationTag[] { CreationTag.Dry }; DecreaseCost = new CreationTag[] { CreationTag.Water }; break; case ModifierTag.Wind: Excludes = new List <ModifierTag>() { ModifierTag.Earth }; Forbids = new CreationTag[] { CreationTag.Earth }; IncreasesWeight = new CreationTag[] { CreationTag.Wind }; DecreasesWeight = null; IncreaseCost = null; DecreaseCost = new CreationTag[] { CreationTag.Wind }; break; } }
public void BasicGeneration() { for (int i = 0; i < rnd.Next(MinNumberDeities, MaxNumberDeities); i++) { var deity = new Deity(i * 10293); deity.Name = Program.GenerateNames.GetName("deity_names"); deity.PowerPoints = 0; deity.Modifiers = new DeityModifiers(); deity.Powers = new List <Power>(); int nr_domains = rnd.Next(MinNumberDomains, MaxNumberDomains); deity.Domains = new Modifier[nr_domains]; List <ModifierTag> domain_tags = new List <ModifierTag>(); Array modifier_tags = Enum.GetValues(typeof(ModifierTag)); for (int j = (int)ModifierTag.DomainsBegin + 1; j < (int)ModifierTag.DomainsEnd; j++) { domain_tags.Add((ModifierTag)modifier_tags.GetValue(j)); } for (int k = 0; k < nr_domains; k++) { while (deity.Domains[k] == null) { bool is_valid_domain = true; ModifierTag domain = domain_tags[rnd.Next(domain_tags.Count)]; // Checks whether there is an incompatible domain and whether there is the same domain already in. for (int l = 0; l < nr_domains; l++) { if (deity.Domains[l] != null && (deity.Domains[l].Excludes != null && deity.Domains[l].Excludes.Contains(domain) || deity.Domains[l].Tag == domain)) { is_valid_domain = false; } } if (is_valid_domain) { deity.Domains[k] = new Modifier(ModifierCategory.Domain, domain); } } } // Shape Land Powers deity.Powers.Add(new CreateForest()); deity.Powers.Add(new CreateGrassland()); deity.Powers.Add(new CreateDesert()); deity.Powers.Add(new CreateCave()); deity.Powers.Add(new CreateLake()); deity.Powers.Add(new CreateRiver()); deity.Powers.Add(new CreateMountainRange()); deity.Powers.Add(new CreateMountain()); deity.Powers.Add(new CreateHillRange()); deity.Powers.Add(new CreateHill()); // Shape Climate Powers deity.Powers.Add(new MakeClimateWarmer()); deity.Powers.Add(new MakeClimateColder()); deity.Powers.Add(new AddClimateModifier(ClimateModifier.MagicInfused)); deity.Powers.Add(new CreateSpecialClimate(Climate.Inferno)); // Create Races Powers foreach (var race in DefinedRaces.DefinedRacesList) { foreach (var province in Program.State.ProvinceGrid) { deity.Powers.Add(new CreateRace(race, province)); } } GeneratedDeities.Add(deity); } }