// Copyright (c) Pixel Crushers. All rights reserved.
using UnityEngine;
namespace PixelCrushers.DialogueSystem
{
///
/// Lua watch frequencies.
///
public enum LuaWatchFrequency
{
///
/// Check every frame that Lua code was run.
///
EveryUpdate,
///
/// Check every time an actor speaks a DialogueEntry in a conversation.
///
EveryDialogueEntry,
///
/// Check at the end of conversations.
///
EndOfConversation
};
///
/// This class maintains a list of watchers by watch frequency.
///
public class LuaWatchers
{
private LuaWatchList m_everyUpdateList = new LuaWatchList();
private LuaWatchList m_everyDialogueEntryList = new LuaWatchList();
private LuaWatchList m_endOfConversationList = new LuaWatchList();
///
/// Adds a Lua observer.
///
///
/// Lua expression to observe.
///
///
/// Frequency to check.
///
///
/// Delegate to call when the expression changes.
///
public void AddObserver(string luaExpression, LuaWatchFrequency frequency, LuaChangedDelegate luaChangedHandler)
{
switch (frequency)
{
case LuaWatchFrequency.EveryUpdate:
m_everyUpdateList.AddObserver(luaExpression, luaChangedHandler);
break;
case LuaWatchFrequency.EveryDialogueEntry:
m_everyDialogueEntryList.AddObserver(luaExpression, luaChangedHandler);
break;
case LuaWatchFrequency.EndOfConversation:
m_endOfConversationList.AddObserver(luaExpression, luaChangedHandler);
break;
default:
Debug.LogError("Dialogue System: Internal error - unexpected Lua watch frequency " + frequency);
break;
}
}
///
/// Removes a Lua observer.
///
///
/// Lua expression.
///
///
/// Frequency.
///
///
/// Lua changed handler.
///
public void RemoveObserver(string luaExpression, LuaWatchFrequency frequency, LuaChangedDelegate luaChangedHandler)
{
switch (frequency)
{
case LuaWatchFrequency.EveryUpdate:
m_everyUpdateList.RemoveObserver(luaExpression, luaChangedHandler);
break;
case LuaWatchFrequency.EveryDialogueEntry:
m_everyDialogueEntryList.RemoveObserver(luaExpression, luaChangedHandler);
break;
case LuaWatchFrequency.EndOfConversation:
m_endOfConversationList.RemoveObserver(luaExpression, luaChangedHandler);
break;
default:
Debug.LogError("Dialogue System: Internal error - unexpected Lua watch frequency " + frequency);
break;
}
}
///
/// Removes all Lua observers for a specified frequency.
///
///
/// Frequency.
///
public void RemoveAllObservers(LuaWatchFrequency frequency)
{
switch (frequency)
{
case LuaWatchFrequency.EveryUpdate:
m_everyUpdateList.RemoveAllObservers();
break;
case LuaWatchFrequency.EveryDialogueEntry:
m_everyDialogueEntryList.RemoveAllObservers();
break;
case LuaWatchFrequency.EndOfConversation:
m_endOfConversationList.RemoveAllObservers();
break;
default:
Debug.LogError("Dialogue System: Internal error - unexpected Lua watch frequency " + frequency);
break;
}
}
///
/// Removes all Lua observers.
///
public void RemoveAllObservers()
{
m_everyUpdateList.RemoveAllObservers();
m_everyDialogueEntryList.RemoveAllObservers();
m_endOfConversationList.RemoveAllObservers();
}
///
/// Checks the observers for a specified frequency.
///
///
/// Frequency.
///
public void NotifyObservers(LuaWatchFrequency frequency)
{
switch (frequency)
{
case LuaWatchFrequency.EveryUpdate:
m_everyUpdateList.NotifyObservers();
break;
case LuaWatchFrequency.EveryDialogueEntry:
m_everyDialogueEntryList.NotifyObservers();
break;
case LuaWatchFrequency.EndOfConversation:
m_endOfConversationList.NotifyObservers();
break;
default:
Debug.LogError("Dialogue System: Internal error - unexpected Lua watch frequency " + frequency);
break;
}
}
}
}