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 } } }