using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using Zenject; using Hash128 = Unity.Entities.Hash128; namespace DefaultNamespace { public class ParticleSystemFactory : IFactory> { private readonly Dictionary> loadingSystems = new Dictionary>(); private readonly Dictionary particleSystems = new Dictionary(); public AsyncOperationWrapper Create(Hash128 param) { if (particleSystems.TryGetValue(param, out var system)) { return new AsyncOperationWrapper(system.gameObject); } if (loadingSystems.TryGetValue(param, out var systemLoading)) { return systemLoading; } systemLoading = new AsyncOperationWrapper(Addressables.InstantiateAsync(param.ToString())); systemLoading.Completed += operation => { loadingSystems.Remove(param); particleSystems.Add(param, operation.Result.GetComponent()); }; loadingSystems.Add(param, systemLoading); return systemLoading; } } }