107 lines
3.5 KiB
C#
107 lines
3.5 KiB
C#
using AZTECHWB.Management;
|
|
using AZTECHWB.UI;
|
|
using Cysharp.Threading.Tasks;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UVC.Core;
|
|
using UVC.UI.Tooltip;
|
|
|
|
namespace AZTECHWB.Core
|
|
{
|
|
[DefaultExecutionOrder(90)]
|
|
public class AZTECHSceneMain : SingletonScene<AZTECHSceneMain>
|
|
{
|
|
public Building building;
|
|
AZTECHUIManager uiManager;
|
|
DataManager dataManager;
|
|
Raycaster raycaster;
|
|
LibraryManager libraryManager;
|
|
MachineStatusItemManager machineStatusItemManager;
|
|
AISimulationManager aiSimulationManager;
|
|
OptionManager optionManager;
|
|
|
|
public Action Initialized;
|
|
|
|
/// <summary>
|
|
/// 초기 화 메서드입니다.
|
|
/// Awake 메서드에서 호출되며, MonoBehaviour가 생성될 때 한 번만 실행됩니다.
|
|
/// </summary>
|
|
protected override void Init()
|
|
{
|
|
if (!TooltipManager.Instance.IsInitialized) TooltipManager.Instance.Initialize();
|
|
AZTECHAppMain.Instance.Initialized += OnAppInitialized;
|
|
}
|
|
|
|
private async void OnAppInitialized()
|
|
{
|
|
building = FindAnyObjectByType<Building>();
|
|
building.Init();
|
|
|
|
uiManager = await LoadManager<AZTECHUIManager>();
|
|
dataManager = await LoadManager<DataManager>();
|
|
raycaster = await LoadManager<Raycaster>();
|
|
libraryManager = await LoadManager<LibraryManager>();
|
|
aiSimulationManager = await LoadManager<AISimulationManager>();
|
|
machineStatusItemManager = await LoadManager<MachineStatusItemManager>();
|
|
optionManager = await LoadManager<OptionManager>();
|
|
|
|
SetupDataSetting();
|
|
|
|
if (Initialized != null)
|
|
{
|
|
Initialized.Invoke();
|
|
}
|
|
|
|
await UniTask.CompletedTask;
|
|
}
|
|
|
|
|
|
//실제 데이터 받을 시 코드 변경 예정
|
|
private void SetupDataSetting()
|
|
{
|
|
var popupCanvas = GetManager<AZTECHUIManager>().GetCanvas<PopupCanvas>();
|
|
|
|
dataManager.onMatchedMachineData += popupCanvas.GetPanel<ProductionProgressPanel>().SetProductionStatus;
|
|
dataManager.onMatchedMachineData += machineStatusItemManager.SetMachineData;
|
|
dataManager.onMatchedMachineData += popupCanvas.GetPanel<AlarmSituationPanel>().SetAlarmInfoItems;
|
|
dataManager.onSetMachineData += popupCanvas.GetPanel<MachineDetailDashboard>().SetDetailDashBoardInfo;
|
|
dataManager.onSetMachineData += popupCanvas.GetPanel<MachineDataDashboard>().SetDataDashobardInfo;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|