using System.Collections.Generic; using UnityEngine; public class UIManager : IManager { private Canvas _canvas; private List _uiList = new (); public List UIList { get { return _uiList; } set { _uiList = value ?? new List(); foreach (var ui in _uiList) { string path = Define.MapPath(ui); CreateObject(path); } } } private readonly Dictionary _objects = new (); private readonly Dictionary _instances = new(); private readonly Dictionary _switchObjects = new (); public void Init() { _canvas = GameObject.Find("@Canvas").GetComponent(); } private void CreateObject(string path) { GameObject createObj = Manager.Resource.Load(path); if (createObj != null) { _objects.Add(createObj.name, createObj); _switchObjects.Add(createObj.name, false); } } public void SwitchOnObject(string name, bool isOn) { if (_switchObjects.ContainsKey(name) && (_switchObjects[name] != isOn)) _switchObjects[name] = isOn; else return; if (!_instances.ContainsKey(name)) { GameObject obj = Manager.Resource.Instantiate(_objects[name], _canvas.transform); _instances.Add(name, obj); } if (_switchObjects.ContainsKey(name) && _switchObjects[name]) { _objects[name].SetActive(true); } else { _objects[name].SetActive(false); } } #region UI Object 특화 메서드 #region ExpBar 메서드 public void ExclusiveExpBar() { PlayerController player = GameObject.FindObjectOfType(); if (player != null) { player.OnExpChanged -= UpdateExpBar; player.OnExpChanged += UpdateExpBar; } } private void UpdateExpBar(int level, float currentExp, float maxExp) { ExpBar expBar = _instances["ExpBar"].GetComponent(); expBar.UpdateValue(level, currentExp, maxExp); } #endregion #endregion }