Example #1
0
        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);
            }
        }
Example #3
0
        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)));
        }