public override FireState Fire()
    {
        bool isTargVisual = CheckIfLookingAtTarget(lookCheckRange);

        if (isTargVisual)
        {
            if (Time.time > fireTimer)
            {
                Transform missileClone = Poolable.Get <UnguidedMissile>(() => Poolable.CreateObj <UnguidedMissile>(projectilePrefab.gameObject), spawnLocation.position, owner.rotation).transform;
                int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
                missileClone.gameObject.layer = layerValue;
                UnguidedMissile missile   = missileClone.GetComponent <UnguidedMissile>();
                TrailRenderer   projTrail = missileClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                missile.ActivateBoost();
                fireTimer = delayBetweenFire + Time.time;
                fireSound.Play();

                return(FireState.Fired);
            }
            else
            {
                return(FireState.OnDelay);
            }
        }
        else
        {
            return(FireState.Failed);
        }
    }
    public bool LaunchMissile()
    {
        if (Time.time > missileTimer)
        {
            Transform missileClone = Poolable.Get <UnguidedMissile>(() => Poolable.CreateObj <UnguidedMissile>(missilePrefab.gameObject), missileBay.position, owner.rotation).transform;
            int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
            missileClone.gameObject.layer = layerValue;
            missileClone.gameObject.SetActive(true);
            UnguidedMissile missile = missileClone.GetComponent <UnguidedMissile>();
            missile.ActivateBoost();
            missileTimer = missileDelay + Time.time;

            return(true);
        }

        return(false);
    }