public void Recache(WorkGiverDef workgiver) { // recache workgiver stuff var priorities = pawn.GetPriorities(workgiver); _everScheduledWorkGiver[workgiver] = priorities.Any(p => p > 0); _timeScheduledWorkGiver[workgiver] = priorities.Distinct().Count() > 1; _timeScheduledWorkGiverTip[workgiver] = DrawUtilities.TimeScheduledTip(pawn, priorities, workgiver.label); }
public void Recache(WorkGiverDef workgiver, bool bubble = true) { // recache workgiver stuff var priorities = pawn.GetPriorities(workgiver); _everScheduledWorkGiver[workgiver] = priorities.Any(p => p > 0); _timeScheduledWorkGiver[workgiver] = priorities.Distinct().Count() > 1; _timeScheduledWorkGiverTip[workgiver] = DrawUtilities.TimeScheduledTip(pawn, priorities, workgiver.label); // also recache worktype if (bubble) { Recache(workgiver.workType, false); } }
public void Recache(WorkTypeDef worktype) { var workgivers = worktype.WorkGivers(); var priorities = pawn.GetPriorities(worktype); // first make sure all workgivers are cached foreach (var workgiver in workgivers) { if (!_everScheduledWorkGiver.ContainsKey(workgiver)) { Recache(workgiver); } } // recache worktype stuff _everScheduledWorkType[worktype] = workgivers.Any(wg => _everScheduledWorkGiver[wg]); _timeScheduledWorkType[worktype] = workgivers.Any(wg => _timeScheduledWorkGiver[wg]); _timeScheduledWorkTypeTip[worktype] = DrawUtilities.TimeScheduledTip(pawn, priorities, worktype.gerundLabel); // is any workgiver different from the whole at any time during the day? _partScheduledWorkType[worktype] = TimeUtilities.WholeDay .Any(hour => worktype.WorkGivers().Any(wg => pawn.GetPriority(worktype, hour) != pawn.GetPriority(wg, hour))); }
public void Recache(WorkTypeDef worktype, bool bubble = true) { var workgivers = worktype.WorkGivers(); var priorities = pawn.GetPriorities(worktype); // first update all the workgivers (if bubbling down, or not yet set) foreach (var workgiver in workgivers) { if (bubble || !_everScheduledWorkGiver.ContainsKey(workgiver)) // using _everScheduled as a proxy - assumes all these are cached at the same time! { Recache(workgiver, false); } } // recache worktype stuff _everScheduledWorkType[worktype] = workgivers.Any(wg => _everScheduledWorkGiver[wg]); _timeScheduledWorkType[worktype] = workgivers.Any(wg => _timeScheduledWorkGiver[wg]); _timeScheduledWorkTypeTip[worktype] = DrawUtilities.TimeScheduledTip(pawn, priorities, worktype.gerundLabel); // is any workgiver different from the whole at any time during the day? _partScheduledWorkType[worktype] = TimeUtilities.WholeDay .Any(hour => worktype.WorkGivers().Any(wg => pawn.GetPriority(worktype, hour) != pawn.GetPriority(wg, hour))); }