Scriptum/Assets/Scripts/REFACTORING/Application/UI/Skills/SkillsUIManager.cs
2022-12-25 03:39:31 +01:00

122 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
class SkillsUIManager : MonoBehaviour
{
public const string ITEM_LOCALIZATION = "UiPanels/";
public const string PANEL_NAME = "SkillsPanel";
public static SkillsUIManager Instance { get; protected set; }
[SerializeField] public GameObject DynamicPanel;
[SerializeField] public KeyCode keyToOpen;
public virtual void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
Debug.Log(gameObject);
Debug.Log(Instance);
Destroy(gameObject);
}
}
public void Update()
{
if (Input.GetKeyDown(keyToOpen))
{
if (!DynamicPanel)
{
this.OpenPanel();
}
else
{
this.ClosePanel();
}
}
}
/// <summary>
/// Function to fetch currently opened panel asociated with this UI manager
/// </summary>
/// <param name="panelConrtoller"></param>
public void SetPanelController(GameObject panelConrtoller)
{
// ToDo change fetched types
//DynamicPanel = dynamicPanelController;
}
public virtual bool OpenPanel()
{
Console.WriteLine("Panel opened");
GameObject globalGUI = GameObject.FindGameObjectWithTag("GUI");
if (!globalGUI)
throw new Exception("Panel could not be opened - can't find global GUI object!!");
GameObject uiPanelTemplate = GetTemplatePanel();
DynamicPanel = GameObject.Instantiate(uiPanelTemplate, uiPanelTemplate.transform.position, Quaternion.identity, globalGUI.transform); // 4'th arg allow set object as child
DynamicPanel.transform.localPosition = uiPanelTemplate.transform.position; // prevent overwritten position by... environment???
DynamicPanel.name = uiPanelTemplate.name;
SetupPanel();
return true;
}
public virtual bool ClosePanel()
{
Console.WriteLine("Panel closed");
try
{
Destroy(DynamicPanel);
return true;
}
catch (Exception ex) { Debug.LogError(ex.Message); }
return true;
}
public virtual void SetupPanel()
{
if (!DynamicPanel)
throw new Exception("Panel not found - UIBaseManager don't have UI Panel instance!!");
// bind this class instance
//DynamicPanel.GetComponent<TaskPanelController>().Bind(this);
}
/// <summary>
/// Function which return panel status
/// True - if panel is opened and it's instance is handled
/// false - if panel is closed and it's instance is not handled
/// </summary>
/// <returns></returns>
public bool GetPanelStatus()
{
return DynamicPanel != null;
}
protected GameObject GetTemplatePanel()
{
// Resources = default path - Asset/Resources ... .obj
return Resources.Load(ITEM_LOCALIZATION + PANEL_NAME) as GameObject;
}
}