Files
XRLib/Assets/Scripts/UVC/Factory/Alarm/AlarmManager.cs
2025-06-23 20:06:15 +09:00

82 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UVC.Factory;
using UVC.Factory.Component;
namespace UVC.Factory.Alarm
{
public class AlarmManager : MonoBehaviour
{
public static AlarmManager Instance { get; private set; }
public GameObject alarmUIPrefab; // 알람 UI 프리팹 (아래에서 설명)
private Dictionary<string, AlarmUIController> activeAlarmUIs = new Dictionary<string, AlarmUIController>();
// FactoryDataManager에서 찾을 수 있도록 참조를 저장
private FactoryObjectManager dataManager;
void Awake()
{
Instance = this;
}
void Start()
{
dataManager = FactoryObjectManager.Instance;
// 예시: FactoryDataManager의 알람 이벤트에 구독
// dataManager.OnAlarmReceived += HandleNewAlarm;
// dataManager.OnAlarmCleared += HandleClearedAlarm;
}
public void HandleNewAlarm(AlarmData data)
{
// 이미 해당 설비에 알람 UI가 떠 있는지 확인
if (activeAlarmUIs.TryGetValue(data.objectId, out AlarmUIController uiController))
{
// 있으면 기존 UI에 알람 정보만 추가
uiController.AddAlarm(data);
}
else
{
// 없으면 새로 생성
FactoryObject targetObject = dataManager.FindById(data.objectId);
if (targetObject != null)
{
GameObject newUIObject = Instantiate(alarmUIPrefab, transform); // 매니저 하위에 생성
AlarmUIController newUiController = newUIObject.GetComponent<AlarmUIController>();
newUiController.Initialize(targetObject, data);
activeAlarmUIs.Add(data.objectId, newUiController);
}
}
}
public void HandleClearedAlarm(AlarmData data)
{
if (activeAlarmUIs.TryGetValue(data.objectId, out AlarmUIController uiController))
{
uiController.RemoveAlarm(data);
if (uiController.GetAlarmCount() == 0)
{
activeAlarmUIs.Remove(data.objectId);
Destroy(uiController.gameObject);
}
}
}
}
// 알람 데이터 전달용 클래스
public class AlarmData
{
public string objectId;
public string alarmId; // 각 알람의 고유 ID
public string message;
// ... 심각도, 시간 등 기타 정보
}
}