Code/k/Ui.cs
using System.Collections.Generic;
using Sandbox.k.Animations;
using Sandbox.k.Configs;
using Sandbox.k.Enums;
using Sandbox.k.Implementations;
using Sandbox.k.Interfaces;
using Sandbox.k.Models;
using Sandbox.k.Views;
namespace Sandbox.k {
public class Ui {
public static Ui Instance => _instance ??= new Ui();
private static Ui _instance;
private IViewManager _viewManager;
public void Initialize(UiConfig uiConfig, IViewFactory viewFactory) {
if (uiConfig == null) {
Log.Error($"{nameof(uiConfig)} is null");
return;
}
if (viewFactory == null) {
Log.Error($"{nameof(IViewFactory)} is null");
return;
}
if (uiConfig.ViewBases == null) {
Log.Error( "ViewBases is null" );
return;
}
var viewBases = new List<ViewBase>();
foreach ( var yeah in uiConfig.ViewBases )
{
viewBases.Add( yeah.GetComponent<ViewBase>() );
}
var canvasGo = new GameObject(null, name: "[UI] Canvas") { Flags = GameObjectFlags.DontDestroyOnLoad };
_viewManager = new ViewManager(canvasGo, viewFactory, viewBases);
_instance = this;
}
public static T Open<T>(
ViewModelBase model = null,
ViewLoadingMode loadingMode = ViewLoadingMode.Additive,
ScriptableAnimationBase animation = null
) where T : ViewBase {
if (loadingMode == ViewLoadingMode.Single) CloseAllViews();
var name = typeof(T).Name;
return Instance._viewManager.SetActiveView<T>(name, true, model, animation);
}
public static void Close<T>() where T : ViewBase {
var name = typeof(T).Name;
Instance._viewManager.SetActiveView(name, false);
}
public static T SetActive<T>(
bool isActive,
ViewModelBase model = null,
IViewAnimation animation = null
) where T : ViewBase {
var name = typeof(T).Name;
return Instance._viewManager.SetActiveView<T>(name, isActive, model, animation);
}
public static void SetActive(string viewName, bool isActive, ViewModelBase model = null) {
Instance._viewManager.SetActiveView(viewName, isActive, model);
}
public static bool TryGet<T>(out T view) where T : ViewBase {
var name = typeof(T).Name;
return Instance._viewManager.TryGetView(name, out view);
}
public static bool IsActive<T>() where T : ViewBase {
var viewName = typeof(T).Name;
return IsActive(viewName);
}
public static bool IsActive(string viewName) {
return Instance._viewManager.IsActive(viewName);
}
private static void CloseAllViews() {
Instance._viewManager.CloseAllViews();
}
}
}