private void Stalk()
    {
        StopCoroutine(ChooseAction());
        float _preydist = Vector3.Distance(prey.position, _beast.transform.position);
        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);

        //if (_preydist > _huntingRadius && (_playdist > roamRadius  && (_playdist > _runRadius  && (_playdist > _investigateRadius  &&  ( _playdist <= _stalkingRadius ))))) {
        if (_playdist > roamRadius && (_playdist <= _stalkingRadius))
        {
            //if (_enemyState != BoggyAI_Night_State.Roam || (_enemyState != BoggyAI_Night_State.Investigate) || (_enemyState != BoggyAI_Night_State.Run)) {
            Debug.Log("Stalk");
            if (agent.remainingDistance < remainingDistance)
            {
                GotoNextPoint();
            }
        }
        if (_playdist >= _runRadius && (_playdist < roamRadius) && (_playdist >= _investigateRadius))
        {
            StartCoroutine(ChooseAction());
        }
        if (_playdist >= _runRadius && (_playdist <= _investigateRadius))                                                                 // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isAttacking", false);
            anim.SetBool("isAlert", false);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Investigate;
        }
        else if (_preydist < _huntingRadius)
        {
            _enemyState = BoggyAI_Night_State.Hunt;
        }
    }
    private void Attack()            // Boggy Monster attack behaviour
    {
        StopCoroutine(ChooseAction());
        Debug.Log("Attack");
        anim.SetBool("isAttacking", true);
        anim.SetBool("isMoving", false);
        anim.SetBool("isAlert", false);
        anim.SetBool("isIdle", false);
        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);

        if (_playdist > _attackRadius && (_playdist <= _runRadius))
        {
            _enemyState = BoggyAI_Night_State.Run;
        }
        if (_playdist >= _runRadius && (_playdist <= _investigateRadius))                                                               // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isAttacking", false);
            anim.SetBool("isAlert", false);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Investigate;
        }
        else if (_playdist >= _runRadius && (_playdist < roamRadius) && (_playdist >= _investigateRadius))
        {
            //i

            StartCoroutine(ChooseAction());
        }
    }
    private void Roam()
    {
        Debug.Log("Roam");

        anim.SetBool("isMoving", true);
        anim.SetBool("isAttacking", false);
        anim.SetBool("isAlert", false);
        anim.SetBool("isIdle", false);
        roamArea();
        move();
        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);

        if (_playdist >= _runRadius && (_playdist <= _investigateRadius))                                                             // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isAttacking", false);
            anim.SetBool("isAlert", false);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Investigate;
        }
        if (_playdist < _attackRadius)
        {
            _enemyState = BoggyAI_Night_State.Attack;
        }
    }
    private void Run()
    {
        Debug.Log("Run");
        StopCoroutine(ChooseAction());
        //StartCoroutine (BOGGYAI_FSM());
        transform.position = Vector3.MoveTowards(_beast.transform.position, _player.transform.position, _enemyRunSpeed * Time.deltaTime); //move in direction of player
        var rotation = Quaternion.LookRotation(_player.transform.position - transform.position);                                          // ster turns in direction of player

        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, _enemyTurnSpeed * Time.deltaTime);                            // Calculate monster turn speed and turn radius
        StopCoroutine(ChooseAction());
        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);                                                  // Find players position

        if (_playdist >= _runRadius && (_playdist <= _investigateRadius))                                                                 // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isAttacking", false);
            anim.SetBool("isAlert", false);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Investigate;
        }
        if (_playdist < _attackRadius)
        {
            _enemyState = BoggyAI_Night_State.Attack;
        }
        float _preydist = Vector3.Distance(prey.position, _beast.transform.position);

        if (_preydist < _huntingRadius && (_preydist > _runRadius && _preydist > _investigateRadius))
        {
            _enemyState = BoggyAI_Night_State.Hunt;
        }
        else if (_playdist >= _runRadius && (_playdist > _huntingRadius) && (_playdist >= _investigateRadius && (_playdist < _intownRadius)))
        {
            StartCoroutine(ChooseAction());
        }
    }
    private void Idle()
    {
        Debug.Log("Idle");
        StopCoroutine(ChooseAction());
        anim.SetBool("isIdle", true);
        anim.SetBool("isMoving", false);


        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);         // Find players position

        if (_playdist < _runRadius)                                                              // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Run;
        }
        else if (_playdist >= _runRadius && (_playdist < roamRadius))
        {
            _enemyState = BoggyAI_Night_State.Roam;
        }
        if (_playdist > roamRadius && (_playdist < _stalkingRadius))                                                             // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Stalk;
        }
        if (_playdist < _attackRadius)
        {
            _enemyState = BoggyAI_Night_State.Attack;
        }
        else if (_playdist >= _runRadius && (_playdist > _huntingRadius) && (_playdist >= _investigateRadius && (_playdist < _intownRadius)))
        {
            StartCoroutine(ChooseAction());
        }
    }
    private void Initialize()
    {
        Debug.Log("Initialize");
        //_huntAI.GetComponent<HunterSM_test>().enabled = false;
        anim.SetBool("isAlert", true);
        anim.SetBool("isMoving", false);
        anim.SetBool("isIdle", false);
        StopCoroutine(ChooseAction());
        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);

        anim.SetBool("isMoving", false);
        anim.SetBool("isAttacking", false);
        anim.SetBool("isAlert", false);
        anim.SetBool("isIdle", true);

        if (_playdist <= _idleRadius)
        {
            _enemyState = BoggyAI_Night_State.Idle;
        }
        else if (_playdist < _runRadius)                                                                // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Run;
        }
        else if (_playdist > _stalkingRadius && (_playdist < _intownRadius))                                                                // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isIdle", false);
            StartCoroutine(ChooseAction());
        }
    }
    private void Hunt()                                  // Boggy Monster Hunting behaviour
    {
        Debug.Log("Hunt");
        StopCoroutine(ChooseAction());
        float _preydist = Vector3.Distance(prey.position, _beast.transform.position);
        float _playdist = Vector3.Distance(_player.position, _beast.transform.position);

        if (_preydist < _huntingRadius && _playdist > _stalkingRadius)
        {
            _enemyState = BoggyAI_Night_State.Hunt;
        }

        _huntAI.GetComponent <HunterSM_test>().enabled = true;

        //float _playdist = Vector3.Distance (_player.position, _beast.transform.position);
        if (_playdist >= _runRadius && (_playdist > roamRadius) && (_playdist < _intownRadius))
        {
            //if (_enemyState != BoggyAI_Night_State.Roam || (_enemyState != BoggyAI_Night_State.Investigate) || (_enemyState != BoggyAI_Night_State.Run)) {
            Debug.Log("Stalk");
            if (agent.remainingDistance < remainingDistance)
            {
                GotoNextPoint();
            }
        }
        if (_playdist >= _runRadius && (_playdist < roamRadius) && (_playdist >= _investigateRadius))
        {
            StartCoroutine(ChooseAction());
        }
        if (_playdist >= _runRadius && (_playdist <= _investigateRadius))                                                                 // if player distance is than run radius
        {
            anim.SetBool("isMoving", true);
            anim.SetBool("isAttacking", false);
            anim.SetBool("isAlert", false);
            anim.SetBool("isIdle", false);
            _enemyState = BoggyAI_Night_State.Investigate;
        }
        else if (_playdist < _attackRadius)
        {
            _enemyState = BoggyAI_Night_State.Attack;
        }
    }
    private void OnTriggerEnter(Collider detectplayer)
    {
        if (detectplayer.CompareTag("Player"))                                                  //Detects if Player entered Collider
        {
            _enemyState = BoggyAI_Night_State.Initialize;                                       //set monster state to initialize

            Debug.Log("FSM-Start");
            float _playdist = Vector3.Distance(_player.position, _beast.transform.position);
            if (_playdist < _runRadius)                                                                  // if player distance is than run radius
            {
                anim.SetBool("isMoving", true);
                anim.SetBool("isIdle", false);
                _enemyState = BoggyAI_Night_State.Run;
            }
            else if (_playdist >= _runRadius && (_playdist < roamRadius))
            {
                //if (_playdist > _idleRadius) {


                _enemyState = BoggyAI_Night_State.Roam;
            }


            //Debug.Log ("FSM-Start");
        }
        else if (Waypoint.CompareTag("waypoint"))                   // check if collider is  a waypoint
        {
            Destroy(WP);
            wayP        = false;
            _enemyState = BoggyAI_Night_State.Idle;
        }
        else if (Waypoint.CompareTag("prey"))                        // check if collider is a prey
        {
            _enemyState = BoggyAI_Night_State.Hunt;
        }

        StopCoroutine(ChooseAction());
        StartCoroutine(BOGGYAI_FSM());
    }
    private IEnumerator ChooseAction()            // initiate auto behaviour
    {
        while (true)
        {
            yield return(new WaitForSeconds(3.0f));

            if (!wayP)
            {
                int num = Random.Range(0, 2);
                if (num == 0)
                {
                    _enemyState = BoggyAI_Night_State.Roam;
                }
                else if (num == 1)
                {
                    _enemyState = BoggyAI_Night_State.Alert;
                }                 //else if (num == 2) {
                //_enemyState = BoggyAI_Night_State.Hunt;
                //}
            }
        }
    }
 private void OnTriggerExit(Collider detectplayer)
 {
     if (detectplayer.CompareTag("Player"))                                                          //Detects if Player exits Collider
     {
         float _playdist = Vector3.Distance(_player.position, _beast.transform.position);
         if (_playdist < _runRadius)                                                                  // if player distance is than run radius
         {
             anim.SetBool("isMoving", true);
             anim.SetBool("isIdle", false);
             _enemyState = BoggyAI_Night_State.Run;
             Debug.Log("FSM-Stop");
             //StopCoroutine (BOGGYAI_FSM ());								//stop FSM
             StopCoroutine(ChooseAction());
         }
     }
     else if (Waypoint.CompareTag("waypoint"))
     {
         if (_enemyState != BoggyAI_Night_State.Roam || (_enemyState != BoggyAI_Night_State.Investigate) || (_enemyState != BoggyAI_Night_State.Run) || (_enemyState != BoggyAI_Night_State.Stalk))
         {
             //StartCoroutine (ChooseAction ());                             // if waypoint found , when it continue roaming
         }
     }
 }