DCS/ruiyiweiUX/Assets/Scripts/Managers/AlarmOverlayManager.cs

191 lines
5.9 KiB
C#
Raw Normal View History

2026-06-09 13:59:11 +08:00
// 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);
// }
// }
// }