public static void DoBreakdownMaintenance(this CompBreakdownable _this)
        {
            _this.DoBreakdown();

            // reset durability
            _this.Durability(1f);
        }
        public static bool Prefix(CompBreakdownable __instance, ref string __result)
        {
            // vanilla can handle broken down
            if (__instance.BrokenDown)
            {
                return(true);
            }

            // we'll handle showing the maintenance
            __result = "FluffyBreakdowns.Maintenance".Translate(__instance.Durability().ToStringPercent());
            return(false);
        }
        public static bool Prefix(CompBreakdownable __instance)
        {
            if (!__instance.BrokenDown)
            {
                float durabilityLoss = (float)Controller.CheckInterval / (float)Controller.ComponentLifetime;
                if (!__instance.InUse())
                {
                    durabilityLoss *= Settings.NotUsedFactor;
                }

                durabilityLoss *= __instance.MaintenanceComplexityFactor();

                __instance.DurabilityLoss(durabilityLoss);

                // durability below 50%, increasing chance of breakdown ( up to almost guaranteed at 1% (minimum) maintenance.
                if (__instance.Durability() < .5 && Rand.MTBEventOccurs(GenDate.TicksPerYear * __instance.Durability(), 1f, Controller.CheckInterval))
                {
                    __instance.DoBreakdownMaintenance();
                }
            }

            // return false to stop vanilla CheckForBreakdown execution
            return(false);
        }
 internal static void DurabilityLoss(this CompBreakdownable _this, float loss)
 {
     _this.Durability(_this.Durability() - loss);
 }