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