public void FireTorpedo(Transform target)
    {
        if (Time.time >= torpedoTimer)
        {
            Transform     torpClone = Poolable.Get <GuidedTorpedo>(() => Poolable.CreateObj <GuidedTorpedo>(torpedoPrefab.gameObject), torpedoBay.position, Quaternion.identity).transform;
            GuidedTorpedo torp      = torpClone.GetComponent <GuidedTorpedo>();
            torp.target       = target;
            torp.whatIsTarget = whatIsTarget;
            int layerValue = whatAreOurProjectiles.layermask_to_layer();
            torpClone.gameObject.layer = layerValue;

            torpClone.up = owner.up;

            torpedoTimer = torpedoDelay + Time.time;
        }
    }
    //[Header("WeaponProperties")]

    public override FireState Fire()
    {
        Transform isInView = isEnemySubInView();

        if (isInView)
        {
            target = isInView;
        }

        if (target)
        {
            if (!target.gameObject.activeInHierarchy)
            {
                target = null;
            }
        }

        if (Time.time >= fireTimer)
        {
            Transform     torpClone  = Poolable.Get <GuidedTorpedo>(() => Poolable.CreateObj <GuidedTorpedo>(projectilePrefab.gameObject), spawnLocation.position, Quaternion.identity).transform;
            int           layerValue = whatAreOurProjectiles.layermask_to_layer();
            TrailRenderer projTrail  = torpClone.GetComponent <TrailRenderer>();
            projTrail.material         = layerValue == 8 ? t1Mat : t2Mat;
            torpClone.gameObject.layer = layerValue;
            projTrail.Clear();
            GuidedTorpedo torp = torpClone.GetComponent <GuidedTorpedo>();
            torp.target                = target;
            torp.whatIsTarget          = whatIsTarget;
            torpClone.gameObject.layer = layerValue;
            torpClone.GetComponent <Rigidbody2D>().velocity = owner.up * torp.Speed / 2f * Time.deltaTime;

            torpClone.up = owner.up;

            fireTimer = delayBetweenFire + Time.time + Random.Range(-delayBetweenFire / 5f, delayBetweenFire / 3.4f);
            fireSound.Play();

            return(FireState.Fired);
        }
        else
        {
            return(FireState.OnDelay);
        }
    }