From 437c4242d6c8ced5df4fe47d036a0f274c94577d Mon Sep 17 00:00:00 2001 From: Fireball19 Date: Tue, 31 Jan 2023 23:28:29 +0100 Subject: [PATCH 1/3] Add label in gameevents gui to display name of parent gameobject from listeners --- .../SOGameEvents/Editor/GameEventEditor.cs | 2 ++ Packages/SOGameEvents/Runtime/GameEvent.cs | 11 +++++++ .../SOGameEvents/Runtime/GameEventListener.cs | 30 ++++++++++++++++++- .../Runtime/IGameEventListener.cs | 5 ++++ .../Listener/AudioClipGameEventListener.cs | 2 +- .../Runtime/Listener/BoolGameEventListener.cs | 2 +- .../Runtime/Listener/ByteGameEventListener.cs | 2 +- .../Runtime/Listener/CharGameEventListener.cs | 2 +- .../Listener/ColorGameEventListener.cs | 2 +- .../Component/ComponentGameEventListener.cs | 7 +++-- .../Listener/DoubleGameEventListener.cs | 2 +- .../Listener/EmptyGameEventListener.cs | 2 +- .../Listener/FloatGameEventListener.cs | 2 +- .../Listener/GameObjectGameEventListener.cs | 2 +- .../Runtime/Listener/IntGameEventListener.cs | 2 +- .../Runtime/Listener/LongGameEventListener.cs | 2 +- .../Listener/QuaternionGameEventListener.cs | 2 +- .../Listener/SByteGameEventListener.cs | 2 +- .../Listener/ShortGameEventListener.cs | 2 +- .../Listener/StringGameEventListener.cs | 2 +- .../Listener/TransformGameEventListener.cs | 2 +- .../Runtime/Listener/UIntGameEventListener.cs | 2 +- .../Listener/UShortGameEventListener.cs | 2 +- .../Listener/Vector2GameEventListener.cs | 2 +- .../Listener/Vector2IntGameEventListener.cs | 2 +- .../Listener/Vector3GameEventListener.cs | 2 +- .../Listener/Vector3IntGameEventListener.cs | 2 +- .../Listener/Vector4GameEventListener.cs | 2 +- 28 files changed, 75 insertions(+), 26 deletions(-) diff --git a/Packages/SOGameEvents/Editor/GameEventEditor.cs b/Packages/SOGameEvents/Editor/GameEventEditor.cs index c61d1b0..0f6b951 100644 --- a/Packages/SOGameEvents/Editor/GameEventEditor.cs +++ b/Packages/SOGameEvents/Editor/GameEventEditor.cs @@ -15,6 +15,8 @@ public override void OnInspectorGUI() { e.Raise(t); } + + GUILayout.Label("Used by listeners in following GameObjects: " + e.EventListenersParentNames()); } protected abstract T GetValue(); diff --git a/Packages/SOGameEvents/Runtime/GameEvent.cs b/Packages/SOGameEvents/Runtime/GameEvent.cs index 51ddef1..fb08b76 100644 --- a/Packages/SOGameEvents/Runtime/GameEvent.cs +++ b/Packages/SOGameEvents/Runtime/GameEvent.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Text; using UnityEngine; namespace RaCoding.GameEvents @@ -24,5 +25,15 @@ public void UnregisterListener(IGameEventListener listener) if (eventListeners.Contains(listener)) eventListeners.Remove(listener); } + + public string EventListenersParentNames() + { + StringBuilder sb = new(); + for (int i = 0; i < eventListeners.Count; i++) + { + sb.Append(eventListeners[i].ParentName + " "); + } + return sb.ToString(); + } } } \ No newline at end of file diff --git a/Packages/SOGameEvents/Runtime/GameEventListener.cs b/Packages/SOGameEvents/Runtime/GameEventListener.cs index 4d48075..cf7d426 100644 --- a/Packages/SOGameEvents/Runtime/GameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/GameEventListener.cs @@ -5,10 +5,38 @@ namespace RaCoding.GameEvents { public abstract class GameEventListener : IGameEventListener { + private GameObject _parentGameObject; + public GameObject ParentGameObject + { + private get { return _parentGameObject; } + set + { + if (value != null && _parentGameObject == null) + { + _parentGameObject = value; + } + } + } + + public string ParentName + { + get + { + if (_parentGameObject != null) + { + return _parentGameObject.name; + } + return "Parent not set!"; + } + } + + // Constructor for ComponentGameEventListeners public GameEventListener() {} - public GameEventListener(IRegisterListener registerListener) + // Constructor for GameEventListener used as a field + public GameEventListener(IRegisterListener registerListener, GameObject parent) { + ParentGameObject = parent; registerListener.onEnableGameEventListener += Register; registerListener.onDisableGameEventListener += Unregister; } diff --git a/Packages/SOGameEvents/Runtime/IGameEventListener.cs b/Packages/SOGameEvents/Runtime/IGameEventListener.cs index 020b2e5..cba99b0 100644 --- a/Packages/SOGameEvents/Runtime/IGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/IGameEventListener.cs @@ -7,5 +7,10 @@ public interface IGameEventListener public void Unregister(); public void OnEventRaised(T t); + + public string ParentName + { + get; + } } } diff --git a/Packages/SOGameEvents/Runtime/Listener/AudioClipGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/AudioClipGameEventListener.cs index 548305d..70cb483 100644 --- a/Packages/SOGameEvents/Runtime/Listener/AudioClipGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/AudioClipGameEventListener.cs @@ -8,7 +8,7 @@ public class AudioClipGameEventListener : GameEventListener { public AudioClipGameEventListener() : base() {} - public AudioClipGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public AudioClipGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private AudioClipGameEvent audioClipEvent; [SerializeField] private AudioClipUnityEvent audioClipResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/BoolGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/BoolGameEventListener.cs index a5a8ac6..8d0361b 100644 --- a/Packages/SOGameEvents/Runtime/Listener/BoolGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/BoolGameEventListener.cs @@ -8,7 +8,7 @@ public class BoolGameEventListener : GameEventListener { public BoolGameEventListener() : base() {} - public BoolGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public BoolGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) {} [SerializeField] private BoolGameEvent boolEvent; [SerializeField] private BoolUnityEvent boolResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/ByteGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/ByteGameEventListener.cs index 1140da0..b9d5a6e 100644 --- a/Packages/SOGameEvents/Runtime/Listener/ByteGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/ByteGameEventListener.cs @@ -8,7 +8,7 @@ public class ByteGameEventListener : GameEventListener { public ByteGameEventListener() : base() {} - public ByteGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public ByteGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private ByteGameEvent byteEvent; [SerializeField] private ByteUnityEvent byteResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/CharGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/CharGameEventListener.cs index f713a57..4997232 100644 --- a/Packages/SOGameEvents/Runtime/Listener/CharGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/CharGameEventListener.cs @@ -8,7 +8,7 @@ public class CharGameEventListener : GameEventListener { public CharGameEventListener() : base() {} - public CharGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public CharGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private CharGameEvent charEvent; [SerializeField] private CharUnityEvent charResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/ColorGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/ColorGameEventListener.cs index c67476b..4c9fbca 100644 --- a/Packages/SOGameEvents/Runtime/Listener/ColorGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/ColorGameEventListener.cs @@ -8,7 +8,7 @@ public class ColorGameEventListener : GameEventListener { public ColorGameEventListener() : base() {} - public ColorGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public ColorGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private ColorGameEvent colorEvent; [SerializeField] private ColorUnityEvent colorResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/Component/ComponentGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/Component/ComponentGameEventListener.cs index 208c68c..42c3af1 100644 --- a/Packages/SOGameEvents/Runtime/Listener/Component/ComponentGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/Component/ComponentGameEventListener.cs @@ -1,5 +1,3 @@ -using System.Collections; -using System.Collections.Generic; using UnityEngine; namespace RaCoding.GameEvents @@ -8,6 +6,11 @@ namespace RaCoding.GameEvents { [SerializeField] private L listener = new(); + private void Awake() + { + listener.ParentGameObject = gameObject; + } + public void OnEnable() { listener.Register(); diff --git a/Packages/SOGameEvents/Runtime/Listener/DoubleGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/DoubleGameEventListener.cs index 5139a0f..28121e9 100644 --- a/Packages/SOGameEvents/Runtime/Listener/DoubleGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/DoubleGameEventListener.cs @@ -8,7 +8,7 @@ public class DoubleGameEventListener : GameEventListener { public DoubleGameEventListener() : base() { } - public DoubleGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public DoubleGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private DoubleGameEvent doubleEvent; [SerializeField] private DoubleUnityEvent doubleResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/EmptyGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/EmptyGameEventListener.cs index 203fd23..fff4bd5 100644 --- a/Packages/SOGameEvents/Runtime/Listener/EmptyGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/EmptyGameEventListener.cs @@ -8,7 +8,7 @@ public class EmptyGameEventListener : GameEventListener { public EmptyGameEventListener() : base() {} - public EmptyGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public EmptyGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private EmptyGameEvent emptyTypeEvent; [SerializeField] private EmptyUnityEvent emptyTypeResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/FloatGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/FloatGameEventListener.cs index ff7e5f6..005a04d 100644 --- a/Packages/SOGameEvents/Runtime/Listener/FloatGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/FloatGameEventListener.cs @@ -8,7 +8,7 @@ public class FloatGameEventListener : GameEventListener { public FloatGameEventListener() : base() {} - public FloatGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public FloatGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private FloatGameEvent floatEvent; [SerializeField] private FloatUnityEvent floatResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/GameObjectGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/GameObjectGameEventListener.cs index e5e2681..4e177ec 100644 --- a/Packages/SOGameEvents/Runtime/Listener/GameObjectGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/GameObjectGameEventListener.cs @@ -8,7 +8,7 @@ public class GameObjectGameEventListener : GameEventListener { public GameObjectGameEventListener() : base() {} - public GameObjectGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public GameObjectGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private GameObjectGameEvent gameObjectEvent; [SerializeField] private GameObjectUnityEvent gameObjectResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/IntGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/IntGameEventListener.cs index 414bfd3..47e4cd4 100644 --- a/Packages/SOGameEvents/Runtime/Listener/IntGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/IntGameEventListener.cs @@ -8,7 +8,7 @@ public class IntGameEventListener : GameEventListener { public IntGameEventListener() : base() {} - public IntGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public IntGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private IntGameEvent intEvent; [SerializeField] private IntUnityEvent intResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/LongGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/LongGameEventListener.cs index 6bf9855..e30e54b 100644 --- a/Packages/SOGameEvents/Runtime/Listener/LongGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/LongGameEventListener.cs @@ -8,7 +8,7 @@ public class LongGameEventListener : GameEventListener { public LongGameEventListener() : base() {} - public LongGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public LongGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private LongGameEvent longEvent; [SerializeField] private LongUnityEvent longResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/QuaternionGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/QuaternionGameEventListener.cs index 5660518..9f91edd 100644 --- a/Packages/SOGameEvents/Runtime/Listener/QuaternionGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/QuaternionGameEventListener.cs @@ -8,7 +8,7 @@ public class QuaternionGameEventListener : GameEventListener { public QuaternionGameEventListener() : base() { } - public QuaternionGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public QuaternionGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private QuaternionGameEvent quaternionEvent; [SerializeField] private QuaternionUnityEvent quaternionResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/SByteGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/SByteGameEventListener.cs index fde0f74..42e11c4 100644 --- a/Packages/SOGameEvents/Runtime/Listener/SByteGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/SByteGameEventListener.cs @@ -8,7 +8,7 @@ public class SByteGameEventListener : GameEventListener { public SByteGameEventListener() : base() { } - public SByteGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public SByteGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private SByteGameEvent sbyteEvent; [SerializeField] private SByteUnityEvent sbyteResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/ShortGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/ShortGameEventListener.cs index 77a179e..d537917 100644 --- a/Packages/SOGameEvents/Runtime/Listener/ShortGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/ShortGameEventListener.cs @@ -8,7 +8,7 @@ public class ShortGameEventListener : GameEventListener { public ShortGameEventListener() : base() {} - public ShortGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public ShortGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private ShortGameEvent shortEvent; [SerializeField] private ShortUnityEvent shortResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/StringGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/StringGameEventListener.cs index 2f75c1a..e95298d 100644 --- a/Packages/SOGameEvents/Runtime/Listener/StringGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/StringGameEventListener.cs @@ -8,7 +8,7 @@ public class StringGameEventListener : GameEventListener { public StringGameEventListener() : base() {} - public StringGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public StringGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private StringGameEvent stringEvent; [SerializeField] private StringUnityEvent stringResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/TransformGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/TransformGameEventListener.cs index d0ad8e1..741578a 100644 --- a/Packages/SOGameEvents/Runtime/Listener/TransformGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/TransformGameEventListener.cs @@ -8,7 +8,7 @@ public class TransformGameEventListener : GameEventListener { public TransformGameEventListener() : base() {} - public TransformGameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public TransformGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private TransformGameEvent transformEvent; [SerializeField] private TransformUnityEvent transformResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/UIntGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/UIntGameEventListener.cs index eb7ff8b..0f812d4 100644 --- a/Packages/SOGameEvents/Runtime/Listener/UIntGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/UIntGameEventListener.cs @@ -8,7 +8,7 @@ public class UIntGameEventListener : GameEventListener { public UIntGameEventListener() : base() { } - public UIntGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public UIntGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private UIntGameEvent uintEvent; [SerializeField] private UIntUnityEvent uintResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/UShortGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/UShortGameEventListener.cs index d8de5fd..ccd2f45 100644 --- a/Packages/SOGameEvents/Runtime/Listener/UShortGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/UShortGameEventListener.cs @@ -8,7 +8,7 @@ public class UShortGameEventListener : GameEventListener { public UShortGameEventListener() : base() { } - public UShortGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public UShortGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private UShortGameEvent ushortEvent; [SerializeField] private UShortUnityEvent ushortResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/Vector2GameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/Vector2GameEventListener.cs index 1e20c77..662e141 100644 --- a/Packages/SOGameEvents/Runtime/Listener/Vector2GameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/Vector2GameEventListener.cs @@ -8,7 +8,7 @@ public class Vector2GameEventListener : GameEventListener { public Vector2GameEventListener() : base() {} - public Vector2GameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public Vector2GameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private Vector2GameEvent vector2Event; [SerializeField] private Vector2UnityEvent vector2Response; diff --git a/Packages/SOGameEvents/Runtime/Listener/Vector2IntGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/Vector2IntGameEventListener.cs index 1494a7a..9dff0c0 100644 --- a/Packages/SOGameEvents/Runtime/Listener/Vector2IntGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/Vector2IntGameEventListener.cs @@ -8,7 +8,7 @@ public class Vector2IntGameEventListener : GameEventListener { public Vector2IntGameEventListener() : base() { } - public Vector2IntGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public Vector2IntGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private Vector2IntGameEvent vector2intEvent; [SerializeField] private Vector2IntUnityEvent vector2intResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/Vector3GameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/Vector3GameEventListener.cs index 6661495..7fb0b08 100644 --- a/Packages/SOGameEvents/Runtime/Listener/Vector3GameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/Vector3GameEventListener.cs @@ -8,7 +8,7 @@ public class Vector3GameEventListener : GameEventListener { public Vector3GameEventListener() : base() {} - public Vector3GameEventListener(IRegisterListener registerListener) : base(registerListener) {} + public Vector3GameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private Vector3GameEvent vector3Event; [SerializeField] private Vector3UnityEvent vector3Response; diff --git a/Packages/SOGameEvents/Runtime/Listener/Vector3IntGameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/Vector3IntGameEventListener.cs index 17f3975..1a6a1ce 100644 --- a/Packages/SOGameEvents/Runtime/Listener/Vector3IntGameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/Vector3IntGameEventListener.cs @@ -8,7 +8,7 @@ public class Vector3IntGameEventListener : GameEventListener { public Vector3IntGameEventListener() : base() { } - public Vector3IntGameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public Vector3IntGameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private Vector3IntGameEvent vector3intEvent; [SerializeField] private Vector3IntUnityEvent vector3intResponse; diff --git a/Packages/SOGameEvents/Runtime/Listener/Vector4GameEventListener.cs b/Packages/SOGameEvents/Runtime/Listener/Vector4GameEventListener.cs index 823d340..4fa2782 100644 --- a/Packages/SOGameEvents/Runtime/Listener/Vector4GameEventListener.cs +++ b/Packages/SOGameEvents/Runtime/Listener/Vector4GameEventListener.cs @@ -8,7 +8,7 @@ public class Vector4GameEventListener : GameEventListener { public Vector4GameEventListener() : base() { } - public Vector4GameEventListener(IRegisterListener registerListener) : base(registerListener) { } + public Vector4GameEventListener(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) { } [SerializeField] private Vector4GameEvent vector4Event; [SerializeField] private Vector4UnityEvent vector4Response; From a645f8f0fbbbc1dfb5b7d08c9fa9daacd523e938 Mon Sep 17 00:00:00 2001 From: Fireball19 Date: Tue, 31 Jan 2023 23:28:44 +0100 Subject: [PATCH 2/3] Add test assets --- Assets/GameEvent.asset | 14 ++++++++++++++ Assets/GameEvent.asset.meta | 8 ++++++++ Assets/Scenes/SampleScene.unity | 20 +++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 Assets/GameEvent.asset create mode 100644 Assets/GameEvent.asset.meta diff --git a/Assets/GameEvent.asset b/Assets/GameEvent.asset new file mode 100644 index 0000000..bf134fc --- /dev/null +++ b/Assets/GameEvent.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ea3836669f00d049a7098714c8138d5, type: 3} + m_Name: GameEvent + m_EditorClassIdentifier: diff --git a/Assets/GameEvent.asset.meta b/Assets/GameEvent.asset.meta new file mode 100644 index 0000000..adbfac3 --- /dev/null +++ b/Assets/GameEvent.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7187c85567cfef844bfbb3cd83e4fe6b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index a12fd93..3225f82 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -310,8 +310,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1999019338} + - component: {fileID: 1999019339} m_Layer: 0 - m_Name: Test + m_Name: GameEventListener m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -332,3 +333,20 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1999019339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999019336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b4fdc304c1568b44b9ea591bcaeb83d8, type: 3} + m_Name: + m_EditorClassIdentifier: + listener: + emptyTypeEvent: {fileID: 11400000, guid: 7187c85567cfef844bfbb3cd83e4fe6b, type: 2} + emptyTypeResponse: + m_PersistentCalls: + m_Calls: [] From 7b78e656a54cda882a83a81c1b6f60f8bd8a6c42 Mon Sep 17 00:00:00 2001 From: Fireball19 Date: Wed, 1 Feb 2023 17:44:40 +0100 Subject: [PATCH 3/3] Add editor window for auto creation of new gameevents --- Packages/SOGameEvents/Editor/Window.meta | 8 + .../Editor/Window/GameEventWindow.cs | 271 ++++++++++++++++++ .../Editor/Window/GameEventWindow.cs.meta | 11 + 3 files changed, 290 insertions(+) create mode 100644 Packages/SOGameEvents/Editor/Window.meta create mode 100644 Packages/SOGameEvents/Editor/Window/GameEventWindow.cs create mode 100644 Packages/SOGameEvents/Editor/Window/GameEventWindow.cs.meta diff --git a/Packages/SOGameEvents/Editor/Window.meta b/Packages/SOGameEvents/Editor/Window.meta new file mode 100644 index 0000000..7cd0adf --- /dev/null +++ b/Packages/SOGameEvents/Editor/Window.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66b425f879768084284e24f96e983465 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/SOGameEvents/Editor/Window/GameEventWindow.cs b/Packages/SOGameEvents/Editor/Window/GameEventWindow.cs new file mode 100644 index 0000000..db589dc --- /dev/null +++ b/Packages/SOGameEvents/Editor/Window/GameEventWindow.cs @@ -0,0 +1,271 @@ +using System; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace RaCoding.GameEvents +{ + public class GameEventWindow : EditorWindow + { + private static readonly string TAB = " "; + private static readonly string PACKAGE_NAMESPACE = "RaCoding.GameEvents"; + private static readonly string UNITYEVENT_CLASS_SUFFIX = "UnityEvent"; + private static readonly string GAMEEVENT_CLASS_SUFFIX = "GameEvent"; + private static readonly string GAMEEVENTLISTENER_CLASS_SUFFIX = "GameEventListener"; + private static readonly string COMPONENTGAMEEVENTLISTENER_CLASS_SUFFIX = "ComponentGameEventListener"; + private static readonly string GAMEEVENTEDITOR_CLASS_SUFFIX = "GameEventEditor"; + + private string _newNamespace = "RaCoding.GameEvents"; + private string _newType = "Sprite"; + private string _newTypeNamespace = "UnityEngine"; + + private bool _groupEnabled; + private bool _overrideExistingFiles = false; + + [MenuItem("Window/RaCoding/SO Game Event Creator")] + static void Init() + { + // Get existing open window or if none, make a new one: + var window = (GameEventWindow)EditorWindow.GetWindow(typeof(GameEventWindow)); + window.Show(); + } + + void OnGUI() + { + GUILayout.Label("Base Settings", EditorStyles.boldLabel); + _newNamespace = EditorGUILayout.TextField("Namespace", _newNamespace); + _newType = EditorGUILayout.TextField("Type", _newType); + _newTypeNamespace = EditorGUILayout.TextField("Type Namespace", _newTypeNamespace); + + _groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", _groupEnabled); + _overrideExistingFiles = EditorGUILayout.Toggle("Override existing files", _overrideExistingFiles); + EditorGUILayout.EndToggleGroup(); + + GUILayout.Space(10); + + if (GUILayout.Button("Generate")) + { + GenerateScripts(); + } + } + + private string GenerateClassNames(string suffix) + { + if (string.IsNullOrEmpty(_newType)) + { + throw new ArgumentException("Type can not be null or empty!"); + } + return _newType.First().ToString().ToUpper() + _newType[1..] + suffix; + } + + private string GenerateVariableNamesPrefix() + { + if (string.IsNullOrEmpty(_newType)) + { + throw new ArgumentException("Type can not be null or empty!"); + } + return _newType.First().ToString().ToLower() + _newType[1..]; + } + + private string GenerateClassPath(string className) + { + return "Assets/" + className + ".cs"; + } + + private void GenerateScripts() + { + Debug.Log("Generating scripts..."); + + // class names + string unityEventClassName = GenerateClassNames(UNITYEVENT_CLASS_SUFFIX); + string gameeventClassName = GenerateClassNames(GAMEEVENT_CLASS_SUFFIX); + string eventListenerClassName = GenerateClassNames(GAMEEVENTLISTENER_CLASS_SUFFIX); + string componentEventListenerClassName = GenerateClassNames(COMPONENTGAMEEVENTLISTENER_CLASS_SUFFIX); + string gameeventEditorClassName = GenerateClassNames(GAMEEVENTEDITOR_CLASS_SUFFIX); + + // class paths + string unityEventClassPath = GenerateClassPath(unityEventClassName); + string gameeventClassPath = GenerateClassPath(gameeventClassName); + string eventListenerClassPath = GenerateClassPath(eventListenerClassName); + string componentEventListenerClassPath = GenerateClassPath(componentEventListenerClassName); + string gameeventEditorClassPath = GenerateClassPath(gameeventEditorClassName); + + if (CheckFilesGeneration(new string[] {unityEventClassPath, gameeventClassPath, eventListenerClassPath, + componentEventListenerClassPath, gameeventEditorClassPath})) + { + GenerateUnityEvent(unityEventClassName, unityEventClassPath); + GenerateGameEvent(gameeventClassName, gameeventClassPath); + GenerateGameEventListener(eventListenerClassName, GenerateVariableNamesPrefix(), + unityEventClassName, gameeventClassName, eventListenerClassPath); + GenerateComponentGameEventListener(componentEventListenerClassName, + eventListenerClassName, componentEventListenerClassPath); + GenerateGameEventEditor(gameeventEditorClassName, gameeventEditorClassPath); + } + else + { + Debug.LogError("Could not generate files because they already exist!"); + } + + AssetDatabase.Refresh(); + } + + // returns true if files can be generated + private bool CheckFilesGeneration(string[] classPath) + { + bool doesFileExist; + for (int i = 0; i < classPath.Length; i++) + { + doesFileExist = File.Exists(classPath[i]); + if (doesFileExist == true && _overrideExistingFiles == false) + { + return false; + } + } + return true; + } + + private void GenerateUnityEvent(string className, string classPath) + { + Debug.Log("Writing UnityEvent classfile..."); + + using (StreamWriter outfile = new(classPath)) + { + outfile.WriteLine("using UnityEngine.Events;"); + if (string.IsNullOrEmpty(_newTypeNamespace) == false) + { + outfile.WriteLine("using " + _newTypeNamespace + ";"); + } + outfile.WriteLine(""); + outfile.WriteLine("namespace " + _newNamespace); + outfile.WriteLine("{"); + outfile.WriteLine(TAB + "[System.Serializable]"); + outfile.WriteLine(TAB + "public class " + className + " : UnityEvent<" + _newType + "> {}"); + outfile.WriteLine("}"); + } + } + + private void GenerateGameEvent(string className, string classPath) + { + Debug.Log("Writing GameEvent classfile..."); + + using (StreamWriter outfile = new(classPath)) + { + outfile.WriteLine("using UnityEngine;"); + if (string.IsNullOrEmpty(_newTypeNamespace) == false + && _newTypeNamespace != "UnityEngine") + { + outfile.WriteLine("using " + _newTypeNamespace + ";"); + } + if (_newNamespace != PACKAGE_NAMESPACE) + { + outfile.WriteLine("using RaCoding.GameEvents;"); + } + outfile.WriteLine(""); + outfile.WriteLine("namespace " + _newNamespace); + outfile.WriteLine("{"); + outfile.WriteLine(TAB + "[CreateAssetMenu(fileName = \"" + className + "\"," + + " menuName = \"RaCoding/GameEvent/Create new " + _newType + " game event\")]"); + outfile.WriteLine(TAB + "public class " + className + " : GameEvent<" + _newType + "> {}"); + outfile.WriteLine("}"); + } + } + + private void GenerateGameEventListener(string className, string variableNamePrefix, + string unityeventName, string gameeventName, string classPath) + { + Debug.Log("Writing GameEventListener classfile..."); + + using (StreamWriter outfile = new(classPath)) + { + outfile.WriteLine("using UnityEngine;"); + outfile.WriteLine("using UnityEngine.Events;"); + if (string.IsNullOrEmpty(_newTypeNamespace) == false + && _newTypeNamespace != "UnityEngine") + { + outfile.WriteLine("using " + _newTypeNamespace + ";"); + } + if (_newNamespace != PACKAGE_NAMESPACE) + { + outfile.WriteLine("using RaCoding.GameEvents;"); + } + outfile.WriteLine(""); + outfile.WriteLine("namespace " + _newNamespace); + outfile.WriteLine("{"); + outfile.WriteLine(TAB + "[System.Serializable]"); + outfile.WriteLine(TAB + "public class " + className + " : GameEventListener<" + _newType + ">"); + outfile.WriteLine(TAB + "{"); + outfile.WriteLine(TAB + TAB + "public " + className + "() : base() {}"); + outfile.WriteLine(""); + outfile.WriteLine(TAB + TAB + "public " + className + "(IRegisterListener registerListener, GameObject gameObject) : base(registerListener, gameObject) {}"); + outfile.WriteLine(""); + outfile.WriteLine(TAB + TAB + "[SerializeField] private " + gameeventName + " " + variableNamePrefix + "Event;"); + outfile.WriteLine(TAB + TAB + "[SerializeField] private " + unityeventName + " " + variableNamePrefix + "Response;"); + outfile.WriteLine(""); + outfile.WriteLine(TAB + TAB + "public override GameEvent<" + _newType + "> Event => " + variableNamePrefix + "Event; "); + outfile.WriteLine(TAB + TAB + "public override UnityEvent<" + _newType + "> Response => " + variableNamePrefix + "Response; "); + outfile.WriteLine(TAB + "}"); + outfile.WriteLine("}"); + } + } + + private void GenerateComponentGameEventListener(string className, string eventListenerClassName, string classPath) + { + Debug.Log("Writing ComponentGameEventListener classfile..."); + + using (StreamWriter outfile = new(classPath)) + { + outfile.WriteLine("using UnityEngine;"); + if (string.IsNullOrEmpty(_newTypeNamespace) == false + && _newTypeNamespace != "UnityEngine") + { + outfile.WriteLine("using " + _newTypeNamespace + ";"); + } + if (_newNamespace != PACKAGE_NAMESPACE) + { + outfile.WriteLine("using RaCoding.GameEvents;"); + } + outfile.WriteLine(""); + outfile.WriteLine("namespace " + _newNamespace); + outfile.WriteLine("{"); + outfile.WriteLine(TAB + "[AddComponentMenu(\"RaCoding/GameEvents/" + eventListenerClassName + "\")]"); + outfile.WriteLine(TAB + "public class " + className + " : ComponentGameEventListener<" + eventListenerClassName + ", " + _newType + "> {}"); + outfile.WriteLine("}"); + } + } + + private void GenerateGameEventEditor(string className, string classPath) + { + Debug.Log("Writing GameEventEditor classfile..."); + + using (StreamWriter outfile = new(classPath)) + { + outfile.WriteLine("using UnityEditor;"); + outfile.WriteLine("using UnityEngine;"); + if (string.IsNullOrEmpty(_newTypeNamespace) == false + && _newTypeNamespace != "UnityEngine") + { + outfile.WriteLine("using " + _newTypeNamespace + ";"); + } + if (_newNamespace != PACKAGE_NAMESPACE) + { + outfile.WriteLine("using RaCoding.GameEvents;"); + } + outfile.WriteLine(""); + outfile.WriteLine("namespace " + _newNamespace); + outfile.WriteLine("{"); + outfile.WriteLine(TAB + "[CustomEditor(typeof(GameEvent<" + _newType + ">), editorForChildClasses: true)]"); + outfile.WriteLine(TAB + "public class " + className + " : GameEventEditor<" + _newType + ">"); + outfile.WriteLine(TAB + "{"); + outfile.WriteLine(TAB + TAB + "public Object source;"); + outfile.WriteLine(""); + outfile.WriteLine(TAB + TAB + "protected override " + _newType + " GetValue()"); + outfile.WriteLine(TAB + TAB + "{"); + outfile.WriteLine(TAB + TAB + TAB + "return EditorGUILayout.ObjectField(source, typeof(Object), true) as " + _newType + ";"); + outfile.WriteLine(TAB + TAB + "}"); + outfile.WriteLine(TAB + "}"); + outfile.WriteLine("}"); + } + } + } +} diff --git a/Packages/SOGameEvents/Editor/Window/GameEventWindow.cs.meta b/Packages/SOGameEvents/Editor/Window/GameEventWindow.cs.meta new file mode 100644 index 0000000..95fba57 --- /dev/null +++ b/Packages/SOGameEvents/Editor/Window/GameEventWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c95137f817057944e9469eed4ee6ce33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: