private void Actions_Recharging()
    {
        if (mNavMeshAgent.speed != 0f)
        {
            damagingAura.SetActive(false);
            rechargingParticleEffect.SetActive(true);
            mNavMeshAgent.acceleration = 100f;
            mNavMeshAgent.speed        = 0f;
            mAnimations.Animation_Recharging();
        }


        if (durationOfRecharge >= 0f)
        {
            //transform.LookAt(new Vector3(mTargetToFollow.position.x, transform.position.y, mTargetToFollow.position.z));
            durationOfRecharge -= Time.deltaTime;
        }
        else
        {
            SetTargetToMoveTowards();
            rechargingParticleEffect.SetActive(false);
            durationOfRecharge = savedDurationOfRecharge;
            mCurrentStance     = TypeOfStances.Screaming;
        }
    }
    /// <summary>
    /// What happens during the sprinting-state.
    /// </summary>
    private void Actions_Sprinting()
    {
        if (mNavMeshAgent.speed != hedgehogVariables.combatSpeed)
        {
            durationOfSprint = 3.5f;
            if (mNavMeshAgent.acceleration != hedgehogVariables.combatAcceleration)
            {
                mNavMeshAgent.acceleration = hedgehogVariables.combatAcceleration;
            }

            if (mNavMeshAgent.speed != hedgehogVariables.combatSpeed)
            {
                mNavMeshAgent.speed = hedgehogVariables.combatSpeed;
            }
        }

        float distance = (new Vector3(sprintLocationGoal.x, transform.position.y, sprintLocationGoal.z) - new Vector3(transform.position.x, transform.position.y, transform.position.z)).magnitude;

        if (distance < 0.1f)
        {
            mCurrentStance = TypeOfStances.Recharging;
        }
        else if (durationOfSprint > 0f)
        {
            durationOfSprint -= 1 * Time.deltaTime;
        }
        else if (durationOfSprint < 0f)
        {
            mAnimations.Animation_SetSprintState(false);
            mCurrentStance = TypeOfStances.Recharging;
        }
    }
    /// <summary>
    /// What happens during the follow-state.
    /// </summary>
    private void Actions_Following()
    {
        mNavMeshAgent.SetDestination(mTargetToFollow.position);

        if (mNavMeshAgent.speed != hedgehogVariables.normalSpeed)
        {
            mNavMeshAgent.speed = hedgehogVariables.normalSpeed;
        }

        //Debugging if player ever LOS the target.
        if (!TargetInSight())
        {
            mCurrentStance = TypeOfStances.Idle;
        }
    }
 private void Actions_Searching()
 {
     if (mNavMeshAgent.destination != playerPosLastSpotted)
     {
         mNavMeshAgent.SetDestination(playerPosLastSpotted);
     }
     if (mNavMeshAgent.remainingDistance < 0.5f)
     {
         if (TargetInSight())
         {
             mCurrentStance = TypeOfStances.Following;
         }
         else
         {
             mCurrentStance = TypeOfStances.Idle;
         }
     }
 }
    /// <summary>
    /// What happens during the screaming state.
    /// </summary>
    private void Actions_Screaming()
    {
        transform.LookAt(new Vector3(mTargetToFollow.position.x, transform.position.y, mTargetToFollow.position.z));
        if (!screamStarted && TargetInSight())
        {
            mAnimations.Animation_StartScream();
            mNavMeshAgent.SetDestination(transform.position);
            mNavMeshAgent.acceleration = 100f;
            mNavMeshAgent.speed        = 0f;
            screamStarted = true;
        }

        if (durationOfScream >= 0f)
        {
            durationOfScream -= Time.deltaTime;
            SaveLatestPositionPlayerSpotted(mTargetToFollow.position);
        }
        else
        {
            if (TargetInSight())
            {
                mAnimations.Animation_SetSprintState(true);
                screamStarted = false;
                damagingAura.SetActive(true);
                durationOfScream = savedDurationOfScream;
                SetTargetToMoveTowards(); //Setting target
                mCurrentStance = TypeOfStances.Sprinting;
            }

            else
            {
                mAnimations.Animation_SetSprintState(true);
                screamStarted = false;
                damagingAura.SetActive(true);
                durationOfScream = savedDurationOfScream;
                mNavMeshAgent.SetDestination(playerPosLastSpotted);
                mCurrentStance = TypeOfStances.Sprinting;
            }
        }
    }
    private void CheckRangeOfTarget()
    {
        if (!isDying)
        {
            float distanceToTarget = (mTargetToFollow.position - transform.position).magnitude;

            if (distanceToTarget < hedgehogVariables.detectionRange && mCurrentStance == TypeOfStances.Idle)
            {
                if (TargetInSight())
                {
                    mCurrentStance = TypeOfStances.Following;
                }
            }
            else if (distanceToTarget < hedgehogVariables.combatRange && mCurrentStance == TypeOfStances.Following)
            {
                if (TargetInSight())
                {
                    mCurrentStance = TypeOfStances.Screaming;
                }
                else
                {
                    mCurrentStance = TypeOfStances.Idle;
                    mNavMeshAgent.SetDestination(playerPosLastSpotted);
                }
            }
            else if ((sprintLocationGoal - transform.position).magnitude < 3f && mCurrentStance == TypeOfStances.Sprinting)
            {
                mCurrentStance = TypeOfStances.Recharging;
            }

            if (mCurrentStance == TypeOfStances.Following && TargetInSight())
            {
                SaveLatestPositionPlayerSpotted(mTargetToFollow.position);
            }
        }
    }
 public void AnimationEvent_SetStateBackToIdle()
 {
     mCurrentStance      = TypeOfStances.Idle;
     gotScared           = false;
     mNavMeshAgent.speed = hedgehogVariables.normalSpeed;
 }
 public void SetCurrentStance(TypeOfStances newStance)
 {
     mCurrentStance = newStance;
 }