/// <summary>
        /// Imprints a ruleset template onto a new Active Ruleset, applying all rules as configured
        /// </summary>
        /// <param name="template"></param>
        /// <returns></returns>
        internal static AppliedRuleset MakeRerolledRuleset(RulesetTemplate template)
        {
            var result = new AppliedRuleset(template);

            result.CopyDicts(template);
            if (template.ParentRuleset != null)
            {
                result.ComposeFrom(template.ParentRuleset);
            }
            foreach (var job in template.Jobs.Where(x => x.Type == RealmRulesetLinkType.apply_after_inherit))
            {
                result.ApplyJob(job);
            }

            // Composition needs to happen first before rerolling,
            // so that random properties that depend on other random
            // properties with a composition rule can be applied in sequence
            result.RerollAllRules();
            return(result);
        }
 public WorldRealm(Realm realmEntity, RulesetTemplate ruleset)
 {
     Realm           = realmEntity;
     RulesetTemplate = ruleset;
     StandardRules   = AppliedRuleset.MakeRerolledRuleset(RulesetTemplate);
 }