protected virtual void InstantiateParticleEffect(FightingEntity user, FightingEntity target)
    {
        FighterPositions userPositions   = user.GetComponent <FighterPositions>();
        FighterPositions targetPositions = target.GetComponent <FighterPositions>();

        if (particleHitEffectPrefab != null && userPositions != null && targetPositions != null)
        {
            GameObject            hitEffect = Instantiate(particleHitEffectPrefab, targetPositions.damagePopup);
            ParticleSystemsHelper psh       = hitEffect.GetComponent <ParticleSystemsHelper>();
            hitEffect.GetComponent <DestroyAfterSeconds>().duration = GetAnimWindup();
            psh.SetDestroyDuration(GetAnimWindup());
            psh.SetRenderOrder(target.sortingOrder + 1);
            psh.PositionEffect(userPositions.damagePopup, targetPositions.damagePopup);
            psh.Play();
        }
    }
    private IEnumerator AnimateToTarget()
    {
        float counter = 0;

        while (counter < this.projectileMoveTime)
        {
            float t = counter / projectileMoveTime;

            Vector3 projectilePos = Vector3.Lerp(this._userTransform.position, this._targetTransform.position, t);  // May want a more refined lerp in the future
            this.transform.position = projectilePos;
            counter += GameManager.Instance.time.deltaTime;

            yield return(null);
        }

        base.Clear();
        base.Stop();
        ParticleSystemsHelper psh = Instantiate(explosionPrefab, this._targetTransform);

        // hitEffect.SetDestroyDuration(5f); // maybe let the animation handle this?
        psh.SetRenderOrder(this._orderInLayer);
        psh.PositionEffect(this._userTransform, this._targetTransform);
        psh.Play();
    }