public BeatingInProgress GetOrStartBeatingInProgress(Pawn beatee, Pawn beater = null)
        {
            BeatingInProgress beating = GetBeatingInProgress(beatee);

            if (beating == null)
            {
                beating        = new BeatingInProgress();
                beating.beatee = beatee;
                beatingsInProgress.Add(beating);

                Logger.MessageFormat(this, "Started a new beating for {0}", beatee);
            }

            if (beater != null)
            {
                beating.AddBeater(beater);
                BeatingCounter counter = beatingCounters.Find(bc => bc.beater == beater);
                if (counter == null)
                {
                    counter                 = new BeatingCounter();
                    counter.beater          = beater;
                    counter.nextBeatingTick = Find.TickManager.TicksGame + minimumBeatingInterval;
                }
            }

            return(beating);
        }
        public bool CanGiveBeating(Pawn beater)
        {
            BeatingCounter counter = beatingCounters.Find(bc => bc.beater == beater);

            if (counter == null)
            {
                return(true);
            }

            int ticksUntilNextBeating = counter.nextBeatingTick - Find.TickManager.TicksGame;

            if (ticksUntilNextBeating > 0)
            {
                Logger.MessageFormat(this, "{0} cannot give beating for another {1} ticks", beater, ticksUntilNextBeating);
            }

            return(ticksUntilNextBeating <= 0);
        }