public void Fire()
    {
        //print("Fired");
        //shotTrail.Play();

        muzzleFlash.Play();



        RaycastHit hit;
        Ray        ray = new Ray(shootPoint.transform.position, shootPoint.transform.forward);

        // Cast a ray that ignores triggers so we don't hit player trigger objects
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask, QueryTriggerInteraction.Ignore))
        {
            //if (!hit.collider.CompareTag("Enemy"))


            var hitPoint = hit.point;

            if (hit.collider.CompareTag("Destructible"))
            {
                Destructible destructible = hit.transform.GetComponent <Destructible>();
                if (destructible != null)
                {
                    destructible.DestroyIntoPieces();
                }

                //AddExplosionForce(hit.point, explosionRadius, explosionForce);
            }
            else if (hit.collider.CompareTag("Enemy"))
            {
                //print("Enemy Hit: " + hit.collider.gameObject.name);

                //var hitDir = shootPoint.transform.position - hit.point;
                var hitDir = shootPoint.transform.forward;

                var parentObj = hit.collider.transform.parent;

                while (parentObj.GetComponent <Enemy>() == null)
                {
                    parentObj = parentObj.transform.parent;
                    //print("Going through while loop. Current Parent:" + parentObj.name);
                }

                //print("Enemy Hit: " + parentObj.name);


                Enemy enemy = parentObj.GetComponent <Enemy>();
                enemy.EnemyTakeHit(_damage, hitDir, hit.collider.gameObject);
                //print("Enemy hit part: " + hit.collider.gameObject.name);

                //AddExplosionForce(hit.point, explosionRadius, explosionForce);



                //Collider[] colliders = Physics.OverlapSphere(hitPoint, 5f);
                //foreach (var col in colliders)
                //{
                //    print(col.gameObject.name);
                //}
                //print(colliders[0].gameObject.name);

                //if (colliders[0].transform.root.GetComponent<Enemy>() != null)
                //{
                //    colliders[0].transform.root.GetComponent<Enemy>().EnemyTakeHit(_damage);
                //    print("Shot enemy - damage:" + _damage);
                //}

                //Enemy enemy = hit.transform.root.GetComponent<Enemy>();
                //enemy.EnemyTakeHit(_damage);
            }
            else if (hit.collider.CompareTag("Rigidbody"))
            {
                AddExplosionForce(hit.point, _explosionRadius, _explosionForce, _explosionForceUp);
            }
            else
            {
                AddExplosionForce(hit.point, _explosionRadius, _explosionForce, _explosionForceUp);
                SpawnDecal(hit);
            }



            //_audioSource[0].PlayOneShot(clips[0]);
            //_audioSource[1].PlayOneShot(clips[1]);

            PlaySound.PlayAudio(_audioSource[0], true, -.15f, .15f);
            PlaySound.PlayAudio(_audioSource[1], false, 0, 0);
            clickSoundPlayed = false;

            HapticFeedback.HapticAmount(1000, true, false);

            //globalLowPass.GunShotLowPass(3000);

            //Debug.Log(hit.transform.name);

            gunBody.transform.localRotation = Quaternion.Euler(gunBody.transform.localRotation.x, gunBody.transform.localRotation.y, gunBody.transform.localRotation.z + recoilZAngle);
        }
    }