private void FollowOrigin(SpecialEffectData effect)
        {
            if (effect.Origin == null)
            {
                return;
            }

            var pos = effect.Origin.transform.position + effect.Offset;

            effect.EffectContainer.transform.position = pos;
        }
        private bool IsFinished(SpecialEffectData effect)
        {
            if (effect.DiesWithOrigin && effect.Origin == null)
            {
                return(true);
            }
            if (effect.Duration <= 0)
            {
                return(false);
            }

            effect.TimeActive += Time.deltaTime;
            return(effect.TimeActive > effect.Duration);
        }
        private GameObject InstantiateEffect(SpecialEffectData effectData)
        {
            var effectPrefab     = LoadEffect(effectData.EffectPrefabName);
            var effectGameObject = Instantiate(effectPrefab);
            var effectContainer  = new GameObject();

            effectContainer.transform.parent   = transform;
            effectContainer.transform.position = effectData.Origin.transform.position + effectData.Offset;
            effectContainer.name       = effectData.EffectPrefabName + "Container";
            effectData.EffectContainer = effectContainer;

            effectGameObject.transform.SetParent(effectContainer.transform);
            effectGameObject.transform.localPosition = Vector3.zero;

            _runningSpecialEffects.Add(effectData);

            return(effectGameObject);
        }