public override bool checkProceduralPrecondition(GameObject agent)
    {
        Farmer farmer = (Farmer)agent.GetComponent(typeof(Farmer));

        if (farmer.actualOrchard != null)
        {
            targetOrchard = farmer.actualOrchard;
            if (targetOrchard != null)
            {
                float diff = 0.25f;
                float posX = targetOrchard.transform.position.x + Random.Range(-diff, diff);
                float posY = targetOrchard.transform.position.y + Random.Range(-diff, diff);

                targetPosition = new Vector3(posX, posY, agent.transform.position.z);
            }
        }
        else
        {
            OrchardBuilding[] orchards     = (OrchardBuilding[])FindObjectsOfType(typeof(OrchardBuilding));
            OrchardBuilding   finalOrchard = null;
            if (orchards != null && orchards.Length > 0)
            {
                foreach (OrchardBuilding orchard in orchards)
                {
                    if (!orchard.full && orchard.blueprint.done)
                    {
                        finalOrchard = orchard;
                    }
                }
            }

            if (finalOrchard == null)
            {
                // Add orchard request building
                addOrchardRequest(farmer);
                return(false);
            }

            if (!finalOrchard.addFarmer())
            {
                // Add orchard request building
                addOrchardRequest(farmer);
                return(false);
            }

            farmer.actualOrchard = finalOrchard;
            targetOrchard        = farmer.actualOrchard;

            float diff = 0.25f;
            float posX = targetOrchard.transform.position.x + Random.Range(-diff, diff);
            float posY = targetOrchard.transform.position.y + Random.Range(-diff, diff);

            targetPosition = new Vector3(posX, posY, agent.transform.position.z);
        }

        return(targetOrchard != null);
    }
    public override bool checkProceduralPrecondition(GameObject agent)
    {
        // Move to random position in the orchard
        Farmer farmer = (Farmer)agent.GetComponent(typeof(Farmer));

        if (farmer.actualOrchard != null)
        {
            targetOrchard = farmer.actualOrchard;
            float diff = 0.25f;
            float posX = targetOrchard.transform.position.x + Random.Range(-diff, diff);
            float posY = targetOrchard.transform.position.y + Random.Range(-diff, diff);
            targetPosition = new Vector3(posX, posY, agent.transform.position.z);
        }

        return(targetOrchard != null);
    }
 public override void reset()
 {
     farmed        = false;
     targetOrchard = null;
     startTime     = 0;
 }