From 5179d8818441ad630b48955ced635009f1085c79 Mon Sep 17 00:00:00 2001 From: michael <insominx@yahoo.com> Date: Tue, 26 Mar 2019 12:05:05 -0700 Subject: [PATCH] Added scriptable vars shared code and removed meta-less readme. --- README.md | 2 - Scriptable Variables.meta | 8 +++ .../AutomaticResettableResetter.cs | 35 +++++++++++ .../AutomaticResettableResetter.cs.meta | 13 ++++ Scriptable Variables/Events.meta | 10 ++++ .../Events/BooleanGameEvent.cs | 19 ++++++ .../Events/BooleanGameEvent.cs.meta | 13 ++++ Scriptable Variables/Events/Editor.meta | 10 ++++ .../Events/Editor/BooleanGameEventEditor.cs | 22 +++++++ .../Editor/BooleanGameEventEditor.cs.meta | 13 ++++ .../Events/Editor/FloatGameEventEditor.cs | 22 +++++++ .../Editor/FloatGameEventEditor.cs.meta | 13 ++++ .../Events/Editor/GameEventEditor.cs | 17 ++++++ .../Events/Editor/GameEventEditor.cs.meta | 13 ++++ .../Events/Editor/IntGameEventEditor.cs | 22 +++++++ .../Events/Editor/IntGameEventEditor.cs.meta | 13 ++++ .../Events/Editor/StringGameEventEditor.cs | 22 +++++++ .../Editor/StringGameEventEditor.cs.meta | 13 ++++ Scriptable Variables/Events/FloatGameEvent.cs | 8 +++ .../Events/FloatGameEvent.cs.meta | 13 ++++ Scriptable Variables/Events/GameEvent.cs | 31 ++++++++++ Scriptable Variables/Events/GameEvent.cs.meta | 13 ++++ Scriptable Variables/Events/IntGameEvent.cs | 8 +++ .../Events/IntGameEvent.cs.meta | 13 ++++ .../Events/StringGameEvent.cs | 8 +++ .../Events/StringGameEvent.cs.meta | 13 ++++ Scriptable Variables/Interfaces.meta | 10 ++++ Scriptable Variables/Interfaces/Resettable.cs | 8 +++ .../Interfaces/Resettable.cs.meta | 13 ++++ Scriptable Variables/Listeners.meta | 10 ++++ .../Listeners/BooleanGameEventListener.cs | 22 +++++++ .../BooleanGameEventListener.cs.meta | 13 ++++ .../Listeners/BooleanVariableListener.cs | 25 ++++++++ .../Listeners/BooleanVariableListener.cs.meta | 13 ++++ .../Listeners/FloatGameEventListener.cs | 22 +++++++ .../Listeners/FloatGameEventListener.cs.meta | 13 ++++ .../Listeners/FloatVariableListener.cs | 25 ++++++++ .../Listeners/FloatVariableListener.cs.meta | 13 ++++ .../Listeners/GameEventListener.cs | 57 ++++++++++++++++++ .../Listeners/GameEventListener.cs.meta | 13 ++++ .../Listeners/IntGameEventListener.cs | 22 +++++++ .../Listeners/IntGameEventListener.cs.meta | 13 ++++ .../Listeners/IntVariableListener.cs | 25 ++++++++ .../Listeners/IntVariableListener.cs.meta | 13 ++++ .../Listeners/ScriptableVariableListener.cs | 36 +++++++++++ .../ScriptableVariableListener.cs.meta | 13 ++++ .../Listeners/StringGameEventListener.cs | 22 +++++++ .../Listeners/StringGameEventListener.cs.meta | 13 ++++ .../Listeners/StringVariableListener.cs | 25 ++++++++ .../Listeners/StringVariableListener.cs.meta | 13 ++++ Scriptable Variables/Variables.meta | 10 ++++ .../Variables/Base Types.meta | 10 ++++ .../Variables/Base Types/BooleanVariable.cs | 21 +++++++ .../Base Types/BooleanVariable.cs.meta | 13 ++++ .../Variables/Base Types/FloatVariable.cs | 21 +++++++ .../Base Types/FloatVariable.cs.meta | 13 ++++ .../Variables/Base Types/IntVariable.cs | 21 +++++++ .../Variables/Base Types/IntVariable.cs.meta | 13 ++++ .../Base Types/ScriptableVariable.cs | 60 +++++++++++++++++++ .../Base Types/ScriptableVariable.cs.meta | 13 ++++ .../Variables/Base Types/StringVariable.cs | 21 +++++++ .../Base Types/StringVariable.cs.meta | 13 ++++ .../Variables/Reference Types.meta | 10 ++++ .../Variables/Reference Types/Editor.meta | 10 ++++ .../ReferenceBooleanVariableInspector.cs | 9 +++ .../ReferenceBooleanVariableInspector.cs.meta | 13 ++++ .../Editor/ReferenceFloatVariableInspector.cs | 9 +++ .../ReferenceFloatVariableInspector.cs.meta | 13 ++++ .../Editor/ReferenceIntVariableInspector.cs | 9 +++ .../ReferenceIntVariableInspector.cs.meta | 13 ++++ .../ReferenceScriptableVariableInspector.cs | 58 ++++++++++++++++++ ...ferenceScriptableVariableInspector.cs.meta | 13 ++++ .../ReferenceStringVariableInspector.cs | 9 +++ .../ReferenceStringVariableInspector.cs.meta | 13 ++++ .../ReferenceBooleanVariable.cs | 8 +++ .../ReferenceBooleanVariable.cs.meta | 13 ++++ .../Reference Types/ReferenceFloatVariable.cs | 8 +++ .../ReferenceFloatVariable.cs.meta | 13 ++++ .../Reference Types/ReferenceIntVariable.cs | 8 +++ .../ReferenceIntVariable.cs.meta | 13 ++++ .../ReferenceScriptableVariable.cs | 17 ++++++ .../ReferenceScriptableVariable.cs.meta | 13 ++++ .../ReferenceStringVariable.cs | 8 +++ .../ReferenceStringVariable.cs.meta | 13 ++++ 84 files changed, 1359 insertions(+), 2 deletions(-) delete mode 100644 README.md create mode 100644 Scriptable Variables.meta create mode 100644 Scriptable Variables/AutomaticResettableResetter.cs create mode 100644 Scriptable Variables/AutomaticResettableResetter.cs.meta create mode 100644 Scriptable Variables/Events.meta create mode 100644 Scriptable Variables/Events/BooleanGameEvent.cs create mode 100644 Scriptable Variables/Events/BooleanGameEvent.cs.meta create mode 100644 Scriptable Variables/Events/Editor.meta create mode 100644 Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs create mode 100644 Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs.meta create mode 100644 Scriptable Variables/Events/Editor/FloatGameEventEditor.cs create mode 100644 Scriptable Variables/Events/Editor/FloatGameEventEditor.cs.meta create mode 100644 Scriptable Variables/Events/Editor/GameEventEditor.cs create mode 100644 Scriptable Variables/Events/Editor/GameEventEditor.cs.meta create mode 100644 Scriptable Variables/Events/Editor/IntGameEventEditor.cs create mode 100644 Scriptable Variables/Events/Editor/IntGameEventEditor.cs.meta create mode 100644 Scriptable Variables/Events/Editor/StringGameEventEditor.cs create mode 100644 Scriptable Variables/Events/Editor/StringGameEventEditor.cs.meta create mode 100644 Scriptable Variables/Events/FloatGameEvent.cs create mode 100644 Scriptable Variables/Events/FloatGameEvent.cs.meta create mode 100644 Scriptable Variables/Events/GameEvent.cs create mode 100644 Scriptable Variables/Events/GameEvent.cs.meta create mode 100644 Scriptable Variables/Events/IntGameEvent.cs create mode 100644 Scriptable Variables/Events/IntGameEvent.cs.meta create mode 100644 Scriptable Variables/Events/StringGameEvent.cs create mode 100644 Scriptable Variables/Events/StringGameEvent.cs.meta create mode 100644 Scriptable Variables/Interfaces.meta create mode 100644 Scriptable Variables/Interfaces/Resettable.cs create mode 100644 Scriptable Variables/Interfaces/Resettable.cs.meta create mode 100644 Scriptable Variables/Listeners.meta create mode 100644 Scriptable Variables/Listeners/BooleanGameEventListener.cs create mode 100644 Scriptable Variables/Listeners/BooleanGameEventListener.cs.meta create mode 100644 Scriptable Variables/Listeners/BooleanVariableListener.cs create mode 100644 Scriptable Variables/Listeners/BooleanVariableListener.cs.meta create mode 100644 Scriptable Variables/Listeners/FloatGameEventListener.cs create mode 100644 Scriptable Variables/Listeners/FloatGameEventListener.cs.meta create mode 100644 Scriptable Variables/Listeners/FloatVariableListener.cs create mode 100644 Scriptable Variables/Listeners/FloatVariableListener.cs.meta create mode 100644 Scriptable Variables/Listeners/GameEventListener.cs create mode 100644 Scriptable Variables/Listeners/GameEventListener.cs.meta create mode 100644 Scriptable Variables/Listeners/IntGameEventListener.cs create mode 100644 Scriptable Variables/Listeners/IntGameEventListener.cs.meta create mode 100644 Scriptable Variables/Listeners/IntVariableListener.cs create mode 100644 Scriptable Variables/Listeners/IntVariableListener.cs.meta create mode 100644 Scriptable Variables/Listeners/ScriptableVariableListener.cs create mode 100644 Scriptable Variables/Listeners/ScriptableVariableListener.cs.meta create mode 100644 Scriptable Variables/Listeners/StringGameEventListener.cs create mode 100644 Scriptable Variables/Listeners/StringGameEventListener.cs.meta create mode 100644 Scriptable Variables/Listeners/StringVariableListener.cs create mode 100644 Scriptable Variables/Listeners/StringVariableListener.cs.meta create mode 100644 Scriptable Variables/Variables.meta create mode 100644 Scriptable Variables/Variables/Base Types.meta create mode 100644 Scriptable Variables/Variables/Base Types/BooleanVariable.cs create mode 100644 Scriptable Variables/Variables/Base Types/BooleanVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Base Types/FloatVariable.cs create mode 100644 Scriptable Variables/Variables/Base Types/FloatVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Base Types/IntVariable.cs create mode 100644 Scriptable Variables/Variables/Base Types/IntVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Base Types/ScriptableVariable.cs create mode 100644 Scriptable Variables/Variables/Base Types/ScriptableVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Base Types/StringVariable.cs create mode 100644 Scriptable Variables/Variables/Base Types/StringVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types.meta create mode 100644 Scriptable Variables/Variables/Reference Types/Editor.meta create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs create mode 100644 Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs.meta create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs.meta diff --git a/README.md b/README.md deleted file mode 100644 index 0b7169f..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# unity pm test - diff --git a/Scriptable Variables.meta b/Scriptable Variables.meta new file mode 100644 index 0000000..29e3754 --- /dev/null +++ b/Scriptable Variables.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 99f3c7ece40238e41bfcfb1a3123bc9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/AutomaticResettableResetter.cs b/Scriptable Variables/AutomaticResettableResetter.cs new file mode 100644 index 0000000..df295e8 --- /dev/null +++ b/Scriptable Variables/AutomaticResettableResetter.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Shared.ScriptableVariables { + // Automatically calls Reset() on any assigned Resettables on Start + // Useful for setting default values to ScriptableVariables on startup + public class AutomaticResettableResetter : MonoBehaviour { + [Tooltip("List of Objects that implement the Resettable interface to reset on Start")] + public List<Object> resettables = new List<Object>(); + + [Tooltip("Game Event to fire when all resettables have been reset")] + public GameEvent resetComplete; + + // --------------------------------------------------------------------------- + void OnValidate() { + // Remove any Objects in the list that don't implement the Resettable interface + for (var index = resettables.Count - 1; index >= 0; --index) { + if (!(resettables[index] is Resettable)) { + resettables.RemoveAt(index); + } + } + } + + // --------------------------------------------------------------------------- + void Start() { + for (var index = resettables.Count - 1; index >= 0; --index) { + var resettable = resettables[index] as Resettable; + resettable.Reset(); + } + if (resetComplete != null) { + resetComplete.Raise(); + } + } + } +} diff --git a/Scriptable Variables/AutomaticResettableResetter.cs.meta b/Scriptable Variables/AutomaticResettableResetter.cs.meta new file mode 100644 index 0000000..6ab671a --- /dev/null +++ b/Scriptable Variables/AutomaticResettableResetter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cf16b22a15bd12f41a3c1a8f532b26fb +timeCreated: 1510602115 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events.meta b/Scriptable Variables/Events.meta new file mode 100644 index 0000000..e664f16 --- /dev/null +++ b/Scriptable Variables/Events.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 483ff9c813faac44189347241e5939e6 +folderAsset: yes +timeCreated: 1510599414 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/BooleanGameEvent.cs b/Scriptable Variables/Events/BooleanGameEvent.cs new file mode 100644 index 0000000..799ab75 --- /dev/null +++ b/Scriptable Variables/Events/BooleanGameEvent.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // ScriptableVariable that decouples components firing and listening to game events that require a boolean parameter + [CreateAssetMenu(menuName = "Scriptable Objects/Events/Boolean Game Event")] + public class BooleanGameEvent : GameEvent<bool> { + //--------------------------------------------------------------------------- + [ContextMenu("Raise(true)")] + private void RaiseTrue() { + Raise(true); + } + + //--------------------------------------------------------------------------- + [ContextMenu("Raise(false)")] + private void RaiseFalse() { + Raise(false); + } + } +} diff --git a/Scriptable Variables/Events/BooleanGameEvent.cs.meta b/Scriptable Variables/Events/BooleanGameEvent.cs.meta new file mode 100644 index 0000000..d8d2f80 --- /dev/null +++ b/Scriptable Variables/Events/BooleanGameEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ff7d54b91183cc94297ede3be460e0d0 +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/Editor.meta b/Scriptable Variables/Events/Editor.meta new file mode 100644 index 0000000..eb02ced --- /dev/null +++ b/Scriptable Variables/Events/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c5fb57c8c826579458e26998f190b842 +folderAsset: yes +timeCreated: 1513206428 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs b/Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs new file mode 100644 index 0000000..86c1cac --- /dev/null +++ b/Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine; + +namespace Shared.ScriptableVariables { + //--------------------------------------------------------------------------- + [CustomEditor(typeof(BooleanGameEvent))] + public class BooleanGameEventEditor : Editor { + private bool testValue = false; + + //--------------------------------------------------------------------------- + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + EditorGUILayout.BeginHorizontal(); + testValue = EditorGUILayout.Toggle("Test Value", testValue); + if (GUILayout.Button("Fire Event")) { + ((BooleanGameEvent)target).Raise(testValue); + } + EditorGUILayout.EndHorizontal(); + } + } +} diff --git a/Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs.meta new file mode 100644 index 0000000..100b199 --- /dev/null +++ b/Scriptable Variables/Events/Editor/BooleanGameEventEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4cc2f4c2b9d6848418dda0f375a7f50f +timeCreated: 1513206436 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/Editor/FloatGameEventEditor.cs b/Scriptable Variables/Events/Editor/FloatGameEventEditor.cs new file mode 100644 index 0000000..864e318 --- /dev/null +++ b/Scriptable Variables/Events/Editor/FloatGameEventEditor.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine; + +namespace Shared.ScriptableVariables { + //--------------------------------------------------------------------------- + [CustomEditor(typeof(FloatGameEvent))] + public class FloatGameEventEditor : Editor { + private float testValue = 0.0f; + + //--------------------------------------------------------------------------- + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + EditorGUILayout.BeginHorizontal(); + testValue = EditorGUILayout.FloatField("Test Value", testValue); + if (GUILayout.Button("Fire Event")) { + ((FloatGameEvent)target).Raise(testValue); + } + EditorGUILayout.EndHorizontal(); + } + } +} diff --git a/Scriptable Variables/Events/Editor/FloatGameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/FloatGameEventEditor.cs.meta new file mode 100644 index 0000000..5fc14d7 --- /dev/null +++ b/Scriptable Variables/Events/Editor/FloatGameEventEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 55ad0db2d28d4484c8cc2c3193e9c2d3 +timeCreated: 1513206436 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/Editor/GameEventEditor.cs b/Scriptable Variables/Events/Editor/GameEventEditor.cs new file mode 100644 index 0000000..de7a6a2 --- /dev/null +++ b/Scriptable Variables/Events/Editor/GameEventEditor.cs @@ -0,0 +1,17 @@ +using UnityEditor; +using UnityEngine; + +namespace Shared.ScriptableVariables { + //--------------------------------------------------------------------------- + [CustomEditor(typeof(GameEvent))] + public class GameEventEditor : Editor { + //--------------------------------------------------------------------------- + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + if (GUILayout.Button("Fire Event")) { + ((GameEvent)target).Raise(); + } + } + } +} diff --git a/Scriptable Variables/Events/Editor/GameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/GameEventEditor.cs.meta new file mode 100644 index 0000000..8ab1d72 --- /dev/null +++ b/Scriptable Variables/Events/Editor/GameEventEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 88090feebd5266e4b8a497e0aeacb15a +timeCreated: 1513206436 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/Editor/IntGameEventEditor.cs b/Scriptable Variables/Events/Editor/IntGameEventEditor.cs new file mode 100644 index 0000000..3046342 --- /dev/null +++ b/Scriptable Variables/Events/Editor/IntGameEventEditor.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine; + +namespace Shared.ScriptableVariables { + //--------------------------------------------------------------------------- + [CustomEditor(typeof(IntGameEvent))] + public class IntGameEventEditor : Editor { + private int testValue = 0; + + //--------------------------------------------------------------------------- + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + EditorGUILayout.BeginHorizontal(); + testValue = EditorGUILayout.IntField("Test Value", testValue); + if (GUILayout.Button("Fire Event")) { + ((IntGameEvent)target).Raise(testValue); + } + EditorGUILayout.EndHorizontal(); + } + } +} diff --git a/Scriptable Variables/Events/Editor/IntGameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/IntGameEventEditor.cs.meta new file mode 100644 index 0000000..a00d18b --- /dev/null +++ b/Scriptable Variables/Events/Editor/IntGameEventEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 091b5244678bea24ab2a62e3849cb715 +timeCreated: 1513206436 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/Editor/StringGameEventEditor.cs b/Scriptable Variables/Events/Editor/StringGameEventEditor.cs new file mode 100644 index 0000000..1e94c71 --- /dev/null +++ b/Scriptable Variables/Events/Editor/StringGameEventEditor.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine; + +namespace Shared.ScriptableVariables { + //--------------------------------------------------------------------------- + [CustomEditor(typeof(StringGameEvent))] + public class StringGameEventEditor : Editor { + private string testValue; + + //--------------------------------------------------------------------------- + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + EditorGUILayout.BeginHorizontal(); + testValue = EditorGUILayout.TextField("Test Value", testValue); + if (GUILayout.Button("Fire Event")) { + ((StringGameEvent)target).Raise(testValue); + } + EditorGUILayout.EndHorizontal(); + } + } +} diff --git a/Scriptable Variables/Events/Editor/StringGameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/StringGameEventEditor.cs.meta new file mode 100644 index 0000000..c64881b --- /dev/null +++ b/Scriptable Variables/Events/Editor/StringGameEventEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5b14325ad63c61f468af93d960da8ec0 +timeCreated: 1513206436 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/FloatGameEvent.cs b/Scriptable Variables/Events/FloatGameEvent.cs new file mode 100644 index 0000000..f46f495 --- /dev/null +++ b/Scriptable Variables/Events/FloatGameEvent.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // ScriptableVariable that decouples components firing and listening to game events that require a float parameter + [CreateAssetMenu(menuName = "Scriptable Objects/Events/Float Game Event")] + public class FloatGameEvent : GameEvent<float> { + } +} diff --git a/Scriptable Variables/Events/FloatGameEvent.cs.meta b/Scriptable Variables/Events/FloatGameEvent.cs.meta new file mode 100644 index 0000000..b8bd367 --- /dev/null +++ b/Scriptable Variables/Events/FloatGameEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 548f989fcd91b734492e17b5b7a185fc +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/GameEvent.cs b/Scriptable Variables/Events/GameEvent.cs new file mode 100644 index 0000000..a47dcaf --- /dev/null +++ b/Scriptable Variables/Events/GameEvent.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // ScriptableVariable that decouples components firing and listening to game events + [CreateAssetMenu(menuName = "Scriptable Objects/Events/Game Event")] + public class GameEvent : ScriptableVariable { + public delegate void GameEventRaised(); + public event GameEventRaised OnRaised; + + //--------------------------------------------------------------------------- + [ContextMenu("Raise")] + public void Raise() { + if (OnRaised != null) { + OnRaised(); + } + } + } + + //--------------------------------------------------------------------------- + public abstract class GameEvent<T> : ScriptableVariable { + public delegate void GameEventRaised(T value); + public event GameEventRaised OnRaised; + + //--------------------------------------------------------------------------- + public void Raise(T value) { + if (OnRaised != null) { + OnRaised(value); + } + } + } +} diff --git a/Scriptable Variables/Events/GameEvent.cs.meta b/Scriptable Variables/Events/GameEvent.cs.meta new file mode 100644 index 0000000..a576a24 --- /dev/null +++ b/Scriptable Variables/Events/GameEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c1960bdf0074040469b1823b9228ac1b +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/IntGameEvent.cs b/Scriptable Variables/Events/IntGameEvent.cs new file mode 100644 index 0000000..fea804c --- /dev/null +++ b/Scriptable Variables/Events/IntGameEvent.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // ScriptableVariable that decouples components firing and listening to game events that require an int parameter + [CreateAssetMenu(menuName = "Scriptable Objects/Events/Int Game Event")] + public class IntGameEvent : GameEvent<int> { + } +} diff --git a/Scriptable Variables/Events/IntGameEvent.cs.meta b/Scriptable Variables/Events/IntGameEvent.cs.meta new file mode 100644 index 0000000..4bcf7f3 --- /dev/null +++ b/Scriptable Variables/Events/IntGameEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 898f8db1b01f0fa4987a99107325acbf +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Events/StringGameEvent.cs b/Scriptable Variables/Events/StringGameEvent.cs new file mode 100644 index 0000000..178b585 --- /dev/null +++ b/Scriptable Variables/Events/StringGameEvent.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // ScriptableVariable that decouples components firing and listening to game events that require a string parameter + [CreateAssetMenu(menuName = "Scriptable Objects/Events/String Game Event")] + public class StringGameEvent : GameEvent<string> { + } +} diff --git a/Scriptable Variables/Events/StringGameEvent.cs.meta b/Scriptable Variables/Events/StringGameEvent.cs.meta new file mode 100644 index 0000000..0adce0b --- /dev/null +++ b/Scriptable Variables/Events/StringGameEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d499e67a7f1c28e41b5dc652ff881d53 +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Interfaces.meta b/Scriptable Variables/Interfaces.meta new file mode 100644 index 0000000..c4c2626 --- /dev/null +++ b/Scriptable Variables/Interfaces.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 53525e1a16c954f4aa2e57af9f48c661 +folderAsset: yes +timeCreated: 1510599567 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Interfaces/Resettable.cs b/Scriptable Variables/Interfaces/Resettable.cs new file mode 100644 index 0000000..e18337e --- /dev/null +++ b/Scriptable Variables/Interfaces/Resettable.cs @@ -0,0 +1,8 @@ +namespace Shared.ScriptableVariables { + // Interface to allow a class to be able to be reset and define what that means + public interface Resettable { + //--------------------------------------------------------------------------- + // Define what it means to Reset + void Reset(); + } +} diff --git a/Scriptable Variables/Interfaces/Resettable.cs.meta b/Scriptable Variables/Interfaces/Resettable.cs.meta new file mode 100644 index 0000000..20f309c --- /dev/null +++ b/Scriptable Variables/Interfaces/Resettable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b829c0fd850917d41b53b46459690a17 +timeCreated: 1510599574 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners.meta b/Scriptable Variables/Listeners.meta new file mode 100644 index 0000000..1635af8 --- /dev/null +++ b/Scriptable Variables/Listeners.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 949b447effd31fe47834737e9344d527 +folderAsset: yes +timeCreated: 1513206410 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/BooleanGameEventListener.cs b/Scriptable Variables/Listeners/BooleanGameEventListener.cs new file mode 100644 index 0000000..36a63c5 --- /dev/null +++ b/Scriptable Variables/Listeners/BooleanGameEventListener.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + // Component to tie BooleanGameEvents to Unity's event system + public class BooleanGameEventListener : GameEventListener<bool> { + [System.Serializable] + public class BooleanUnityEvent : UnityEvent<bool> { } + + [Tooltip("The game event to listen to")] + public BooleanGameEvent eventToListenTo; + + [Tooltip("The UnityEvent to raise in response to the game event being raised")] + public BooleanUnityEvent response; + + //--------------------------------------------------------------------------- + protected override GameEvent<bool> GetGameEvent() { return eventToListenTo; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<bool> GetUnityEvent() { return response; } + } +} diff --git a/Scriptable Variables/Listeners/BooleanGameEventListener.cs.meta b/Scriptable Variables/Listeners/BooleanGameEventListener.cs.meta new file mode 100644 index 0000000..596e2e5 --- /dev/null +++ b/Scriptable Variables/Listeners/BooleanGameEventListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7f663866ee9d6174199e2824bb53ec3a +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/BooleanVariableListener.cs b/Scriptable Variables/Listeners/BooleanVariableListener.cs new file mode 100644 index 0000000..87dc5ac --- /dev/null +++ b/Scriptable Variables/Listeners/BooleanVariableListener.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + + /// <summary> + /// Used to trigger a UnityEvent in response to changes on a BooleanVariable + /// </summary> + public class BooleanVariableListener : ScriptableVariableListener<bool> { + [Tooltip("The ScriptableVariable to listen for changes")] + public BooleanVariable variable; + + [System.Serializable] + public class ChangedUnityEvent : UnityEvent<bool> { } + + [Tooltip("The UnityEvent that gets triggered when the variable changes value")] + public ChangedUnityEvent OnValueChangedEvent; + + //--------------------------------------------------------------------------- + protected override ScriptableVariable<bool> GetScriptableVariable() { return variable; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<bool> GetUnityEvent() { return OnValueChangedEvent; } + } +} diff --git a/Scriptable Variables/Listeners/BooleanVariableListener.cs.meta b/Scriptable Variables/Listeners/BooleanVariableListener.cs.meta new file mode 100644 index 0000000..809d0c7 --- /dev/null +++ b/Scriptable Variables/Listeners/BooleanVariableListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: db17a8cbe6e4ff74ebe6f8c252162527 +timeCreated: 1513208270 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/FloatGameEventListener.cs b/Scriptable Variables/Listeners/FloatGameEventListener.cs new file mode 100644 index 0000000..c98ee59 --- /dev/null +++ b/Scriptable Variables/Listeners/FloatGameEventListener.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + // Component to tie FloatGameEvents to Unity's event system + public class FloatGameEventListener : GameEventListener<float> { + [System.Serializable] + public class FloatUnityEvent : UnityEvent<float> { } + + [Tooltip("The game event to listen to")] + public FloatGameEvent eventToListenTo; + + [Tooltip("The UnityEvent to raise in response to the game event being raised")] + public FloatUnityEvent response; + + //--------------------------------------------------------------------------- + protected override GameEvent<float> GetGameEvent() { return eventToListenTo; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<float> GetUnityEvent() { return response; } + } +} diff --git a/Scriptable Variables/Listeners/FloatGameEventListener.cs.meta b/Scriptable Variables/Listeners/FloatGameEventListener.cs.meta new file mode 100644 index 0000000..88310ca --- /dev/null +++ b/Scriptable Variables/Listeners/FloatGameEventListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1cc863298f8099f4ea1cbb4e0701bf2e +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/FloatVariableListener.cs b/Scriptable Variables/Listeners/FloatVariableListener.cs new file mode 100644 index 0000000..bc8afc8 --- /dev/null +++ b/Scriptable Variables/Listeners/FloatVariableListener.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + + /// <summary> + /// Used to trigger a UnityEvent in response to changes on a FloatVariable + /// </summary> + public class FloatVariableListener : ScriptableVariableListener<float> { + [Tooltip("The ScriptableVariable to listen for changes")] + public FloatVariable variable; + + [System.Serializable] + public class ChangedUnityEvent : UnityEvent<float> { } + + [Tooltip("The UnityEvent that gets triggered when the variable changes value")] + public ChangedUnityEvent OnValueChangedEvent; + + //--------------------------------------------------------------------------- + protected override ScriptableVariable<float> GetScriptableVariable() { return variable; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<float> GetUnityEvent() { return OnValueChangedEvent; } + } +} diff --git a/Scriptable Variables/Listeners/FloatVariableListener.cs.meta b/Scriptable Variables/Listeners/FloatVariableListener.cs.meta new file mode 100644 index 0000000..da7a849 --- /dev/null +++ b/Scriptable Variables/Listeners/FloatVariableListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a8394c2c1178b484db494d974b6096fc +timeCreated: 1513208270 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/GameEventListener.cs b/Scriptable Variables/Listeners/GameEventListener.cs new file mode 100644 index 0000000..1c3e7e8 --- /dev/null +++ b/Scriptable Variables/Listeners/GameEventListener.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + // Component to tie GameEvents to Unity's event system + public class GameEventListener : MonoBehaviour { + [Tooltip("The game event to listen to")] + public GameEvent eventToListenTo; + + [Tooltip("The UnityEvent to raise in response to the game event being raised")] + public UnityEvent response; + + //--------------------------------------------------------------------------- + void OnEnable() { + eventToListenTo.OnRaised += OnEventRaised; + } + + //--------------------------------------------------------------------------- + void OnDisable() { + eventToListenTo.OnRaised -= OnEventRaised; + } + + //--------------------------------------------------------------------------- + public virtual void OnEventRaised() { + if (response != null) { + response.Invoke(); + } + } + } + + //--------------------------------------------------------------------------- + public abstract class GameEventListener<T> : MonoBehaviour { + //--------------------------------------------------------------------------- + protected abstract GameEvent<T> GetGameEvent(); + + //--------------------------------------------------------------------------- + protected abstract UnityEvent<T> GetUnityEvent(); + + //--------------------------------------------------------------------------- + void OnEnable() { + GetGameEvent().OnRaised += OnEventRaised; + } + + //--------------------------------------------------------------------------- + void OnDisable() { + GetGameEvent().OnRaised -= OnEventRaised; + } + + //--------------------------------------------------------------------------- + public virtual void OnEventRaised(T value) { + var unityEvent = GetUnityEvent(); + if (unityEvent != null) { + unityEvent.Invoke(value); + } + } + } +} diff --git a/Scriptable Variables/Listeners/GameEventListener.cs.meta b/Scriptable Variables/Listeners/GameEventListener.cs.meta new file mode 100644 index 0000000..46d0888 --- /dev/null +++ b/Scriptable Variables/Listeners/GameEventListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 991b72107ef95af46937ebdd06290da8 +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/IntGameEventListener.cs b/Scriptable Variables/Listeners/IntGameEventListener.cs new file mode 100644 index 0000000..c6da58d --- /dev/null +++ b/Scriptable Variables/Listeners/IntGameEventListener.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + // Component to tie IntGameEvents to Unity's event system + public class IntGameEventListener : GameEventListener<int> { + [System.Serializable] + public class IntUnityEvent : UnityEvent<int> { } + + [Tooltip("The game event to listen to")] + public IntGameEvent eventToListenTo; + + [Tooltip("The UnityEvent to raise in response to the game event being raised")] + public IntUnityEvent response; + + //--------------------------------------------------------------------------- + protected override GameEvent<int> GetGameEvent() { return eventToListenTo; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<int> GetUnityEvent() { return response; } + } +} diff --git a/Scriptable Variables/Listeners/IntGameEventListener.cs.meta b/Scriptable Variables/Listeners/IntGameEventListener.cs.meta new file mode 100644 index 0000000..9936bda --- /dev/null +++ b/Scriptable Variables/Listeners/IntGameEventListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 75a82ff72a4ae704e9821e1403841b7c +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/IntVariableListener.cs b/Scriptable Variables/Listeners/IntVariableListener.cs new file mode 100644 index 0000000..dcaf622 --- /dev/null +++ b/Scriptable Variables/Listeners/IntVariableListener.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + + /// <summary> + /// Used to trigger a UnityEvent in response to changes on a IntVariable + /// </summary> + public class IntVariableListener : ScriptableVariableListener<int> { + [Tooltip("The ScriptableVariable to listen for changes")] + public IntVariable variable; + + [System.Serializable] + public class ChangedUnityEvent : UnityEvent<int> { } + + [Tooltip("The UnityEvent that gets triggered when the variable changes value")] + public ChangedUnityEvent OnValueChangedEvent; + + //--------------------------------------------------------------------------- + protected override ScriptableVariable<int> GetScriptableVariable() { return variable; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<int> GetUnityEvent() { return OnValueChangedEvent; } + } +} diff --git a/Scriptable Variables/Listeners/IntVariableListener.cs.meta b/Scriptable Variables/Listeners/IntVariableListener.cs.meta new file mode 100644 index 0000000..d2a2682 --- /dev/null +++ b/Scriptable Variables/Listeners/IntVariableListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ab4732b165c21ea45ae84bebc9d81f4a +timeCreated: 1513208270 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/ScriptableVariableListener.cs b/Scriptable Variables/Listeners/ScriptableVariableListener.cs new file mode 100644 index 0000000..d977e3b --- /dev/null +++ b/Scriptable Variables/Listeners/ScriptableVariableListener.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + /// <summary> + /// Used to trigger a UnityEvent in response to changes on a ScriptableVariable. + /// </summary> + //--------------------------------------------------------------------------- + public abstract class ScriptableVariableListener<T> : MonoBehaviour { + + //--------------------------------------------------------------------------- + protected abstract ScriptableVariable<T> GetScriptableVariable(); + + //--------------------------------------------------------------------------- + protected abstract UnityEvent<T> GetUnityEvent(); + + //--------------------------------------------------------------------------- + void OnEnable() { + GetScriptableVariable().OnValueChanged += OnValueChanged; + } + + //--------------------------------------------------------------------------- + void OnDisable() { + GetScriptableVariable().OnValueChanged -= OnValueChanged; + } + + //--------------------------------------------------------------------------- + private void OnValueChanged() { + var unityEvent = GetUnityEvent(); + var scriptableVariable = GetScriptableVariable(); + if (unityEvent != null) { + unityEvent.Invoke(scriptableVariable.Value); + } + } + } +} diff --git a/Scriptable Variables/Listeners/ScriptableVariableListener.cs.meta b/Scriptable Variables/Listeners/ScriptableVariableListener.cs.meta new file mode 100644 index 0000000..845702b --- /dev/null +++ b/Scriptable Variables/Listeners/ScriptableVariableListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ded5f8a11a2a71441b9961190e69544f +timeCreated: 1513208270 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/StringGameEventListener.cs b/Scriptable Variables/Listeners/StringGameEventListener.cs new file mode 100644 index 0000000..9a86b2d --- /dev/null +++ b/Scriptable Variables/Listeners/StringGameEventListener.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + // Component to tie StringGameEvents to Unity's event system + public class StringGameEventListener : GameEventListener<string> { + [System.Serializable] + public class StringUnityEvent : UnityEvent<string> { } + + [Tooltip("The game event to listen to")] + public StringGameEvent eventToListenTo; + + [Tooltip("The UnityEvent to raise in response to the game event being raised")] + public StringUnityEvent response; + + //--------------------------------------------------------------------------- + protected override GameEvent<string> GetGameEvent() { return eventToListenTo; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<string> GetUnityEvent() { return response; } + } +} diff --git a/Scriptable Variables/Listeners/StringGameEventListener.cs.meta b/Scriptable Variables/Listeners/StringGameEventListener.cs.meta new file mode 100644 index 0000000..f2e324a --- /dev/null +++ b/Scriptable Variables/Listeners/StringGameEventListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ace966faabda0734887c2cb816d27c30 +timeCreated: 1510599448 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Listeners/StringVariableListener.cs b/Scriptable Variables/Listeners/StringVariableListener.cs new file mode 100644 index 0000000..416b67f --- /dev/null +++ b/Scriptable Variables/Listeners/StringVariableListener.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Shared.ScriptableVariables { + + /// <summary> + /// Used to trigger a UnityEvent in response to changes on a StringVariable + /// </summary> + public class StringVariableListener : ScriptableVariableListener<string> { + [Tooltip("The ScriptableVariable to listen for changes")] + public StringVariable variable; + + [System.Serializable] + public class ChangedUnityEvent : UnityEvent<string> { } + + [Tooltip("The UnityEvent that gets triggered when the variable changes value")] + public ChangedUnityEvent OnValueChangedEvent; + + //--------------------------------------------------------------------------- + protected override ScriptableVariable<string> GetScriptableVariable() { return variable; } + + //--------------------------------------------------------------------------- + protected override UnityEvent<string> GetUnityEvent() { return OnValueChangedEvent; } + } +} diff --git a/Scriptable Variables/Listeners/StringVariableListener.cs.meta b/Scriptable Variables/Listeners/StringVariableListener.cs.meta new file mode 100644 index 0000000..24a12ab --- /dev/null +++ b/Scriptable Variables/Listeners/StringVariableListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e6c4b70e919c94147b49f020dd8baa4f +timeCreated: 1513208270 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables.meta b/Scriptable Variables/Variables.meta new file mode 100644 index 0000000..1064394 --- /dev/null +++ b/Scriptable Variables/Variables.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 199e8033ab0036d4094976417900bbd0 +folderAsset: yes +timeCreated: 1510599420 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Base Types.meta b/Scriptable Variables/Variables/Base Types.meta new file mode 100644 index 0000000..d5cf984 --- /dev/null +++ b/Scriptable Variables/Variables/Base Types.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3aa26c94f73caf643b84e8e086b5be8a +folderAsset: yes +timeCreated: 1510599712 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Base Types/BooleanVariable.cs b/Scriptable Variables/Variables/Base Types/BooleanVariable.cs new file mode 100644 index 0000000..ebb3a8d --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/BooleanVariable.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A boolean value to share across components, scenes, and prefabs + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Boolean")] + public class BooleanVariable : ScriptableVariable<bool> { + //--------------------------------------------------------------------------- + [ContextMenu("Reset To Default Value")] + public void ContextMenuReset() { + Reset(); + } + } + +#if UNITY_EDITOR + //----------------------------------------------------------------------------- + [UnityEditor.CustomEditor(typeof(BooleanVariable))] + [UnityEditor.CanEditMultipleObjects] + public class BooleanScriptableVariableEditor : BooleanVariable.BaseScriptableVariableEditor { + } +#endif +} diff --git a/Scriptable Variables/Variables/Base Types/BooleanVariable.cs.meta b/Scriptable Variables/Variables/Base Types/BooleanVariable.cs.meta new file mode 100644 index 0000000..9da389d --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/BooleanVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6174914c1d2a75f44afcf16722f7ddbb +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Base Types/FloatVariable.cs b/Scriptable Variables/Variables/Base Types/FloatVariable.cs new file mode 100644 index 0000000..5defc9f --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/FloatVariable.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A float value to share across components, scenes, and prefabs + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Float")] + public class FloatVariable : ScriptableVariable<float> { + //--------------------------------------------------------------------------- + [ContextMenu("Reset To Default Value")] + public void ContextMenuReset() { + Reset(); + } + } + +#if UNITY_EDITOR + //----------------------------------------------------------------------------- + [UnityEditor.CustomEditor(typeof(FloatVariable))] + [UnityEditor.CanEditMultipleObjects] + public class FloatScriptableVariableEditor : FloatVariable.BaseScriptableVariableEditor { + } +#endif +} diff --git a/Scriptable Variables/Variables/Base Types/FloatVariable.cs.meta b/Scriptable Variables/Variables/Base Types/FloatVariable.cs.meta new file mode 100644 index 0000000..2658199 --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/FloatVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7d7e88b3e41ece54596c648435a09398 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Base Types/IntVariable.cs b/Scriptable Variables/Variables/Base Types/IntVariable.cs new file mode 100644 index 0000000..cf13273 --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/IntVariable.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // An int value to share across components, scenes, and prefabs + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Int")] + public class IntVariable : ScriptableVariable<int> { + //--------------------------------------------------------------------------- + [ContextMenu("Reset To Default Value")] + public void ContextMenuReset() { + Reset(); + } + } + +#if UNITY_EDITOR + //----------------------------------------------------------------------------- + [UnityEditor.CustomEditor(typeof(IntVariable))] + [UnityEditor.CanEditMultipleObjects] + public class IntScriptableVariableEditor : IntVariable.BaseScriptableVariableEditor { + } +#endif +} diff --git a/Scriptable Variables/Variables/Base Types/IntVariable.cs.meta b/Scriptable Variables/Variables/Base Types/IntVariable.cs.meta new file mode 100644 index 0000000..2d7d6a5 --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/IntVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 77b835ad455148249a89aef1915debf4 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Base Types/ScriptableVariable.cs b/Scriptable Variables/Variables/Base Types/ScriptableVariable.cs new file mode 100644 index 0000000..59162d2 --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/ScriptableVariable.cs @@ -0,0 +1,60 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + //--------------------------------------------------------------------------- + // Base class for Scriptable Objects to share across components, scenes, and prefabs + public abstract class ScriptableVariable : ScriptableObject { + [TextArea] + public string description; + } + + //--------------------------------------------------------------------------- + // Base class for Scriptable Objects that represent a single variable to share across components, scenes, and prefabs + public abstract class ScriptableVariable<T> : ScriptableVariable, Resettable { + [Tooltip("The value of the variable")] + [SerializeField] + private T value; + + [Tooltip("The default value of the variable to go back to on Reset")] + public T defaultValue; + + public delegate void ValueChangeHandler(); + public event ValueChangeHandler OnValueChanged; + + //--------------------------------------------------------------------------- + public T Value { + get { return value; } + set { + if ((value == null && this.value != null) || (value != null && !value.Equals(this.value))) { + this.value = value; + if (OnValueChanged != null) { + OnValueChanged.Invoke(); + } + } + } + } + + //--------------------------------------------------------------------------- + public void Reset() { + Value = defaultValue; + } + +#if UNITY_EDITOR + //----------------------------------------------------------------------------- + //Base class for custom editors which expose the Property of ScriptableVariables + public class BaseScriptableVariableEditor : UnityEditor.Editor { + public override void OnInspectorGUI() { + UnityEditor.EditorGUI.BeginChangeCheck(); + base.OnInspectorGUI(); + if (UnityEditor.EditorGUI.EndChangeCheck()) { + var scriptableVariable = target as ScriptableVariable<T>; + if (scriptableVariable.OnValueChanged != null) { + scriptableVariable.OnValueChanged.Invoke(); + } + } + } + } +#endif + + } +} diff --git a/Scriptable Variables/Variables/Base Types/ScriptableVariable.cs.meta b/Scriptable Variables/Variables/Base Types/ScriptableVariable.cs.meta new file mode 100644 index 0000000..8800472 --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/ScriptableVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 046df9445da2fda48b3d1f8d84047b14 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Base Types/StringVariable.cs b/Scriptable Variables/Variables/Base Types/StringVariable.cs new file mode 100644 index 0000000..3d959db --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/StringVariable.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A string value to share across components, scenes, and prefabs + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/String")] + public class StringVariable : ScriptableVariable<string> { + //--------------------------------------------------------------------------- + [ContextMenu("Reset To Default Value")] + public void ContextMenuReset() { + Reset(); + } + } + +#if UNITY_EDITOR + //----------------------------------------------------------------------------- + [UnityEditor.CustomEditor(typeof(StringVariable))] + [UnityEditor.CanEditMultipleObjects] + public class StringScriptableVariableEditor : StringVariable.BaseScriptableVariableEditor { + } +#endif +} diff --git a/Scriptable Variables/Variables/Base Types/StringVariable.cs.meta b/Scriptable Variables/Variables/Base Types/StringVariable.cs.meta new file mode 100644 index 0000000..17e4c6c --- /dev/null +++ b/Scriptable Variables/Variables/Base Types/StringVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d0b3993ca7cbd0e459f217e13ea06b66 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types.meta b/Scriptable Variables/Variables/Reference Types.meta new file mode 100644 index 0000000..068fe28 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ddca758e9621a174280f922c14a157f7 +folderAsset: yes +timeCreated: 1510599733 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/Editor.meta b/Scriptable Variables/Variables/Reference Types/Editor.meta new file mode 100644 index 0000000..a0dc2b4 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fff3d06e72902f446817e50679685a41 +folderAsset: yes +timeCreated: 1510600555 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs new file mode 100644 index 0000000..60dbfd6 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace Shared.ScriptableVariables { + // A custom Inspector Editor for ReferenceBooleanVariables + [CustomEditor(typeof(ReferenceBooleanVariable))] + [CanEditMultipleObjects] + public class ReferenceBooleanVariableInspector : ReferenceScriptableVariableInspector { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs.meta b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs.meta new file mode 100644 index 0000000..726f8b4 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceBooleanVariableInspector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 46ec3998332a3a84682c6040a4185138 +timeCreated: 1510601506 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs new file mode 100644 index 0000000..0264c9a --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace Shared.ScriptableVariables { + // A custom Inspector Editor for ReferenceFloatVariables + [CustomEditor(typeof(ReferenceFloatVariable))] + [CanEditMultipleObjects] + public class ReferenceFloatVariableInspector : ReferenceScriptableVariableInspector { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs.meta b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs.meta new file mode 100644 index 0000000..966aff8 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceFloatVariableInspector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fe01a7488e400f7439f0a7c65d6b1726 +timeCreated: 1510601506 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs new file mode 100644 index 0000000..d9f9e9e --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace Shared.ScriptableVariables { + // A custom Inspector Editor for ReferenceIntVariables + [CustomEditor(typeof(ReferenceIntVariable))] + [CanEditMultipleObjects] + public class ReferenceIntVariableInspector : ReferenceScriptableVariableInspector { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs.meta b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs.meta new file mode 100644 index 0000000..49bb566 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceIntVariableInspector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cc52a5deb1a87ce41a657ab42cd21cca +timeCreated: 1510601506 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs new file mode 100644 index 0000000..94c531a --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs @@ -0,0 +1,58 @@ +using UnityEditor; +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A custom Inspector Editor for ReferenceStringVariables + public class ReferenceScriptableVariableInspector : Editor { + SerializedProperty useConstant; + SerializedProperty constantValue; + SerializedProperty referenceValue; + + // --------------------------------------------------------------------------- + void OnEnable() { + useConstant = serializedObject.FindProperty("useConstant"); + constantValue = serializedObject.FindProperty("constantValue"); + referenceValue = serializedObject.FindProperty("referenceValue"); + } + + // --------------------------------------------------------------------------- + public override void OnInspectorGUI() { + serializedObject.Update(); + + // Show the currently active value type (constant or reference) + if (useConstant.boolValue) { + EditorGUILayout.PropertyField(constantValue); + } + else { + EditorGUILayout.PropertyField(referenceValue); + } + + // Setup right click to switch between the active value type + var labelRect = GUILayoutUtility.GetLastRect(); + if (GUI.Button(labelRect, GUIContent.none, GUIStyle.none) && Event.current.button == 1) { + var menu = new GenericMenu(); + if (useConstant.boolValue) { + menu.AddItem(new GUIContent("Use Reference Value"), false, UseReferenceValue); + } + else { + menu.AddItem(new GUIContent("Use Constant Value"), false, UseConstantValue); + } + menu.ShowAsContext(); + } + + serializedObject.ApplyModifiedProperties(); + } + + //--------------------------------------------------------------------------- + private void UseReferenceValue() { + useConstant.boolValue = false; + serializedObject.ApplyModifiedProperties(); + } + + //--------------------------------------------------------------------------- + private void UseConstantValue() { + useConstant.boolValue = true; + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs.meta b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs.meta new file mode 100644 index 0000000..0da9b0c --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceScriptableVariableInspector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8a0379305c24f1f4fba92dd1faee66af +timeCreated: 1510601506 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs new file mode 100644 index 0000000..03ff023 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace Shared.ScriptableVariables { + // A custom Inspector Editor for ReferenceStringVariables + [CustomEditor(typeof(ReferenceStringVariable))] + [CanEditMultipleObjects] + public class ReferenceStringVariableInspector : ReferenceScriptableVariableInspector { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs.meta b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs.meta new file mode 100644 index 0000000..0f083e6 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/Editor/ReferenceStringVariableInspector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b640fb82fd6813e40b5d8ed19aa1e9f6 +timeCreated: 1510601506 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs new file mode 100644 index 0000000..e0151fb --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A reference to a boolean value to share across components, scenes, and prefabs that can be overridden to a constant different value + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Reference/Boolean")] + public class ReferenceBooleanVariable : ReferenceScriptableVariable<BooleanVariable, bool> { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs.meta new file mode 100644 index 0000000..13f24f4 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceBooleanVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: dc11cb8fa12bce349a901887a47e3cd1 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs new file mode 100644 index 0000000..67076e6 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A reference to a float value to share across components, scenes, and prefabs that can be overridden to a constant different value + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Reference/Float")] + public class ReferenceFloatVariable : ReferenceScriptableVariable<FloatVariable, float> { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs.meta new file mode 100644 index 0000000..a77b408 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceFloatVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0684b8ae3b58fd446b31ca3f0369dd7c +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs new file mode 100644 index 0000000..7d91d8d --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A reference to an int value to share across components, scenes, and prefabs that can be overridden to a constant different value + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Reference/Int")] + public class ReferenceIntVariable : ReferenceScriptableVariable<IntVariable, int> { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs.meta new file mode 100644 index 0000000..8ba3344 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceIntVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 62673a73de96a294cb4c8729f0a38d22 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs new file mode 100644 index 0000000..a8761b0 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A reference to a boolean value to share across components, scenes, and prefabs that can be overridden to a constant different value + public class ReferenceScriptableVariable<TScriptableVariable, TValueType> : ScriptableVariable where TScriptableVariable : ScriptableVariable<TValueType> { + [Tooltip("Whether to use the referenced value or a constant value")] + public bool useConstant; + + [Tooltip("An override constant value to use instead of the reference value")] + public TValueType constantValue; + + [Tooltip("The variable this component is referencing")] + public TScriptableVariable referenceValue; + + public TValueType Value { get { return useConstant ? constantValue : referenceValue.Value; } set { referenceValue.Value = value; } } + } +} diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs.meta new file mode 100644 index 0000000..f14f4ec --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceScriptableVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 036ed80159a9c6340a57b5ab8830d4b6 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs new file mode 100644 index 0000000..6d53f41 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace Shared.ScriptableVariables { + // A reference to a string value to share across components, scenes, and prefabs that can be overridden to a constant different value + [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Reference/String")] + public class ReferenceStringVariable : ReferenceScriptableVariable<StringVariable, string> { + } +} diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs.meta new file mode 100644 index 0000000..74ffa66 --- /dev/null +++ b/Scriptable Variables/Variables/Reference Types/ReferenceStringVariable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 37c1a078c5908a54d9b514dcd4c35db1 +timeCreated: 1510599427 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- GitLab