181 lines
5.5 KiB
C#
181 lines
5.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
using EnglewoodLAB.Management;
|
|
using EnglewoodLAB.UI;
|
|
using UVC.Core;
|
|
using UVC.Management;
|
|
using UVC.Studio.Manager;
|
|
|
|
namespace EnglewoodLAB
|
|
{
|
|
[DefaultExecutionOrder(90)]
|
|
public class SceneMain : SingletonScene<SceneMain>
|
|
{
|
|
public Building building;
|
|
MQTT mqttManager;
|
|
|
|
public DataManager dataManager;
|
|
public ViewManager viewManager;
|
|
public MachineInfoItemManager machineInfoItemManager;
|
|
public ThermostatInfoItemManager thermostatInfoItemManager;
|
|
public EWLUIManager uiManager;
|
|
|
|
|
|
public Action Initialized;
|
|
[SerializeField] private GameObject? stage;
|
|
public GameObject? Stage => stage;
|
|
|
|
|
|
public Dictionary<string, GameObject> sceneRootTable = new();
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
if (AppMain.Instance != null)
|
|
{
|
|
AppMain.Instance.Initialized += InitSceneMain;
|
|
}
|
|
}
|
|
|
|
protected override void OnDestroy()
|
|
{
|
|
base.OnDestroy();
|
|
if (AppMain.Instance != null)
|
|
{
|
|
AppMain.Instance.Initialized -= InitSceneMain;
|
|
}
|
|
}
|
|
|
|
public async void InitSceneMain()
|
|
{
|
|
try
|
|
{
|
|
BaseCameraPoistion();
|
|
await OnAppInitialized();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError($"[SceneMain] Initialization failed: {e}");
|
|
}
|
|
}
|
|
|
|
private async UniTask OnAppInitialized()
|
|
{
|
|
//await requestDataAsync();
|
|
building = FindAnyObjectByType<Building>();
|
|
await building.Init();
|
|
|
|
uiManager = await LoadManager<EWLUIManager>();
|
|
machineInfoItemManager = await LoadManager<MachineInfoItemManager>();
|
|
//thermostatInfoItemManager = await LoadManager<ThermostatInfoItemManager>();
|
|
viewManager = await LoadManager<ViewManager>();
|
|
mqttManager = FindAnyObjectByType<MQTT>();
|
|
var selectMnager = InjectorAppContext.Instance.Get<SelectionManager>();
|
|
selectMnager.Gizmo.Dispose();
|
|
selectMnager.Gizmo.Initialize();
|
|
dataManager = await LoadManager<DataManager>();
|
|
MQTTEventDisConnect();
|
|
SetupDataSetting();
|
|
// SetSceneTableSetting();
|
|
if (Initialized != null)
|
|
{
|
|
Initialized.Invoke();
|
|
}
|
|
|
|
await UniTask.CompletedTask;
|
|
}
|
|
|
|
private void BaseCameraPoistion()
|
|
{
|
|
var controller = AppMain.Instance.cameraController;
|
|
|
|
controller.currentAzimuth = 305f;
|
|
controller.currentElevation = 23f;
|
|
controller.currentDistance = 10f;
|
|
controller.SetTargetPos(new Vector3(17f, 0.05f, -2.806954f));
|
|
}
|
|
|
|
//실제 데이터 받을 시 코드 변경 예정
|
|
private void SetupDataSetting()
|
|
{
|
|
var popupCanvas = uiManager.GetCanvas<PopupCanvas>();
|
|
|
|
//mqttManager.onThermostatData += dataManager.SetThermostatDataList;
|
|
dataManager.onSetThermostatData += popupCanvas.GetPanel<ThermostatControlPanel>().SetData;
|
|
}
|
|
|
|
private void MQTTEventDisConnect()
|
|
{
|
|
var popupCanvas = uiManager.GetCanvas<PopupCanvas>();
|
|
|
|
//mqttManager.onThermostatData -= dataManager.SetThermostatDataList;
|
|
dataManager.onSetThermostatData -= popupCanvas.GetPanel<ThermostatControlPanel>().SetData;
|
|
}
|
|
|
|
private void SetSceneTableSetting()
|
|
{
|
|
//var findallRoots = FindObjectsByType<SceneRoot>(FindObjectsSortMode.None);
|
|
//foreach (var item in findallRoots)
|
|
//{
|
|
// switch(item.floorType)
|
|
// {
|
|
// case FloorType.All:
|
|
// sceneRootTable.Add("All", item.gameObject);
|
|
// break;
|
|
// case FloorType.FirstFloor:
|
|
// sceneRootTable.Add("1F", item.gameObject);
|
|
// break;
|
|
// case FloorType.SecondFloor:
|
|
// sceneRootTable.Add("2F", item.gameObject);
|
|
// break;
|
|
// }
|
|
//}
|
|
|
|
//foreach(var scene in sceneRootTable)
|
|
//{
|
|
// if(!scene.Key.Equals("1F"))
|
|
// {
|
|
// var root = scene.Value;
|
|
// root.gameObject.SetActive(false);
|
|
// }
|
|
//}
|
|
}
|
|
private readonly Dictionary<Type, Manager> managers = new();
|
|
|
|
private async UniTask<T> LoadManager<T>() where T : Manager
|
|
{
|
|
var manager = FindAnyObjectByType<T>();
|
|
|
|
if (manager == null)
|
|
{
|
|
Debug.LogError($"Manager not found: {typeof(T).Name}");
|
|
return null;
|
|
}
|
|
|
|
var type = typeof(T);
|
|
|
|
if (managers.ContainsKey(type))
|
|
{
|
|
Debug.LogWarning($"Duplicate Manager: {type.Name}");
|
|
return manager;
|
|
}
|
|
|
|
await manager.Init();
|
|
managers.Add(type, manager);
|
|
|
|
return manager;
|
|
}
|
|
public T GetManager<T>() where T : Manager
|
|
{
|
|
if (managers.TryGetValue(typeof(T), out var manager))
|
|
{
|
|
return manager as T;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|
|
}
|