This is my event manager
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventRegister: MonoBehaviour
{
#region Singelton
private static EventRegister _current;
public static EventRegister Current
{
get
{
if (_current == null)
{
GameObject go = new GameObject("EventRegister");
go.AddComponent<EventRegister>();
}
return _current;
}
}
#endregion
[SerializeField]
private string subscribedEvent = string.Empty;
public delegate void RegisteredEvent();
public static event RegisteredEvent OnReceivedEvent;
public static Dictionary<string, List<EventRegister>> eventRegister = new Dictionary<string, List<EventRegister>>();
private void Awake()
{
_current = this;
EventRegister.SubscribeEvent(this);
}
private void OnDestroy()
{
EventRegister.UnsubscribeEvent(this);
}
public void ReceiveEvent()
{
if (OnReceivedEvent != null)
{
OnReceivedEvent();
}
}
public static void SendEvent(string eventName)
{
if (eventName == string.Empty)
{
return;
}
if (EventRegister.eventRegister.ContainsKey(eventName))
{
List<EventRegister> list = EventRegister.eventRegister[eventName];
foreach (EventRegister eventRegister in list)
{
eventRegister.ReceiveEvent();
}
}
}
public void SwitchEvent(string eventName)
{
EventRegister.UnsubscribeEvent(this);
this.subscribedEvent = eventName;
EventRegister.SubscribeEvent(this);
}
public static void SubscribeEvent(EventRegister register)
{
string key = register.subscribedEvent;
List<EventRegister> list;
if (EventRegister.eventRegister.ContainsKey(key))
{
list = EventRegister.eventRegister[key];
}
else
{
list = new List<EventRegister>();
EventRegister.eventRegister.Add(key, list);
}
list.Add(register);
}
public static void UnsubscribeEvent(EventRegister register)
{
string key = register.subscribedEvent;
if (EventRegister.eventRegister.ContainsKey(key))
{
List<EventRegister> list = EventRegister.eventRegister[key];
if (list.Contains(register))
{
list.Remove(register);
}
if (list.Count <= 0)
{
EventRegister.eventRegister.Remove(key);
}
}
}
}
This is my enemy I want to subscribe to the event manager
I am able to send the string as event
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy: MonoBehaviour
{
// Enemy Life System Variables
private float _enemyLife = 20f;
void FixedUpdate()
{
//enemy life system
EnemyLifeSystem();
}
//enemy life system
void EnemyLifeSystem()
{
// kill enemy
if (_enemyLife <= 0)
{
DeathEvent();
KillEnemy();
}
}
public void DeathEvent()
{
EventRegister.SubscribeEvent();
EventRegister.SendEvent("Die");
}
// kill enemy
public void KillEnemy()
{
Destroy(_enemyGO);
}
}
This is the listener Don’t mind the name
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DebugScripts : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
EventRegister.OnReceivedEvent += this.Setup;
}
// Update is called once per frame
void Update()
{
}
public void Setup()
{
Debug.Log("Yaooooo ");
}
}
Naw I don’t know how to subscribe to the event any solutions?