// Copyright (c) Pixel Crushers. All rights reserved.
using UnityEngine;
using System.Collections.Generic;
namespace PixelCrushers.QuestMachine
{
///
/// Sends a QuestAlert message with some UI content.
///
public class AlertQuestAction : QuestAction
{
[SerializeField]
private List m_contentList = new List();
[SerializeField]
private QuestContentProxy[] m_contentListSerializationProxy; // Temporary variable for proxy serialization.
///
/// The content to show in the alert UI.
///
public List contentList
{
get { return m_contentList; }
set { m_contentList = value; }
}
public override string GetEditorName()
{
var hasContent = (contentList != null && contentList.Count > 0 && contentList[0] != null);
if (!hasContent) return "Alert";
var firstContent = contentList[0].GetEditorName();
return "Alert: " + firstContent + ((contentList.Count > 1) ? "..." : string.Empty);
}
public override void SetRuntimeReferences(Quest quest, QuestNode questNode)
{
base.SetRuntimeReferences(quest, questNode);
for (int i = 0; i < contentList.Count; i++)
{
if (contentList[i] != null) contentList[i].SetRuntimeReferences(quest, questNode);
}
}
public override void Execute()
{
if (quest != null)
{
QuestMachineMessages.QuestAlert(quest, quest.id, contentList);
}
else // We may be at the end of the quest, and it may have been removed, so pass null for the quest:
{
QuestMachineMessages.QuestAlert(null, StringField.empty, contentList);
}
}
public override Sprite[] GetImages()
{
var images = new List();
for (int i = 0; i < contentList.Count; i++)
{
if (contentList[i] == null) continue;
var contentImages = contentList[i].GetImages();
if (contentImages != null)
{
images.AddRange(contentImages);
}
}
return images.ToArray();
}
public override AudioClip[] GetAudioClips()
{
var audioClips = new List();
for (int i = 0; i < contentList.Count; i++)
{
if (contentList[i] == null) continue;
var contentAudioClips = contentList[i].GetAudioClips();
if (contentAudioClips != null)
{
audioClips.AddRange(contentAudioClips);
}
}
return audioClips.ToArray();
}
public override void OnBeforeProxySerialization()
{
base.OnBeforeProxySerialization();
m_contentListSerializationProxy = QuestContentProxy.NewArray(contentList);
}
public override void OnAfterProxyDeserialization()
{
base.OnAfterProxyDeserialization();
contentList = QuestContentProxy.CreateList(m_contentListSerializationProxy);
m_contentListSerializationProxy = null; // After deserializing, free proxy memory.
}
public override void CloneSubassetsInto(QuestSubasset copy)
{
base.CloneSubassetsInto(copy);
var copyAlertQuestAction = copy as AlertQuestAction;
if (copyAlertQuestAction == null) return;
copyAlertQuestAction.contentList = CloneList(contentList);
}
public override void DestroySubassets()
{
base.DestroySubassets();
DestroyList(contentList);
}
}
}