Files
CourierOld/Game/CourierOld/Assets/Code/UI/UIFactory.cs
T

35 lines
1.2 KiB
C#

using Code.Configs;
using Cysharp.Threading.Tasks;
using Reflex.Attributes;
using UnityEngine;
using UnityEngine.AddressableAssets;
using Object = UnityEngine.Object;
namespace Code.UI
{
public class UIFactory : IUIFactory
{
private AssetReference _canvasAssetReference;
private AssetReference[] _uiPanelsAssetReferences;
public UIFactory(UIConfig uiConfig)
{
_canvasAssetReference = uiConfig.canvasAssetReference;
_uiPanelsAssetReferences = uiConfig.uiPanelsAssetReferences;
}
public async UniTask<Canvas> CreateCanvas()
{
// Canvas canvasPrefab = await Addressables.LoadAssetAsync<Canvas>(_canvasAssetReference);
Canvas canvas = (await Addressables.InstantiateAsync(_canvasAssetReference).ToUniTask()).GetComponent<Canvas>();
Object.DontDestroyOnLoad(canvas);
return canvas;
}
public async UniTask<UIElement> CreatePanel(Canvas canvas, UIPanel uiPanel)
{
return (await Addressables.InstantiateAsync(_uiPanelsAssetReferences[(int)uiPanel], canvas.transform).ToUniTask()).GetComponent<UIElement>();
}
}
}