public void Execute()
 {
     // Check for targets
     if (!zombie.CheckForTargets())   // Cannot see a target
     {
         zombie.stateMachine.ChangeState(new InvestigateState(zombie));
     }
     else     // Can see a target, check if they are within attacking distance
     {
         float sqrTargetDist = Maths.SqrMag(zombie.transform.position - zombie.target.transform.position);
         if (sqrTargetDist < Maths.Squared(zombie.attackRange))
         {
             zombie.stateMachine.ChangeState(new AttackState(zombie));
         }
     }
 }
    public void Execute()
    {
        // Set a new random target position if we have reached the last one
        if (zombie.transform.position.x == target.x || target == Vector3.zero)
        {
            if (zombie.transform.position.z == target.z || target == Vector3.zero)
            {
                target = AI.GetRandomTargetPosition(zombie.transform.position, Random.Range(20f, 40f));
                zombie.agent.SetDestination(target);
            }
        }

        // If zombie can see a target
        if (zombie.CheckForTargets())
        {
            // Go to the chase state
            zombie.stateMachine.ChangeState(new ChaseState(zombie));
        }
    }
 public void Execute()
 {
     // Check if zombie can see a target once a second
     if (Time.time > nextTargetCheck)
     {
         checks++;
         nextTargetCheck = Time.time + targetCheckDelay;
         if (zombie.CheckForTargets())
         {
             zombie.stateMachine.ChangeState(new ChaseState(zombie)); // It can see a target, go to chase state
         }
         else
         {
             if (checks > 3)
             {
                 zombie.stateMachine.ChangeState(new WanderState(zombie));
             }
         }
     }
 }