using NEG.UI.Area; using NEG.UI.Popup; using NEG.UI.UnityUi.Buttons.Reaction; using NEG.UI.UnityUi.Buttons.Settings; using NEG.UI.UnityUi.Popup; using NEG.Utils; using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.SceneManagement; using Object = UnityEngine.Object; namespace NEG.UI.UnityUi { /// /// Implements ui using UnityUI and Unity Event System with New Input System. /// You have to provide prefabs within resources: /// - UI/PopupCanvas - prefab with canvas to create popups (will be created on every scene) /// - UI/DefaultPopupPrefab - prefab of default popup with 2 options (has to have component) /// public class MonoUiManager : UiManager { //TODO: use default unity selection //TODO: window snaping to slots public static new MonoUiManager Instance { get; private set; } public KeyBasedFactory BehavioursFactory { get; private set; } private readonly MonoDefaultPopup defaultPopupPrefab; private readonly GameObject canvasPrefab; private UiInputModule inputModule; public MonoUiManager(IArea startArea, Type inputModuleType) : base(startArea) { Instance = this; var popupCanvas = Resources.Load("UI/PopupCanvas"); var defaultPopup = Resources.Load("UI/DefaultPopupPrefab"); //Addressables.LoadAssetsAsync(new List() { "NEG/UI/PopupCanvas", "NEG/UI/DefaultPopupPrefab" }, (_) => { }, Addressables.MergeMode.Union).WaitForCompletion(); Assert.IsNotNull(popupCanvas,"No canvas prefab was provided. Please check MonoUiManager class documentation"); Assert.IsNotNull(defaultPopup,"No popup prefab was provided. Please check MonoUiManager class documentation"); Assert.IsNotNull(popupCanvas.GetComponent()); Assert.IsNotNull(defaultPopup.GetComponent()); canvasPrefab = popupCanvas; defaultPopupPrefab = defaultPopup.GetComponent(); SpawnDefaultPopup(); SceneManager.activeSceneChanged += (_, _) => SpawnDefaultPopup(); BehavioursFactory = new KeyBasedFactory(); BehavioursFactory.FireRegistration(); inputModule = (UiInputModule)Activator.CreateInstance(inputModuleType); } private void SpawnDefaultPopup() { var canvas = Object.Instantiate(canvasPrefab); canvas.name = "DefaultPopupCanvas"; SetDefaultPopup(Object.Instantiate(defaultPopupPrefab, canvas.transform)); currentDefaultPopup.Close(true); } } }