82 lines
2.7 KiB
C#
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;
|
|
// ... 심각도, 시간 등 기타 정보
|
|
}
|
|
|
|
}
|