public override ActionState update(AbstractAI ai, float delta)
        {
            ActionState state = this;

            if (_timer > 0f) //... SEARCH ...//
            {
                /*
                 * Check if player is seen -> currentActionState == WALK
                 * Check if Entity got hitted -> currentActionState = SEARCH, spottedPlayer = 3
                 * Check if playerSpotted == 0 -> currentActionState == IDLE
                 * Check if playerSpotted > 0 -> currentActionState == WALK
                 */
                _timer -= delta; //... lookAroundTimer -> wie lang herumdrehen, lookAround, soll sich herum drehen
                ai.navMeshAgent.isStopped = true;
                //enemy.walkingTimer = _lifetime;//patience;//Transition!
                ai.IsLooking();
            }
            else
            {
                if (ai.hasAlzheimer && ai.currentSenseState != AbstractAI.SenseStates.neverSeenPlayer &&
                    ai.alzheimerTimer < 0f)
                {
                    state = new Idle(20f); //Forgetful I guess
                }
                else
                {
                    ai.IsRoaming();
                    //enemy.walkingTimer = _lifetime;//patience;//Transition!
                    state = new Walk(20f);
                    ai.currentSenseState = (ai.currentSenseState == AbstractAI.SenseStates.neverSeenPlayer)
                        ? AbstractAI.SenseStates.neverSeenPlayer
                        : AbstractAI.SenseStates.alarmed;
                }
            }

            return(state);
        }
        private void FixedUpdate()
        {
            //Debug.Log(currHP);
            //==============================================================================================================
            if (!(_state is Dead))
            {
                ActionState newState = NotDead();
                _state = (newState != null) ? newState : _state;
                if (currentSenseState != SenseStates.neverSeenPlayer)
                {
                    if (hasAlzheimer)
                    {
                        if (alzheimerTimer >= 0)
                        {
                            alzheimerTimer -= Time.deltaTime;
                        }
                        else
                        {
                            alzheimerTimer    = patience;
                            currentSenseState = SenseStates.neverSeenPlayer;
                            _state            = new Idle(20f);
                        }
                    }
                }


                var     playerPosition = Player.transform.position;
                Vector3 vectorToPlayer = eyes.transform.position - playerPosition;

                float distanceFromPlayer = vectorToPlayer.magnitude;
                float angel = Vector3.Angle(-transform.forward, vectorToPlayer);

                //Debug.Log("distanceFromPlayer: " +distanceFromPlayer);
                if (distanceFromPlayer > 35)
                {
                    SwitchEnemyColliderState(false); //Improve performance
                }
                else
                {
                    SwitchEnemyColliderState(true);
                    if (
                        distanceFromPlayer <= 1.95 &&
                        !Physics.Linecast(eyes.position, Player.transform.position, searchMask) ||
                        (distanceFromPlayer <= sightDistance &&
                         angel <= sightAngle &&
                         !Physics.Linecast(eyes.position, Player.transform.position, searchMask))
                        )
                    {
                        if (Mathf.Abs(eyes.position.y - playerPosition.y) < 3f) //Vertical distance is narrowed.
                        {
                            //...only when player is on the same level attacking makes sense!
                            _lastSeenPlayerPosition = Player.transform.position;
                            if (!(_state is Attack))
                            {
                                _state            = new Chase(patience);
                                currentSenseState = SenseStates.playerSpotted;
                            }
                        }
                    }
                }
            }

            _state = _state.update(this, Time.deltaTime);
            _DrawPath();
        }