コード例 #1
0
ファイル: EquipFood.cs プロジェクト: likeafox/EquipFood
        public static T PackFood <T>(string fn, Pawn pawn, Thing thing = null)
            where T : struct
        {
            if (_packfood == null)
            {
                _packfood = new JobGiver_PackFood();
            }
            MethodInfo m = typeof(JobGiver_PackFood).GetMethod(fn,
                                                               BindingFlags.Instance | BindingFlags.NonPublic);

            if (m.ReturnType != typeof(T))
            {
                throw new ArgumentException();
            }
            var args = m.GetParameters()
                       .Select <ParameterInfo, object>(delegate(ParameterInfo p)
            {
                var pT = p.ParameterType;
                if (pT == typeof(Pawn))
                {
                    return(pawn);
                }
                else if (pT == typeof(Thing))
                {
                    return(thing);
                }
                else
                {
                    throw new ArgumentException("type now allowed");
                }
            }).ToArray();

            return((T)m.Invoke(_packfood, args));
        }
コード例 #2
0
            static bool Prefix(JobGiver_PackFood __instance, ref Job __result, Pawn pawn)
            {
                if (!Settings.fun_police || pawn.timetable == null || pawn.timetable.CurrentAssignment != TimeAssignmentDefOf.Joy &&
                    (pawn.timetable.CurrentAssignment != TimeAssignmentDefOf.Sleep || pawn.needs != null && pawn.needs.rest != null && pawn.needs.rest.CurLevel <= 0.3f))
                {
                    return(true);
                }

                if (pawn.inventory == null)
                {
                    __result = null;
                    return(false);
                }

                float invNutrition = (float)LGetInventoryPackableFoodNutrition.Invoke(__instance, new object[] { pawn });

                if (invNutrition > 0.4f)
                {
                    __result = null;
                    return(false);
                }

                if (pawn.Map.resourceCounter.TotalHumanEdibleNutrition < pawn.Map.mapPawns.ColonistsSpawnedCount * 1.5f)
                {
                    __result = null;
                    return(false);
                }

                Thing        thing      = null;
                ref Thing    foodSource = ref thing;