private void Update()
    {
        float timePassed = ts.GetTimePassed();

        if (!canEat)
        {
            eatCooldownTimer -= timePassed;
            if (eatCooldownTimer < 0f)
            {
                eatCooldownTimer = eatCooldownTime;
                canEat           = true;
            }
        }
        // If the villager is heading towards food...
        if (destinationIsFood)
        {
            // GET TO THE FOOD ROY
            agent.destination = cropTarget.transform.position;
            // If the villager is close enough to the crop...
            if ((GetDestinationDistance() < cropEatDistance) && canEat)
            {
                // Eat a bit of the crop.
                cropTarget.DecreaseHealth();
                // Restore health.
                compHealth.Heal(1, Health.Type.Hunger);
                // Temporarily prevent the villager from eating another crop.
                canEat = false;
            }
        }
        // If the villager is NOT heading towards food, head towards other things.
        else
        {
            // If the villager is targeting the shrine...
            if (destinationIsShrine)
            {
                agent.destination = shrine.transform.position;
                // If the villager is within shrine charging distance...
                if (GetDestinationDistance() < shrineChargeDistance)
                {
                    // Increase the idle time.
                    timeIdled += timePassed;
                    // If the villager has idled at the shrine for long enough...
                    if (timeIdled > shrineIdleTime)
                    {
                        // Reward faith points.
                        shrine.IncreasePoints(compVillagerStatus.faithAmount, transform.position);
                        // Reset the idle time and stop targeting the shrine.
                        timeIdled           = 0f;
                        destinationIsShrine = false;
                        // Check if the villager wants food.
                        CheckIfWantsCrop();
                    }
                }
            }
            // If the villager is targeting the house...
            else
            {
                agent.destination = houseTransform.position;
                // If the villager is close enough to the house destination to be considered idling...
                if (GetDestinationDistance() < houseDestinationDistance)
                {
                    // Increase the idle time.
                    timeIdled += timePassed;
                    // If the villager has idled at the house for long enough...
                    if (timeIdled > houseIdleTime)
                    {
                        // Reset the idle time and start heading to the shrine.
                        timeIdled           = 0f;
                        destinationIsShrine = true;
                        // Check if the villager wants food.
                        CheckIfWantsCrop();
                    }
                }
            }
        }
    }