Example #1
0
        public void Update(RimworldTime time)
        {
            var hoursPassed = (time.Year - _updateTime.Year) * 60 * 24 + (time.Day - _updateTime.Day) * 24 + time.Hour -
                              _updateTime.Hour;

            _updateTime.Day  = time.Day;
            _updateTime.Hour = time.Hour;
            if (Prefs.DevMode && Settings.VerboseLogging)
            {
                Log.Message(
                    $"----- Work Manager: Updating cache for {Pawn.LabelShort} (hours passed = {hoursPassed})... -----");
            }
            IsCapable    = !Pawn.Dead && !Pawn.Downed && !Pawn.InMentalState;
            IsRecovering = IsCapable && Settings.RecoveringPawnsUnfitForWork &&
                           HealthAIUtility.ShouldSeekMedicalRest(Pawn);
            IsManaged = WorkManager.GetPawnEnabled(Pawn);
            WorkPriorities.Clear();
            _managedWorkTypes.Clear();
            var workTypes = DefDatabase <WorkTypeDef> .AllDefsListForReading.Where(w => w.visible);

            foreach (var workType in workTypes)
            {
                WorkPriorities.Add(workType, IsManagedWork(workType) ? 0 : Pawn.workSettings.GetPriority(workType));
            }
            if (!IsCapable)
            {
                return;
            }
            if (hoursPassed >= 24)
            {
                DisabledWorkTypes.Clear();
                BadWorkTypes.Clear();
            }
            if (hoursPassed >= 6)
            {
                if (Settings.UsePawnLearningRateThresholds)
                {
                    _skillLearningRates.Clear();
                    foreach (var skill in DefDatabase <SkillDef> .AllDefsListForReading)
                    {
                        _skillLearningRates.Add(skill, Pawn.skills.GetSkill(skill).LearnRateFactor());
                    }
                }
                _workSkillLearningRates.Clear();
                _workSkillLevels.Clear();
            }
        }
Example #2
0
        public bool IsBadWork([NotNull] WorkTypeDef workType)
        {
            if (workType == null)
            {
                throw new ArgumentNullException(nameof(workType));
            }
            if (Settings.IsBadWorkMethod == null)
            {
                return(false);
            }
            if (BadWorkTypes.ContainsKey(workType))
            {
                return(BadWorkTypes[workType]);
            }
            var value = (bool)Settings.IsBadWorkMethod.Invoke(null, new object[] { Pawn, workType });

            BadWorkTypes.Add(workType, value);
            return(value);
        }