How to change enemy's Direction on FiniteStateMachine???

Hello coders… just a quick question to make:
I have a small terrain with a character that is moving on it(user input- keyboard&mouse), and i also have a enemy object that has a Finite state machine.
However, I think the State Machine is working fine from IDLE to PATROL and back.

    public enum State { IDLE, PATROL, CHASE} //ALL STATES IN ENUM
    public State myState; //ONE STATE
    private bool alive; 

    public GameObject[] wayPoints;  
    private int wayPointIndex = 0; //Store the current index of waypoints

    void Start()
        StartCoroutine("FiniteStateMachine"); //Call State Machine

    IEnumerator FiniteStateMachine()
        //While the tiger is alive do switch statement for the State Machine
        while (alive)
            switch (myState)
                case State.IDLE:
                    Idle(); //Tiger Is not Moving
                case State.PATROL:
                    Patrol(); //Tiger Is Moving from Waypoint to Waypoint
                case State.CHASE:
                    Chase(); //Tiger Is Chasing the Character
            yield return null;
        } //End of While Loop

How should i change the Enemy’s direction when the States are changing since it has a different direction for wayPoints and different direction for the target using Vector 3 for both cases.

 private Vector3 wayPointDirection; //Use for the Way Points (PATROL State)
 private Vector3 targetDirection; //Use for the target (CHASE State)

If you have a question ill be happy to answer asap. and i will really appreciate it if you guys will help me out fix this issue. :))

I’m not sure how your tiger’s movement is setup but if you have something like a current direction variable you can just set currentDir = wayPointDir every frame in the Patrol() function and currentDir = targetDirection every frame in the Chase() function. Then use that variable in your movement code.

If you want to smoothly change direction and not have it snap instantly upon state switch you could use something like this

// patrol example
currentDir = Vector3.Lerp(currentDir, wayPointDir, Time.deltaTime * 2.0f);