// using UnityEngine; // /// // /// 报警覆盖管理器 // /// 负责管理AlarmOverlayPanel的生命周期和显示逻辑 // /// // 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(); // 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); // } // /// // /// 显示报警覆盖面板 // /// // 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(); // if (_currentOverlayPanel == null) // { // Debug.LogError("AlarmOverlayManager: 无法获取AlarmOverlayPanel组件"); // Destroy(overlayGO); // return; // } // // 设置面板为最高层级 // overlayGO.transform.SetAsLastSibling(); // // 注册关闭事件 // RegisterOverlayEvents(_currentOverlayPanel); // Debug.Log($"显示报警覆盖面板: {alarmEvent.Reason} (优先级: {alarmEvent.Priority})"); // } // /// // /// 注册覆盖面板事件 // /// // private void RegisterOverlayEvents(AlarmOverlayPanel panel) // { // // 监听面板销毁事件,清理引用 // // 这里可以通过扩展AlarmOverlayPanel添加OnClosed事件 // } // /// // /// 隐藏当前覆盖面板 // /// // private void HideCurrentOverlay() // { // if (_currentOverlayPanel != null) // { // _currentOverlayPanel.HideAlarmOverlay(); // Destroy(_currentOverlayPanel.gameObject, 1f); // 延迟销毁,等待淡出动画完成 // _currentOverlayPanel = null; // } // } // /// // /// 判断是否应该替换当前报警 // /// // private bool ShouldReplaceCurrentAlarm(AlarmEvent newAlarm) // { // // 简单的优先级比较逻辑 // // 高优先级报警总是替换低优先级报警 // return newAlarm.Priority > AlarmPriority.Low; // 这里可以根据需要调整逻辑 // } // /// // /// 手动显示报警覆盖面板 // /// // public void ShowAlarmOverlay(AlarmPriority priority, string reason) // { // var alarmEvent = new AlarmEvent // { // Priority = priority, // Reason = reason, // Time = System.DateTime.Now // }; // ShowAlarmOverlay(alarmEvent); // } // /// // /// 手动隐藏报警覆盖面板 // /// // public void HideOverlay() // { // HideCurrentOverlay(); // } // /// // /// 设置自动显示覆盖面板 // /// // public void SetAutoShow(bool enable) // { // AutoShowOverlay = enable; // } // /// // /// 检查是否有覆盖面板正在显示 // /// // public bool IsOverlayVisible() // { // return _currentOverlayPanel != null && _currentOverlayPanel.gameObject.activeInHierarchy; // } // void OnDestroy() // { // // 注销DCSAlarmManager事件 // DCSAlarmManager.OnAlarmRaised -= OnAlarmRaised; // if (_currentOverlayPanel != null) // { // Destroy(_currentOverlayPanel.gameObject); // } // } // }