void Shooting()
    {
        Vector3    shootDir = currentTarget.transform.position - transform.position;
        RaycastHit hit;

        if (Physics.Raycast(transform.position, shootDir, out hit))
        {
            if (hit.collider.GetComponent <SoldierStateScript>().currentSoldierState != SoldierAIState.Dead)
            {
                if (BoltisCycling == false && isReloading == false && currentAmmo >= 0)
                {
                    currentAmmo--;
                    var rbComp      = hit.collider.GetComponent <Rigidbody>();
                    var impactForce = (currentTarget.transform.position - transform.position).normalized;
                    if (rbComp)
                    {
                        rbComp.AddForceAtPosition(impactForce * 2, hit.point, ForceMode.Impulse);
                    }
                    currentTarget.GetComponent <SoldierStateScript>().currentSoldierState = SoldierAIState.Dead;

                    if (currentAmmo <= 0)
                    {
                        currentSoldierState = SoldierAIState.Reloading;
                    }

                    StartCoroutine(CyclingTheBolt());
                }
            }
        }
    }
    IEnumerator CyclingTheBolt()
    {
        if (isReloading == false)
        {
            BoltisCycling = true;
            yield return(new WaitForSeconds(2));

            BoltisCycling       = false;
            currentSoldierState = SoldierAIState.Searching;
        }
    }
    void Searching()
    {
        Collider[] hits = Physics.OverlapSphere(this.transform.position, visionRadius, ((1 << 8) | (1 << 9)));
        foreach (Collider hitCol in hits)
        {
            if (hitCol.gameObject.layer != this.gameObject.layer)
            {
                if (hitCol.gameObject.GetComponent <SoldierStateScript>().currentSoldierState != SoldierAIState.Dead)
                {
                    currentTarget = hitCol.gameObject;
                }
            }
        }

        if (currentTarget != null)
        {
            currentSoldierState = SoldierAIState.Engaging;
        }
    }
    void Aiming()
    {
        Vector3 aimDir = (currentTarget.gameObject.transform.position - transform.position).normalized;

        aimDir.y = 0;
        Quaternion rotation = Quaternion.LookRotation(aimDir);

        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * aimSpeed);
        if ((transform.rotation.eulerAngles - rotation.eulerAngles).magnitude < 0.1f)
        {
            currentSoldierState = SoldierAIState.Shooting;
        }

        if (currentTarget.GetComponent <SoldierStateScript>().currentSoldierState == SoldierAIState.Dead)
        {
            currentTarget       = null;
            currentSoldierState = SoldierAIState.Searching;
        }
    }
    void Engaging()
    {
        if (currentTarget != null)
        {
            nmagent.stoppingDistance = 40;
        }

        nmagent.SetDestination(currentTarget.transform.position);

        if (nmagent.velocity.magnitude == 0 && nmagent.remainingDistance < 40f && nmagent.hasPath == true)
        {
            currentSoldierState = SoldierAIState.Aiming;
        }

        Debug.Log(nmagent.remainingDistance);
        Debug.Log(nmagent.velocity);

        if (currentTarget.GetComponent <SoldierStateScript>().currentSoldierState == SoldierAIState.Dead)
        {
            currentTarget       = null;
            currentSoldierState = SoldierAIState.Searching;
        }
    }
 void Dead()
 {
     currentSoldierState = SoldierAIState.Dead;
     //enable ragdoll
 }