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(); } }