You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
C#
48 lines
1.3 KiB
C#
3 weeks ago
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace Unity.BossRoom.Infrastructure
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Class for encapsulating game-related events within ScriptableObject instances. This class defines a List of
|
||
|
/// GameEventListeners, which will be notified whenever this GameEvent's Raise() method is fired.
|
||
|
/// </summary>
|
||
|
[CreateAssetMenu]
|
||
|
public class GameEvent : ScriptableObject
|
||
|
{
|
||
|
List<IGameEventListenable> m_Listeners = new List<IGameEventListenable>();
|
||
|
|
||
|
public void Raise()
|
||
|
{
|
||
|
for (int i = m_Listeners.Count - 1; i >= 0; i--)
|
||
|
{
|
||
|
if (m_Listeners[i] == null)
|
||
|
{
|
||
|
m_Listeners.RemoveAt(i);
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
m_Listeners[i].EventRaised();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void RegisterListener(IGameEventListenable listener)
|
||
|
{
|
||
|
for (int i = 0; i < m_Listeners.Count; i++)
|
||
|
{
|
||
|
if (m_Listeners[i] == listener)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
m_Listeners.Add(listener);
|
||
|
}
|
||
|
|
||
|
public void DeregisterListener(IGameEventListenable listener)
|
||
|
{
|
||
|
m_Listeners.Remove(listener);
|
||
|
}
|
||
|
}
|
||
|
}
|