EchoTrio
 
Loading...
Searching...
No Matches
GameEventSystem.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Reflection;
3using UnityEngine;
4using UnityEngine.Events;
5using UnityEngine.Assertions;
6
7namespace GameEvent {
8 public class GameEventSystem {
9 // Singleton Instance
10 private static GameEventSystem instance = null;
11
12 // Events
13 private Dictionary<string, UnityEventBase> events = new Dictionary<string, UnityEventBase>();
14
15 // Debug Variable(s)
16 public bool enableDebug = false;
17
18 // Constructor(s)
19 private GameEventSystem() { }
20
21 // Singleton Getter
22 public static GameEventSystem GetInstance() {
23 if (instance == null) {
25 }
26
27 return instance;
28 }
29
30 private void WriteToConsole(string str) {
31 if (enableDebug) { Debug.Log(str); }
32 }
33
34 private UnityEventBase GetEvent(string eventName) {
35 UnityEventBase result = null;
36 if (events.TryGetValue(eventName, out result)) {
37 return result;
38 }
39
40 return null;
41 }
42
43 private void AddEvent(string eventName) {
44 Assert.IsFalse(events.ContainsKey(eventName), MethodBase.GetCurrentMethod().Name + " - An event with this name already exist!");
45
46 UnityEvent unityEvent = new UnityEvent();
47 events.Add(eventName, unityEvent);
48 }
49
50 private void AddEvent<T>(string eventName) {
51 Assert.IsFalse(events.ContainsKey(eventName), MethodBase.GetCurrentMethod().Name + " - An event with this name already exist!");
52
53 UnityEvent<T> unityEvent = new UnityEvent<T>();
54 events.Add(eventName, unityEvent);
55 }
56
57 private void AddEvent<T1, T2>(string eventName) {
58 Assert.IsFalse(events.ContainsKey(eventName), MethodBase.GetCurrentMethod().Name + " - An event with this name already exist!");
59
60 UnityEvent<T1, T2> unityEvent = new UnityEvent<T1, T2>();
61 events.Add(eventName, unityEvent);
62 }
63
64 private void AddEvent<T1, T2, T3>(string eventName) {
65 Assert.IsFalse(events.ContainsKey(eventName), MethodBase.GetCurrentMethod().Name + " - An event with this name already exist!");
66
67 UnityEvent<T1, T2, T3> unityEvent = new UnityEvent<T1, T2, T3>();
68 events.Add(eventName, unityEvent);
69 }
70
71 private void AddEvent<T1, T2, T3, T4>(string eventName) {
72 Assert.IsFalse(events.ContainsKey(eventName), MethodBase.GetCurrentMethod().Name + " - An event with this name already exist!");
73
74 UnityEvent<T1, T2, T3, T4> unityEvent = new UnityEvent<T1, T2, T3, T4>();
75 events.Add(eventName, unityEvent);
76 }
77
78 // **************** Public Interface ****************
79 public bool HasEvent(string eventName) {
80 return events.ContainsKey(eventName);
81 }
82
83 public void SubscribeToEvent(string eventName, UnityAction unityAction) {
84 UnityEventBase unityEventBase = GetEvent(eventName);
85 if (unityEventBase == null) {
86 AddEvent(eventName);
87 unityEventBase = GetEvent(eventName);
88 }
89
90 UnityEvent unityEvent = (UnityEvent)unityEventBase;
91 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
92
93 unityEvent.AddListener(unityAction);
94 }
95
96 public void SubscribeToEvent<T>(string eventName, UnityAction<T> unityAction) {
97 UnityEventBase unityEventBase = GetEvent(eventName);
98 if (unityEventBase == null) {
99 AddEvent<T>(eventName);
100 unityEventBase = GetEvent(eventName);
101 }
102
103 UnityEvent<T> unityEvent = (UnityEvent<T>)unityEventBase;
104 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
105
106 unityEvent.AddListener(unityAction);
107 }
108
109 public void SubscribeToEvent<T1, T2>(string eventName, UnityAction<T1, T2> unityAction) {
110 UnityEventBase unityEventBase = GetEvent(eventName);
111 if (unityEventBase == null) {
112 AddEvent<T1, T2>(eventName);
113 unityEventBase = GetEvent(eventName);
114 }
115
116 UnityEvent<T1, T2> unityEvent = (UnityEvent<T1, T2>)unityEventBase;
117 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
118
119 unityEvent.AddListener(unityAction);
120 }
121
122 public void SubscribeToEvent<T1, T2, T3>(string eventName, UnityAction<T1, T2, T3> unityAction) {
123 UnityEventBase unityEventBase = GetEvent(eventName);
124 if (unityEventBase == null) {
125 AddEvent<T1, T2, T3>(eventName);
126 unityEventBase = GetEvent(eventName);
127 }
128
129 UnityEvent<T1, T2, T3> unityEvent = (UnityEvent<T1, T2, T3>)unityEventBase;
130 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
131
132 unityEvent.AddListener(unityAction);
133 }
134
135 public void SubscribeToEvent<T1, T2, T3, T4>(string eventName, UnityAction<T1, T2, T3, T4> unityAction) {
136 UnityEventBase unityEventBase = GetEvent(eventName);
137 if (unityEventBase == null) {
138 AddEvent<T1, T2, T3, T4>(eventName);
139 unityEventBase = GetEvent(eventName);
140 }
141
142 UnityEvent<T1, T2, T3, T4> unityEvent = (UnityEvent<T1, T2, T3, T4>)unityEventBase;
143 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
144
145 unityEvent.AddListener(unityAction);
146 }
147
148 public void UnsubscribeFromEvent(string eventName, UnityAction unityAction) {
149 UnityEventBase unityEventBase = GetEvent(eventName);
150 Assert.IsFalse(unityEventBase == null, MethodBase.GetCurrentMethod().Name + " - Event(" + eventName + ") not found!");
151
152 UnityEvent unityEvent = (UnityEvent)unityEventBase;
153 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
154
155 unityEvent.RemoveListener(unityAction);
156 }
157
158 public void UnsubscribeFromEvent<T>(string eventName, UnityAction<T> unityAction) {
159 UnityEventBase unityEventBase = GetEvent(eventName);
160 Assert.IsFalse(unityEventBase == null, MethodBase.GetCurrentMethod().Name + " - Event(" + eventName + ") not found!");
161
162 UnityEvent<T> unityEvent = (UnityEvent<T>)unityEventBase;
163 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
164
165 unityEvent.RemoveListener(unityAction);
166 }
167
168 public void UnsubscribeFromEvent<T1, T2>(string eventName, UnityAction<T1, T2> unityAction) {
169 UnityEventBase unityEventBase = GetEvent(eventName);
170 Assert.IsFalse(unityEventBase == null, MethodBase.GetCurrentMethod().Name + " - Event(" + eventName + ") not found!");
171
172 UnityEvent<T1, T2> unityEvent = (UnityEvent<T1, T2>)unityEventBase;
173 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
174
175 unityEvent.RemoveListener(unityAction);
176 }
177
178 public void UnsubscribeFromEvent<T1, T2, T3>(string eventName, UnityAction<T1, T2, T3> unityAction) {
179 UnityEventBase unityEventBase = GetEvent(eventName);
180 Assert.IsFalse(unityEventBase == null, MethodBase.GetCurrentMethod().Name + " - Event(" + eventName + ") not found!");
181
182 UnityEvent<T1, T2, T3> unityEvent = (UnityEvent<T1, T2, T3>)unityEventBase;
183 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
184
185 unityEvent.RemoveListener(unityAction);
186 }
187
188 public void UnsubscribeFromEvent<T1, T2, T3, T4>(string eventName, UnityAction<T1, T2, T3, T4> unityAction) {
189 UnityEventBase unityEventBase = GetEvent(eventName);
190 Assert.IsFalse(unityEventBase == null, MethodBase.GetCurrentMethod().Name + " - Event(" + eventName + ") not found!");
191
192 UnityEvent<T1, T2, T3, T4> unityEvent = (UnityEvent<T1, T2, T3, T4>)unityEventBase;
193 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
194
195 unityEvent.RemoveListener(unityAction);
196 }
197
198 public void TriggerEvent(string eventName) {
199 WriteToConsole("Triggered Event: " + eventName);
200
201 UnityEventBase unityEventBase = GetEvent(eventName);
202 if (unityEventBase == null) {
203 AddEvent(eventName);
204 unityEventBase = GetEvent(eventName);
205 }
206
207 UnityEvent unityEvent = (UnityEvent)unityEventBase;
208 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
209
210 unityEvent.Invoke();
211 }
212
213 public void TriggerEvent<T>(string eventName, T parameter) {
214 WriteToConsole("Triggered Event: " + eventName);
215
216 UnityEventBase unityEventBase = GetEvent(eventName);
217 if (unityEventBase == null) {
218 AddEvent<T>(eventName);
219 unityEventBase = GetEvent(eventName);
220 }
221
222 UnityEvent<T> unityEvent = (UnityEvent<T>)unityEventBase;
223 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
224
225 unityEvent.Invoke(parameter);
226 }
227
228 public void TriggerEvent<T1, T2>(string eventName, T1 parameter1, T2 parameter2) {
229 WriteToConsole("Triggered Event: " + eventName);
230
231 UnityEventBase unityEventBase = GetEvent(eventName);
232 if (unityEventBase == null) {
233 AddEvent<T1, T2>(eventName);
234 unityEventBase = GetEvent(eventName);
235 }
236
237 UnityEvent<T1, T2> unityEvent = (UnityEvent<T1, T2>)unityEventBase;
238 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
239
240 unityEvent.Invoke(parameter1, parameter2);
241 }
242
243 public void TriggerEvent<T1, T2, T3>(string eventName, T1 parameter1, T2 parameter2, T3 parameter3) {
244 WriteToConsole("Triggered Event: " + eventName);
245
246 UnityEventBase unityEventBase = GetEvent(eventName);
247 if (unityEventBase == null) {
248 AddEvent<T1, T2, T3>(eventName);
249 unityEventBase = GetEvent(eventName);
250 }
251
252 UnityEvent<T1, T2, T3> unityEvent = (UnityEvent<T1, T2, T3>)unityEventBase;
253 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
254
255 unityEvent.Invoke(parameter1, parameter2, parameter3);
256 }
257
258 public void TriggerEvent<T1, T2, T3, T4>(string eventName, T1 parameter1, T2 parameter2, T3 parameter3, T4 parameter4) {
259 WriteToConsole("Triggered Event: " + eventName);
260
261 UnityEventBase unityEventBase = GetEvent(eventName);
262 if (unityEventBase == null) {
263 AddEvent<T1, T2, T3, T4>(eventName);
264 unityEventBase = GetEvent(eventName);
265 }
266
267 UnityEvent<T1, T2, T3, T4> unityEvent = (UnityEvent<T1, T2, T3, T4>)unityEventBase;
268 Assert.IsFalse(unityEvent == null, MethodBase.GetCurrentMethod().Name + " - The event " + eventName + " already exists with different arguments defined!");
269
270 unityEvent.Invoke(parameter1, parameter2, parameter3, parameter4);
271 }
272 }
273}
void UnsubscribeFromEvent< T >(string eventName, UnityAction< T > unityAction)
bool HasEvent(string eventName)
void TriggerEvent< T1, T2, T3, T4 >(string eventName, T1 parameter1, T2 parameter2, T3 parameter3, T4 parameter4)
void UnsubscribeFromEvent(string eventName, UnityAction unityAction)
void UnsubscribeFromEvent< T1, T2, T3 >(string eventName, UnityAction< T1, T2, T3 > unityAction)
static GameEventSystem instance
void TriggerEvent(string eventName)
void AddEvent< T1, T2, T3 >(string eventName)
void TriggerEvent< T >(string eventName, T parameter)
void UnsubscribeFromEvent< T1, T2, T3, T4 >(string eventName, UnityAction< T1, T2, T3, T4 > unityAction)
void SubscribeToEvent(string eventName, UnityAction unityAction)
void SubscribeToEvent< T >(string eventName, UnityAction< T > unityAction)
Dictionary< string, UnityEventBase > events
void AddEvent(string eventName)
void AddEvent< T1, T2, T3, T4 >(string eventName)
void SubscribeToEvent< T1, T2 >(string eventName, UnityAction< T1, T2 > unityAction)
void WriteToConsole(string str)
void SubscribeToEvent< T1, T2, T3 >(string eventName, UnityAction< T1, T2, T3 > unityAction)
void SubscribeToEvent< T1, T2, T3, T4 >(string eventName, UnityAction< T1, T2, T3, T4 > unityAction)
void AddEvent< T >(string eventName)
static GameEventSystem GetInstance()
void UnsubscribeFromEvent< T1, T2 >(string eventName, UnityAction< T1, T2 > unityAction)
UnityEventBase GetEvent(string eventName)
void TriggerEvent< T1, T2, T3 >(string eventName, T1 parameter1, T2 parameter2, T3 parameter3)
void TriggerEvent< T1, T2 >(string eventName, T1 parameter1, T2 parameter2)
void AddEvent< T1, T2 >(string eventName)