public virtual void FireSpreadBullet()
        {
            float angleSizePerShot = rangedData.spreadMaxRange / rangedData.spreadAmount;

            for (int i = 0; i < rangedData.spreadAmount; i++)
            {
                GameObject             bulletToFire    = PoolingManager.singleton.bulletPooler.GetPoolableObject();
                Weapon_FiredProjectile bulletComponent = bulletToFire.GetComponent <Weapon_FiredProjectile>();
                Vector3 rotationVal;
                if (isPlayerWeapon)
                {
                    bulletToFire.transform.position = playerWeaponController.bulletShootPoint.position;
                    rotationVal = playerWeaponController.bulletShootPoint.rotation.eulerAngles;
                    bulletComponent.Init(rangedData.bulletMovementSpeed, rangedData.sharedWeaponData.layersPlayerCanHitWithWeapon.value, rangedData.attackDamage, weaponItemData);

                    //Create GunShot  Notification
                    CreateGunShotNotification();
                }
                else
                {
                    bulletToFire.transform.position = aiInventoryController.bulletShootPoint.position;
                    rotationVal = aiInventoryController.bulletShootPoint.rotation.eulerAngles;

                    bulletComponent.Init(rangedData.bulletMovementSpeed - rangedData.aiData.bulletSpeedModifier, rangedData.sharedWeaponData.layersEnemiesCanHitWithWeapon.value, rangedData.attackDamage, weaponItemData);
                }
                Weapon_BulletManager.singleton.bulletsToTick.Add(bulletComponent);

                float curAngle = (rotationVal.y - rangedData.spreadMaxRange / 2 + angleSizePerShot * i);
                bulletToFire.transform.rotation = Quaternion.Euler(bulletToFire.transform.rotation.x, curAngle, bulletToFire.transform.rotation.z);
            }
        }
        public virtual void FireSingleBullet()
        {
            GameObject             bulletToFire    = PoolingManager.singleton.bulletPooler.GetPoolableObject();
            Weapon_FiredProjectile bulletComponent = bulletToFire.GetComponent <Weapon_FiredProjectile>();

            if (isPlayerWeapon)
            {
                bulletToFire.transform.position = playerWeaponController.bulletShootPoint.position;
                bulletToFire.transform.rotation = playerWeaponController.bulletShootPoint.rotation;
                bulletComponent.Init(rangedData.bulletMovementSpeed, rangedData.sharedWeaponData.layersPlayerCanHitWithWeapon.value, rangedData.attackDamage, weaponItemData);

                //Create GunShot  Notification
                CreateGunShotNotification();
            }
            else
            {
                bulletToFire.transform.position = aiInventoryController.bulletShootPoint.position;
                bulletToFire.transform.rotation = aiInventoryController.bulletShootPoint.rotation;

                bulletComponent.Init(rangedData.bulletMovementSpeed - rangedData.aiData.bulletSpeedModifier, rangedData.sharedWeaponData.layersEnemiesCanHitWithWeapon.value, rangedData.attackDamage, weaponItemData);
            }

            Weapon_BulletManager.singleton.bulletsToTick.Add(bulletComponent);
        }