public override void CompTick()
        {
            OldDefsCleanup();
            if (Find.TickManager.TicksGame % 100 != 0)
            {
                return;
            }

            var caravan = GetCaravan();

            // Wake up the caravan if it's ready to work
            if (workOnWakeUp && CaravanCurrentState() == CaravanState.ReadyToWork)
            {
                workOnWakeUp           = false;
                currentlyWorkingOnSite = true;
                Messages.Message("RotR_CaravanWakesUp".Translate(caravan.Label, site.roadDef.label),
                                 MessageTypeDefOf.NeutralEvent);
            }

            // Do some work & stop working if finished
            // Caravan is working AND there's a site here AND caravan can work AND the site is indeed the same the caravan was working on
            if (currentlyWorkingOnSite & IsThereAConstructionSiteHere() &
                (CaravanCurrentState() == CaravanState.ReadyToWork) && GetCaravan().Tile == GetSite().Tile)
            {
                base.CompTick();
                site.TryToSkipBetterRoads(caravan); // No need to work if there's a better road here
                if (RoadsOfTheRim.DoSomeWork(caravan, GetSite(), out _))
                {
                    StopWorking();
                    UnsetSite();
                }
            }

            // Site tile and Caravan tile mismatch
            if (GetSite() != null && GetCaravan().Tile != GetSite().Tile)
            {
                StopWorking();
                UnsetSite();
            }

            // Stop working as soon as the caravan moves, or rests, or is downed
            if (currentlyWorkingOnSite & (CaravanCurrentState() != CaravanState.ReadyToWork))
            {
                StopWorking();
                var stoppedReason = "";
                // More general use of workOnWakeUp : set it to true if the caravan was working on a site but stopped working for any reason listed in CaravanState
                workOnWakeUp = true;
                if (CaravanCurrentState() == CaravanState.AllOwnersDowned)
                {
                    stoppedReason = "RotR_EveryoneDown".Translate();
                }

                if (CaravanCurrentState() == CaravanState.AllOwnersHaveMentalBreak)
                {
                    stoppedReason = "RotR_EveryoneCrazy".Translate();
                }

                // I decided to remove this (Issue #38) so code should never reach here
                if (CaravanCurrentState() == CaravanState.ImmobilizedByMass)
                {
                    stoppedReason = "RotR_TooHeavy".Translate();
                }

                if (CaravanCurrentState() == CaravanState.NightResting)
                {
                    stoppedReason = "RotR_RestingAtNight".Translate();
                }

                if (stoppedReason != "")
                {
                    Messages.Message("RotR_CaravanStopped".Translate(caravan.Label, site.roadDef.label) + stoppedReason,
                                     MessageTypeDefOf.RejectInput);
                }

                // This should not happen ?
                else
                {
                    workOnWakeUp = false;
                }
            }

            if (!IsThereAConstructionSiteHere())
            {
                StopWorking();
            }
        }