void Start()
    {
        visibilityChecker = GetComponent <CameraVisibilityChecker>();

        if (StartAtCurrentWaypoint)
        {
            transform.position = PathToFollow.path_objs [CurrentWayPointID].position;
            transform.rotation = Quaternion.LookRotation(PathToFollow.path_objs [CurrentWayPointID + 1].position - transform.position);
        }

        animator.speed = animationSpeed;

        if (GetComponent <Activate_with_Tree> ().activate == false)
        {
            state         = ShadeWaitState.Dormant;
            StopAnimation = true;
            audio.PlayAudio(false);
        }

        activate_with_Tree = GetComponent <Activate_with_Tree>();
        detectShade        = GetComponentInChildren <DetectShade>();
    }
    // Update is called once per frame
    void Update()
    {
        bool inshade = detectShade.inshade;

        float distance = Vector3.Distance(PathToFollow.path_objs[CurrentWayPointID].position, transform.position);

        switch (state)
        {
        case ShadeWaitState.Moving:
            StopAnimation      = false;
            transform.position = Vector3.MoveTowards(transform.position, PathToFollow.path_objs[CurrentWayPointID].position, Time.deltaTime * currentspeed);
            var rotation = Quaternion.LookRotation(PathToFollow.path_objs[CurrentWayPointID].position - transform.position);
            transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * rotationSpeed);

            CheckForNextTargetOnPath(distance);
            audio.PlayAudio(CurrentWayPointID != 0 && visibilityChecker.isVisibleToMainCamera);


            if (inshade)
            {
                StopAnimation = true;
                audio.PlayAudio(false);
                state = ShadeWaitState.WaitingToLoseShade;
            }
            break;

        case ShadeWaitState.WaitingToLoseShade:
            if (!inshade)
            {
                timeToStartMovingAgain = Time.time + wait;
                state = ShadeWaitState.LostShade;
            }

            break;

        case ShadeWaitState.Dormant:

            if (activate_with_Tree.activate)
            {
                state = ShadeWaitState.Moving;
            }
            break;

        case ShadeWaitState.LostShade:
            if (Time.time > timeToStartMovingAgain)
            {
                if (inshade)
                {
                    state = ShadeWaitState.WaitingToLoseShade;
                }
                else
                {
                    state = ShadeWaitState.Moving;
                }
            }
            break;

        default:
            break;
        }
    }