예제 #1
0
        public static void CopyTo(this HarmonyMethod from, HarmonyMethod to)
        {
            if (to == null)
            {
                return;
            }
            var fromTrv = Traverse.Create(from);
            var toTrv   = Traverse.Create(to);

            HarmonyMethod.HarmonyFields().ForEach(f =>
            {
                var val = fromTrv.Field(f).GetValue();
                if (val != null)
                {
                    toTrv.Field(f).SetValue(val);
                }
            });
        }
예제 #2
0
        public static HarmonyMethod Merge(this HarmonyMethod master, HarmonyMethod detail)
        {
            if (detail == null)
            {
                return(master);
            }
            var result    = new HarmonyMethod();
            var resultTrv = Traverse.Create(result);
            var masterTrv = Traverse.Create(master);
            var detailTrv = Traverse.Create(detail);

            HarmonyMethod.HarmonyFields().ForEach(f =>
            {
                var baseValue   = masterTrv.Field(f).GetValue();
                var detailValue = detailTrv.Field(f).GetValue();
                resultTrv.Field(f).SetValue(detailValue ?? baseValue);
            });
            return(result);
        }
예제 #3
0
        public static HarmonyMethod Merge(this HarmonyMethod master, HarmonyMethod detail)
        {
            if (detail == null)
            {
                return(master);
            }
            var harmonyMethod = new HarmonyMethod();
            var resultTrv     = Traverse.Create(harmonyMethod);
            var masterTrv     = Traverse.Create(master);
            var detailTrv     = Traverse.Create(detail);

            HarmonyMethod.HarmonyFields().ForEach(delegate(string f)
            {
                var value  = masterTrv.Field(f).GetValue();
                var value2 = detailTrv.Field(f).GetValue();
                resultTrv.Field(f).SetValue(value2 ?? value);
            });
            return(harmonyMethod);
        }