Files
2024-11-20 15:21:28 +01:00

61 lines
1.9 KiB
C#

// Copyright (c) Pixel Crushers. All rights reserved.
using UnityEngine;
using System.Collections.Generic;
namespace PixelCrushers.QuestMachine.Wrappers
{
/// <summary>
/// This wrapper class keeps references intact if you switch between the
/// compiled assembly and source code versions of the original class.
/// </summary>
[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<QueuedAlert> m_alertsQueue = new Queue<QueuedAlert>();
public override void OnMessage(MessageArgs messageArgs)
{
if (!m_queuedAlerts)
{
base.OnMessage(messageArgs);
}
else
{
List<QuestContent> uiContent = (messageArgs.values != null && messageArgs.values.Length > 0)
? (messageArgs.values[0] as List<QuestContent>)
: 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<QuestContent> uiContent;
public QueuedAlert(List<QuestContent> uiContent, string parameter)
{
this.uiContent = uiContent;
this.parameter = parameter;
}
}
}