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

191 lines
5.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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);
// }
// }
// }