コード例 #1
0
        static private void FixFactsWithContextRankConfig()
        {
            FastGetter contextRankConfig_Archetype_getter = Helpers.CreateFieldGetter <ContextRankConfig>("Archetype");

            List <BlueprintUnitFact> facts = new List <BlueprintUnitFact>();

            foreach (string id in config.FactWithContextRankConfig)
            {
                facts.Add(library.Get <BlueprintUnitFact>(id));
            }
            facts.AddRange(draconicBreathAbilities);
            facts.AddRange(elementalRayAbilities);
            facts.AddRange(elementalBlastAbilities);
            foreach (BlueprintUnitFact fact in facts)
            {
                var comps = fact.GetComponents <ContextRankConfig>();
                if (comps == null)
                {
                    throw new Exception($"In BloodArcanist FixFactsWithContextRankConfig: Fact {fact.name} has null ContextRankConfig arrays.");
                }
                //ContextRankConfig has only one archetype slot, and that slot is occupied
                //by Eldritch Scion already. This is a very troublesome issue.
                //Curse you three thousands, Owlcat!!!
                //So here we want to use harmony patches to "Add" Blood Arcanist archetype
                //to the return value of ContextRankConfig.GetBaseValue(), when we are dealing with
                //those ContextRankConfigs that have something to do with sorcerer/eldritch scion levels.

                //The patch is class ContextRankConfig_GetBaseValue_Patch
                wantToModify_ContextRankConfig.AddRange(comps);
            }
        }
コード例 #2
0
        static private void FixExistingBlueprintFacts()
        {
            FastGetter classes_Getter = Helpers.CreateFieldGetter <ContextRankConfig>("m_Class");
            FastSetter classes_Setter = Helpers.CreateFieldSetter <ContextRankConfig>("m_Class");

            foreach (string factId in config.FactsWithContextRankConfig)
            {
                BlueprintUnitFact fact = library.Get <BlueprintUnitFact>(factId);
                foreach (ContextRankConfig comp in fact.GetComponents <ContextRankConfig>())
                {
                    if (comp.IsBasedOnClassLevel)
                    {
                        BlueprintCharacterClass[] classes = classes_Getter(comp) as BlueprintCharacterClass[];
                        if (classes == null)
                        {
                            throw new Exception($"Error! get null classes for IsBasedOnClassLevel ContextRankConfig named {fact.name}!");
                        }
                        List <BlueprintCharacterClass> classesList = classes.ToList <BlueprintCharacterClass>();
                        if (classesList.Contains(wizard))
                        {
                            classesList.Add(ArcanistClass.arcanist);
                        }
                        classes_Setter(comp, classesList.ToArray());
                    }
                }
            }
        }
コード例 #3
0
        static private void FixResources()
        {
            FastGetter Amount_Getter = Helpers.CreateFieldGetter <BlueprintAbilityResource>("m_MaxAmount");
            FastSetter Amount_Setter = Helpers.CreateFieldSetter <BlueprintAbilityResource>("m_MaxAmount");

            foreach (string resId in config.ResourcesIds)
            {
                var res    = library.Get <BlueprintAbilityResource>(resId);
                var amount = Amount_Getter(res);
                Helpers.SetField(amount, "Class", new BlueprintCharacterClass[] { wizard, ArcanistClass.arcanist });
                Amount_Setter(res, amount);
            }
        }
コード例 #4
0
ファイル: FixBlueprint.cs プロジェクト: jp-bennett/Arcanist
 static public void Fix <T> (ref T x) where T : BlueprintScriptableObject
 {
     if (x as T)
     {
         FastGetter assetIdGetter = Helpers.CreateFieldGetter <T>("m_AssetGuid");
         var        guid          = assetIdGetter(x) as string;
         if (guid != null)
         {
             x = library.Get <T>(guid);
         }
         else
         {
             throw new Exception("x is not a BlueprintScriptableObject");
         }
     }
 }
