Skip to content

Commit bff9adc

Browse files
committed
Added base code for Scriptable Object Event System. Pending reviewing GUI aspect
0 parents  commit bff9adc

23 files changed

Lines changed: 1109 additions & 0 deletions

CustomScriptTemplates.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using UnityEngine;
2+
using UnityEngine.Events;
3+
4+
public class <SCRIPT_NAME> : MonoBehaviour
5+
{
6+
[System.Serializable]
7+
public class CustomUnityEvent : UnityEvent<<ARGUMENT_TYPE_LIST>> { } //ARGUMENT_TYPE_LIST -> Type1, Type2, Type3...
8+
9+
[SerializeField] private <SO_EVENT_NAME> <SO_EVENT_FIELD_NAME>;
10+
[SerializeField] private CustomUnityEvent response;
11+
12+
void OnEnable()
13+
{
14+
<SO_EVENT_FIELD_NAME>.AddListener(this);
15+
}
16+
17+
void OnDisable()
18+
{
19+
<SO_EVENT_FIELD_NAME>.RemoveListener(this);
20+
}
21+
22+
public void RiseEvent(<ARGUMENT_LIST_DEFINITION>)//Type1 arg1, Type2 arg2, Type3 arg3...
23+
{
24+
response.Invoke(<ARGUMENT_LIST>); //arg1, arg2, arg3...
25+
}
26+
27+
}

CustomScriptTemplates/GenericSOEventListenerTemplate.txt.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Collections.Generic;
2+
using UnityEngine;
3+
4+
[CreateAssetMenu(fileName ="<SO_FILE_NAME>", menuName ="EspidiGames/SO Events/<SO_MENU_NAME>", order = 20)]
5+
public class <SCRIPT_NAME> : ScriptableObject
6+
{
7+
private List<<LISTENER_NAME>> listeners = new List<<LISTENER_NAME>>();
8+
9+
10+
public void AddListener(<LISTENER_NAME> l)
11+
{
12+
if (listeners.Contains(l))
13+
{
14+
Debug.LogError($"[ScriptableObjectEvents] Listener {l.name} of GameObject {l.gameObject.name} already registered. Aborting registration.");
15+
return;
16+
}
17+
18+
listeners.Add(l);
19+
}
20+
21+
public void RemoveListener(<LISTENER_NAME> l)
22+
{
23+
if (!listeners.Contains(l))
24+
{
25+
Debug.LogError($"[ScriptableObjectEvents] Listener {l.name} of GameObject {l.gameObject.name} is not registered. Aborting removal.");
26+
return;
27+
}
28+
29+
listeners.Remove(l);
30+
}
31+
32+
public void RiseEvent(<ARGUMENT_LIST_DEFINITION>) //Type1 arg1, Type2 arg2, Type3 arg3...
33+
{
34+
foreach(var listener in listeners)
35+
{
36+
listener.RiseEvent(<ARGUMENT_LIST>); //arg1, arg2, arg3...
37+
}
38+
}
39+
}

CustomScriptTemplates/GenericSOEventTemplate.txt.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using UnityEngine;
2+
using UnityEngine.Events;
3+
4+
public class <SCRIPT_NAME> : MonoBehaviour
5+
{
6+
[SerializeField] private <SO_EVENT_NAME> <SO_EVENT_FIELD_NAME>;
7+
[SerializeField] private UnityEvent response;
8+
9+
void OnEnable()
10+
{
11+
<SO_EVENT_FIELD_NAME>.AddListener(this);
12+
}
13+
14+
void OnDisable()
15+
{
16+
<SO_EVENT_FIELD_NAME>.RemoveListener(this);
17+
}
18+
19+
public void RiseEvent()
20+
{
21+
response.Invoke();
22+
}
23+
24+
}

CustomScriptTemplates/NoArgsSOEventListenerTemplate.txt.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Collections.Generic;
2+
using UnityEngine;
3+
4+
[CreateAssetMenu(fileName ="<SO_FILE_NAME>", menuName ="EspidiGames/SO Events/<SO_MENU_NAME>", order = 20)]
5+
public class <SCRIPT_NAME> : ScriptableObject
6+
{
7+
private List<<LISTENER_NAME>> listeners = new List<<LISTENER_NAME>>();
8+
9+
10+
public void AddListener(<LISTENER_NAME> l)
11+
{
12+
if (listeners.Contains(l))
13+
{
14+
Debug.LogError($"[ScriptableObjectEvents] Listener {l.name} of GameObject {l.gameObject.name} already registered. Aborting registration.");
15+
return;
16+
}
17+
18+
listeners.Add(l);
19+
}
20+
21+
public void RemoveListener(<LISTENER_NAME> l)
22+
{
23+
if (!listeners.Contains(l))
24+
{
25+
Debug.LogError($"[ScriptableObjectEvents] Listener {l.name} of GameObject {l.gameObject.name} is not registered. Aborting removal.");
26+
return;
27+
}
28+
29+
listeners.Remove(l);
30+
}
31+
32+
public void RiseEvent()
33+
{
34+
foreach(var listener in listeners)
35+
{
36+
listener.RiseEvent();
37+
}
38+
}
39+
}

CustomScriptTemplates/NoArgsSOEventTemplate.txt.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)