public ExplosionController(LevelComponent level, ExplosionEffectComponent prefab)
        {
            _level   = level;
            _factory = new PoolFactory <ExplosionEffectComponent>(() => GameObject.Instantiate(prefab));
            var instances = ListPool <ExplosionEffectComponent> .Pop();

            for (int i = 0; i < 5; i++)
            {
                instances.Add(_factory.Pop());
            }
            foreach (var instance in instances)
            {
                _level.ToPool(instance.transform);
                _factory.Push(instance);
            }
            ListPool.Push(instances);
        }
        public void Explosion(Vector3 position)
        {
            var def = Lifetime.Define(_level.Lifetime);
            var exp = _factory.Pop();

            exp.transform.SetParent(_level.EffectTransform, false);
            exp.transform.position = position;
            GameContext.DelayCall(def.Lifetime, 1.5f, exp.FireOnComplete);
            exp.Play();
            def.Lifetime.AddAction(() =>
            {
                _factory.Push(exp);
                _level.ToPool(exp.transform);
            });
            exp.SubscribeOnComplete(def.Lifetime, () =>
            {
                def.Terminate();
            });
        }