コード例 #5
0
 static bool Prepare()
 {
     SellDiscountedBuildingGetter = Accessors.CreateGetter <SettlementState, BlueprintSettlementBuilding>("SellDiscountedBuilding");
     SellDiscountedBuildingSetter = Accessors.CreateSetter <SettlementState, BlueprintSettlementBuilding>("SellDiscountedBuilding");
     return(true);
 }
コード例 #6
0
ファイル: RisiaMainLoad.cs プロジェクト: jp-bennett/Arcanist
        static public void LoadOnLibraryLoaded()
        {
            if (loaded)
            {
                return;
            }
            flagIsRisiaSpawned     = Helpers.Create <BlueprintUnlockableFlag>();
            flagIsRisiaBossSpawned = Helpers.Create <BlueprintUnlockableFlag>();
            library.AddAsset(flagIsRisiaSpawned, "942339abe7b76dfb00324d433a0a9342");
            library.AddAsset(flagIsRisiaBossSpawned, "942339abe7b76dfb00324d433a0a9343");
            flagIsRisiaSpawned.Lock();
            flagIsRisiaSpawned.name = "flagIsRisiaSpawned";
            flagIsRisiaBossSpawned.Lock();
            flagIsRisiaBossSpawned.name = "flagIsRisiaBossSpawned";

            FastGetter    portrait_Getter    = Helpers.CreateFieldGetter <BlueprintUnit>("m_Portrait");
            PortraitData  risia_portraitData = CreatePortraitData("Risia");
            BlueprintUnit risia_companion    = library.Get <BlueprintUnit>("c2dc52c5fec84bc2a74e2cb34fdb566b");
            BlueprintUnit risia_neutral      = library.Get <BlueprintUnit>("d87f8e86724f46e798821d60f9d31eaf");
            BlueprintUnit risia_boss         = library.Get <BlueprintUnit>("95fb27a5b8ae40099bd727ea93de5b9b");

            foreach (var unit in new BlueprintUnit[] { risia_companion, risia_neutral, risia_boss })
            {
                BlueprintPortrait portraitBlue = portrait_Getter(unit) as BlueprintPortrait;
                portraitBlue.Data = risia_portraitData;
            }
            RisiaAddSpecialSpells.LoadSpecialSpells();
            RisiaAddLevels.Load();
            RisiaAddSpecialSpells.CreateFeats();
            RisiaAddBrain.Load();

            List <BlueprintFeature> risiaNeutralAddFacts = new List <BlueprintFeature>();

            risiaNeutralAddFacts.AddRange(RisiaAddLevels.RisiaAddFacts);
            risiaNeutralAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellListFeat);
            risiaNeutralAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellFeat);
            List <BlueprintFeature> risiaBossAddFacts = new List <BlueprintFeature>();

            risiaBossAddFacts.AddRange(RisiaAddLevels.RisiaBossAddFacts);
            risiaBossAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellListFeat);
            risiaBossAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellFeat);

            var risiaFeatureList = Helpers.CreateFeature("RisiaFeatureList", "", "",
                                                         OtherUtils.GetMd5("Risia.FeatureList"),
                                                         IconSet.elvenmagic,
                                                         FeatureGroup.None,
                                                         //RisiaAddLevels.compNeutral,
                                                         Helpers.Create <AddFacts>(a => a.Facts = risiaNeutralAddFacts.ToArray()));
            var risiaBossFeatureList = Helpers.CreateFeature("RisiaBossFeatureList", "", "",
                                                             OtherUtils.GetMd5("Risia.Boss.FeatureList"),
                                                             IconSet.elvenmagic,
                                                             FeatureGroup.None,
                                                             //RisiaAddLevels.compBoss,
                                                             Helpers.Create <AddFacts>(a => a.Facts = risiaBossAddFacts.ToArray()));

            risia_neutral.AddComponent(RisiaAddLevels.compNeutral);
            risia_companion.AddComponent(RisiaAddLevels.compNeutral);
            risia_boss.AddComponent(RisiaAddLevels.compBoss);
            var tmpList = risia_neutral.AddFacts.ToList();

            tmpList.Add(risiaFeatureList);
            risia_neutral.AddFacts = tmpList.ToArray();
            var tmpList2 = risia_companion.AddFacts.ToList();

            tmpList2.Add(risiaFeatureList);
            risia_companion.AddFacts = tmpList2.ToArray();
            var tmpList3 = risia_boss.AddFacts.ToList();

            tmpList3.Add(risiaBossFeatureList);
            risia_boss.AddFacts = tmpList3.ToArray();

            RisiaAddDispelAura.AddToRisia(ref risia_boss);
            loaded = true;
        }
 static bool Prepare()
 {
     IsHighlightingGet = Accessors.CreateGetter <InteractionHighlightController, bool>("IsHighlighting");
     IsHighlightingSet = Accessors.CreateSetter <InteractionHighlightController, bool>("IsHighlighting");
     return(true);
 }
