// ----------------------------------------------------------------------------
// Unite 2017 - Game Architecture with Scriptable Objects
//
// Author: Ryan Hipple
// Date: 10/04/17
// ----------------------------------------------------------------------------
/******************************************************************************
* Note from me:
* If you have not watched this presentation, drop everything and watch it now
* https://youtu.be/raQ3iHhE_Kk
*
* YOU MUST MASTER THIS CONTENT!
*****************************************************************************/
using System.Collections.Generic;
using UnityEngine;
namespace Architecture.Events
{
[CreateAssetMenu(fileName = "New Game Event", menuName = "Architecture/Game Event", order = 1)]
public class GameEvent : ScriptableObject
{
///
/// The list of listeners that this event will notify if it is raised.
///
private readonly List eventListeners =
new List();
public void Raise()
{
for (int i = eventListeners.Count - 1; i >= 0; i--)
eventListeners[i].OnEventRaised();
}
public void RegisterListener(GameEventListener listener)
{
if (!eventListeners.Contains(listener))
eventListeners.Add(listener);
}
public void UnregisterListener(GameEventListener listener)
{
if (eventListeners.Contains(listener))
eventListeners.Remove(listener);
}
}
}