void _handlePatrolState()
 {
     if (Vector2.Distance(transform.position, moveDest) < reachDist)
     {
         //Transition to idle
         idleDone = Time.time + Random.Range(1.5f, 3.0f);
         state    = G_State.Idle;
         anim.SetFloat("move", 0);
         anim.SetTrigger("idle");
     }
 }
 void _handleIdleState()
 {
     if (Time.time > idleDone)
     {
         //Transition back to patrolling
         if (patrolSwitch)
         {
             moveDest = patrolLoc.position;
         }
         else
         {
             moveDest = startPos;
         }
         patrolSwitch = !patrolSwitch;
         state        = G_State.Patrolling;
     }
 }
    // Start is called before the first frame update
    void Start()
    {
        startPos      = transform.position;
        state         = G_State.Patrolling;
        newState      = G_State.Null;
        m_Rigidbody2D = GetComponent <Rigidbody2D>();
        anim          = GetComponent <Animator>();

        if (target != null)
        {
            state    = G_State.Chasing;
            moveDest = target.transform.position;
        }
        else if (patrolLoc != null)
        {
            moveDest = patrolLoc.position;
        }
    }
    // Update is called once per frame
    void Update()
    {
        switch (state)
        {
        case G_State.Patrolling:
            Move();
            _handlePatrolState();
            break;

        case G_State.Chasing:
            Move();
            _handleChaseState();
            break;

        case G_State.Idle:
            _handleIdleState();
            break;
        }
        if (newState != G_State.Null && target == null)
        {
            state    = newState;
            newState = G_State.Null;
        }
    }
 public void SetNewState(G_State n)
 {
     newState = n;
 }