Addressables in process

This commit is contained in:
ThomasCharester committed 2025-11-02 23:29:29 +03:00
1 parent 1ad87e7432
commit 6b1f24b72e
13 files changed
+122 -77

No files matched your search

+3 -2
View File
@@ -1,10 +1,11 @@
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Code.UI
{
public interface IUIFactory
{
Canvas CreateCanvas();
UIElement CreatePanel(Canvas canvas, UIPanel uiPanel);
UniTask<Canvas> CreateCanvas();
UniTask<UIElement> CreatePanel(Canvas canvas, UIPanel uiPanel);
}
}
+3 -3
View File
@@ -1,10 +1,10 @@
using System;
namespace Code.UI
{
public interface IUIService
{
void EnablePanel();
void DisablePanel();
void SwitchPanelTo(UIPanel uiPanel);
void SwitchPanelTo(UIPanel uiPanel, Action callback = null);
UIElement CurrentPanel { get; }
LoadingPanel LoadingScreen { get; }
}
+17 -6
View File
@@ -1,24 +1,35 @@
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
{
[Inject] private UIElement[] _uiPanelsPrefabs;
[Inject] private Canvas _canvasPrefab;
private AssetReference _canvasAssetReference;
private AssetReference[] _uiPanelsAssetReferences;
public Canvas CreateCanvas()
public UIFactory(UIConfig uiConfig)
{
Canvas canvas = Object.Instantiate(_canvasPrefab);
_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 UIElement CreatePanel(Canvas canvas, UIPanel uiPanel)
public async UniTask<UIElement> CreatePanel(Canvas canvas, UIPanel uiPanel)
{
return Object.Instantiate(_uiPanelsPrefabs[(int)uiPanel], canvas.transform);
return (await Addressables.InstantiateAsync(_uiPanelsAssetReferences[(int)uiPanel], canvas.transform).ToUniTask()).GetComponent<UIElement>();
}
}
}
+16 -7
View File
@@ -1,4 +1,7 @@
using System;
using Cysharp.Threading.Tasks;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Code.UI
{
@@ -13,19 +16,25 @@ namespace Code.UI
public UIService(IUIFactory factory)
{
_factory = factory;
_canvas = _factory.CreateCanvas();
Initialize();
}
private async void Initialize()
{
_canvas = await _factory.CreateCanvas();
LoadingScreen = (LoadingPanel) _factory.CreatePanel(_canvas,UIPanel.Loading);
LoadingScreen = (LoadingPanel) await _factory.CreatePanel(_canvas,UIPanel.Loading);
}
public void EnablePanel() => CurrentPanel.gameObject.SetActive(true);
public void DisablePanel() => CurrentPanel.gameObject.SetActive(false);
public void SwitchPanelTo(UIPanel uiPanel)
public async void SwitchPanelTo(UIPanel uiPanel, Action callback = null)
{
if (!_canvas) await UniTask.WaitUntilValueChanged(_canvas, _ => !_canvas);
if(CurrentPanel) Object.Destroy(CurrentPanel.gameObject);
CurrentPanel = _factory.CreatePanel(_canvas, uiPanel);
CurrentPanel = await _factory.CreatePanel(_canvas, uiPanel);
callback?.Invoke();
}
}
}