191 lines
5.9 KiB
C#
191 lines
5.9 KiB
C#
// using UnityEngine;
|
||
|
||
// /// <summary>
|
||
// /// 报警覆盖管理器
|
||
// /// 负责管理AlarmOverlayPanel的生命周期和显示逻辑
|
||
// /// </summary>
|
||
// public class AlarmOverlayManager : MonoBehaviour
|
||
// {
|
||
// [Header("面板管理")]
|
||
// public AlarmOverlayPanel OverlayPanelPrefab;
|
||
// public Transform CanvasParent; // Canvas transform,用于放置覆盖面板
|
||
|
||
// [Header("显示设置")]
|
||
// public bool AutoShowOverlay = true; // 是否自动显示覆盖面板
|
||
// public bool AllowMultipleAlarms = false; // 是否允许同时显示多个报警
|
||
|
||
// private AlarmOverlayPanel _currentOverlayPanel;
|
||
// // private IAlarmService _alarmService;
|
||
|
||
// void Start()
|
||
// {
|
||
// Initialize();
|
||
// }
|
||
|
||
// private void Initialize()
|
||
// {
|
||
// // 注册DCSAlarmManager事件
|
||
// DCSAlarmManager.OnAlarmRaised += OnAlarmRaised;
|
||
|
||
// // 如果没有设置Canvas父对象,尝试查找
|
||
// if (CanvasParent == null)
|
||
// {
|
||
// var canvas = FindObjectOfType<Canvas>();
|
||
// if (canvas != null)
|
||
// {
|
||
// CanvasParent = canvas.transform;
|
||
// }
|
||
// else
|
||
// {
|
||
// Debug.LogWarning("AlarmOverlayManager: 未找到Canvas,覆盖面板可能无法正确显示");
|
||
// }
|
||
// }
|
||
// }
|
||
|
||
// private void OnAlarmRaised(AlarmPriority priority, string reason)
|
||
// {
|
||
// if (!AutoShowOverlay) return;
|
||
|
||
// // 创建临时AlarmEvent对象以兼容现有逻辑
|
||
// var alarmEvent = new AlarmEvent
|
||
// {
|
||
// Id = UnityEngine.Random.Range(1000, 9999),
|
||
// Priority = priority,
|
||
// Reason = reason,
|
||
// Time = System.DateTime.Now
|
||
// };
|
||
|
||
// // 检查是否已经有覆盖面板在显示
|
||
// if (_currentOverlayPanel != null && !AllowMultipleAlarms)
|
||
// {
|
||
// // 如果当前报警优先级更高,替换当前显示
|
||
// if (ShouldReplaceCurrentAlarm(alarmEvent))
|
||
// {
|
||
// HideCurrentOverlay();
|
||
// ShowAlarmOverlay(alarmEvent);
|
||
// }
|
||
// return;
|
||
// }
|
||
|
||
// ShowAlarmOverlay(alarmEvent);
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 显示报警覆盖面板
|
||
// /// </summary>
|
||
// private void ShowAlarmOverlay(AlarmEvent alarmEvent)
|
||
// {
|
||
// if (OverlayPanelPrefab == null)
|
||
// {
|
||
// Debug.LogError("AlarmOverlayManager: OverlayPanelPrefab 未设置");
|
||
// return;
|
||
// }
|
||
|
||
// if (CanvasParent == null)
|
||
// {
|
||
// Debug.LogError("AlarmOverlayManager: CanvasParent 未设置");
|
||
// return;
|
||
// }
|
||
|
||
// // 创建覆盖面板实例
|
||
// GameObject overlayGO = Instantiate(OverlayPanelPrefab.gameObject, CanvasParent);
|
||
// _currentOverlayPanel = overlayGO.GetComponent<AlarmOverlayPanel>();
|
||
|
||
// if (_currentOverlayPanel == null)
|
||
// {
|
||
// Debug.LogError("AlarmOverlayManager: 无法获取AlarmOverlayPanel组件");
|
||
// Destroy(overlayGO);
|
||
// return;
|
||
// }
|
||
|
||
// // 设置面板为最高层级
|
||
// overlayGO.transform.SetAsLastSibling();
|
||
|
||
// // 注册关闭事件
|
||
// RegisterOverlayEvents(_currentOverlayPanel);
|
||
|
||
// Debug.Log($"显示报警覆盖面板: {alarmEvent.Reason} (优先级: {alarmEvent.Priority})");
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 注册覆盖面板事件
|
||
// /// </summary>
|
||
// private void RegisterOverlayEvents(AlarmOverlayPanel panel)
|
||
// {
|
||
// // 监听面板销毁事件,清理引用
|
||
// // 这里可以通过扩展AlarmOverlayPanel添加OnClosed事件
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 隐藏当前覆盖面板
|
||
// /// </summary>
|
||
// private void HideCurrentOverlay()
|
||
// {
|
||
// if (_currentOverlayPanel != null)
|
||
// {
|
||
// _currentOverlayPanel.HideAlarmOverlay();
|
||
// Destroy(_currentOverlayPanel.gameObject, 1f); // 延迟销毁,等待淡出动画完成
|
||
// _currentOverlayPanel = null;
|
||
// }
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 判断是否应该替换当前报警
|
||
// /// </summary>
|
||
// private bool ShouldReplaceCurrentAlarm(AlarmEvent newAlarm)
|
||
// {
|
||
// // 简单的优先级比较逻辑
|
||
// // 高优先级报警总是替换低优先级报警
|
||
// return newAlarm.Priority > AlarmPriority.Low; // 这里可以根据需要调整逻辑
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 手动显示报警覆盖面板
|
||
// /// </summary>
|
||
// public void ShowAlarmOverlay(AlarmPriority priority, string reason)
|
||
// {
|
||
// var alarmEvent = new AlarmEvent
|
||
// {
|
||
// Priority = priority,
|
||
// Reason = reason,
|
||
// Time = System.DateTime.Now
|
||
// };
|
||
|
||
// ShowAlarmOverlay(alarmEvent);
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 手动隐藏报警覆盖面板
|
||
// /// </summary>
|
||
// public void HideOverlay()
|
||
// {
|
||
// HideCurrentOverlay();
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 设置自动显示覆盖面板
|
||
// /// </summary>
|
||
// public void SetAutoShow(bool enable)
|
||
// {
|
||
// AutoShowOverlay = enable;
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 检查是否有覆盖面板正在显示
|
||
// /// </summary>
|
||
// public bool IsOverlayVisible()
|
||
// {
|
||
// return _currentOverlayPanel != null && _currentOverlayPanel.gameObject.activeInHierarchy;
|
||
// }
|
||
|
||
// void OnDestroy()
|
||
// {
|
||
// // 注销DCSAlarmManager事件
|
||
// DCSAlarmManager.OnAlarmRaised -= OnAlarmRaised;
|
||
|
||
// if (_currentOverlayPanel != null)
|
||
// {
|
||
// Destroy(_currentOverlayPanel.gameObject);
|
||
// }
|
||
// }
|
||
// } |