コード例 #8
0
        public void should_throw_when_instance_not_proper_type()
        {
            var setter = new FastGetter(typeof(Animal), i => ((Animal)i).Name);

            Assert.Throws <InvalidOperationException>(() => setter.Get("not an animal"));
        }
コード例 #9
0
 public FastProperty(PropertyInfo property)
 {
     getter = property.CreateFastGetter <TObject, TValue>();
     setter = property.CreateFastSetter <TObject, TValue>();
 }
コード例 #10
0
 public void should_throw_when_instance_not_proper_type()
 {
     var setter = new FastGetter(typeof(Animal), i => ((Animal)i).Name);
     Assert.Throws<InvalidOperationException>(() => setter.Get("not an animal"));
 }
コード例 #11
0
        private static void GetInfo(Type type, List <StateInfo> states, List <StateTriggerInfo> triggers, List <StateTransitionInfo> transitions)
        {
            // Recurse through all parent types as well
            if (type.BaseType != null)
            {
                GetInfo(type.BaseType, states, triggers, transitions);
            }

            // Get all public and private methods
            var members = type.GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            foreach (var member in members)
            {
                switch (member.MemberType)
                {
                case MemberTypes.Field:
                case MemberTypes.Property:
                {
                    foreach (var attr in member.GetCustomAttributes <StateTriggerAttribute>())
                    {
                        var trigger = new StateTriggerInfo();
                        trigger.From        = GetState(states, attr.From);
                        trigger.To          = GetState(states, attr.To);
                        trigger.TargetValue = attr.Value;
                        trigger.Getter      = (FastGetter <bool>)FastGetter.Create(member);

                        if (trigger.To == null)
                        {
                            throw new InvalidOperationException("trigger to state must not be null");
                        }

                        triggers.Add(trigger);
                    }
                    break;
                }

                case MemberTypes.Method:
                {
                    // Get transitions
                    foreach (var attr in member.GetCustomAttributes <StateTransitionAttribute>())
                    {
                        var trans = new StateTransitionInfo();
                        trans.From = GetState(states, attr.From);
                        trans.To   = GetState(states, attr.To);
                        if (((member as MethodInfo).GetParameters()).Length == 0)
                        {
                            trans.InvokeDelegate = (OpenDelegate)OpenDelegate.Create(member as MethodInfo);
                        }
                        else
                        {
                            throw new InvalidOperationException("state transitions must return void and take no parameter or one parameter as a float");
                        }

                        if (trans.To == null)
                        {
                            throw new InvalidOperationException("transition to state must not be null");
                        }

                        transitions.Add(trans);
                    }

#if false
                    // Get states
                    foreach (var attr in member.GetCustomAttributes <StateAttribute>())
                    {
                        var state      = GetState(states, attr.Name ?? member.Name);
                        var parameters = (member as MethodInfo).GetParameters();
                        if (parameters.Length == 0)
                        {
                            state.InvokeDelegate = (OpenDelegate)OpenDelegate.Create(member as MethodInfo);
                        }
                        else if (parameters.Length == 1 && parameters[0].ParameterType == typeof(float))
                        {
                            state.InvokeWithTimeDelegate = (OpenDelegate <float>)OpenDelegate.Create(member as MethodInfo);
                        }
                        else
                        {
                            throw new InvalidOperationException("states must return void and take no parameter or one parameter as a float");
                        }
                    }
#endif
                    break;
                }
                }
            }
        }