// Copyright (c) Pixel Crushers. All rights reserved. using UnityEngine; using System.Collections.Generic; namespace PixelCrushers.QuestMachine.Wrappers { /// /// This wrapper class keeps references intact if you switch between the /// compiled assembly and source code versions of the original class. /// [AddComponentMenu("Pixel Crushers/Quest Machine/UI/Quest Alert Displayer")] public class QuestAlertDisplayer : PixelCrushers.QuestMachine.QuestAlertDisplayer { [SerializeField] private bool m_queuedAlerts; [SerializeField] private UnityUIQuestAlertUI m_unityUiQuestAlertUi; private Queue m_alertsQueue = new Queue(); public override void OnMessage(MessageArgs messageArgs) { if (!m_queuedAlerts) { base.OnMessage(messageArgs); } else { List uiContent = (messageArgs.values != null && messageArgs.values.Length > 0) ? (messageArgs.values[0] as List) : null; m_alertsQueue.Enqueue(new QueuedAlert(uiContent, messageArgs.parameter)); } } private void Update() { if (!m_queuedAlerts) { return; } if (!m_unityUiQuestAlertUi.isVisible && m_alertsQueue.Count > 0) { var alert = m_alertsQueue.Dequeue(); questAlertUI.ShowAlert(alert.parameter, alert.uiContent); } } } public class QueuedAlert { public string parameter; public List uiContent; public QueuedAlert(List uiContent, string parameter) { this.uiContent = uiContent; this.parameter = parameter; } } }