// Update is called once per frame void Update() { enemyToPlayerVector = getEnemytoPlayerVector(); enemyToPlayerDistance = getEnemyToPlayerDistance(); enemyToPlayerAngle = getAngleToPlayer(); Debug.DrawRay(transform.position + new Vector3(0, 1, 0), enemyToPlayerVector, Color.red); switch (currentState) { case State.patrolling: { switch (currentTransition) { case Transition.playerSeen: previousState = State.patrolling; currentState = State.alert; break; case Transition.seeSomething: previousState = State.patrolling; currentState = State.caution; break; default: break; } break; } //case State.alert: // { // switch(currentTransition) // { // case Transition.playerLost: // previousState = State.alert; // currentState = State.caution; // break; // default: // break; // } // break; // } case State.caution: { switch (currentTransition) { case Transition.findNothing: previousState = State.caution; currentState = State.patrolling; break; case Transition.playerSeen: previousState = State.caution; currentState = State.alert; break; default: break; } break; } } Debug.Log("Enemy State = " + currentState); Debug.Log("Enemy Transition = " + currentTransition); if (currentState == State.patrolling) { //patrolling actions start if (transform.position.x != endPos.x || transform.position.z != endPos.z) { transform.LookAt(new Vector3(endPos.x, transform.position.y, endPos.z)); moveToPoint(new Vector3(endPos.x, transform.position.y, endPos.z)); swapped = false; } else if (transform.position.x == endPos.x && transform.position.z == endPos.z && swapped == false) { Debug.Log("Turning"); swapPoints(); transform.rotation *= Quaternion.Euler(0f, 180f, 0f); Debug.Log("Turned"); } //patrolling actions end //patrolling transition start if (enemyToPlayerDistance <= 5 && enemyToPlayerAngle <= 45) { RaycastHit hit; if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), enemyToPlayerVector, out hit, 5f) && hit.transform.CompareTag("Player")) { Debug.Log("Enemy Sighted!"); currentTransition = Transition.playerSeen; Debug.Log(hit.collider.gameObject.name); } } else if ((enemyToPlayerDistance > 5 && enemyToPlayerDistance <= 10) && enemyToPlayerAngle <= 45) { RaycastHit hit; if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), enemyToPlayerVector, out hit, 10f) && hit.transform.CompareTag("Player")) { Debug.Log("SEE SOMETHING"); currentTransition = Transition.seeSomething; playerPos = playerGO.transform.position; Debug.Log(hit.collider.gameObject.name); } } //patrolling transition end } else if (currentState == State.alert) { gameOverScript.gameOver(); } else //state.caution //caution transition start { if (enemyToPlayerDistance <= 5 && enemyToPlayerAngle <= 45) { RaycastHit hit; if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), enemyToPlayerVector, out hit, 5f) && hit.transform.CompareTag("Player")) { currentTransition = Transition.playerSeen; Debug.Log(hit.collider.gameObject.name); } } if ((transform.position.x != playerPos.x || transform.position.z != transform.position.z) && !searched) { moveToPoint(new Vector3(playerPos.x, transform.position.y, playerPos.z)); Debug.Log("Moving to player"); RaycastHit hit; if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), enemyToPlayerVector, out hit, 10f) && hit.transform.CompareTag("walkthroughWall")) { returnToStartPos(); Debug.Log(hit.collider.gameObject.name); } } else { returnToStartPos(); } } if (transform.position == startPos) { readyToPatrol = true; } }