From 0c45134ab0a9bc797fb2a53d103661d979ff5535 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Wed, 20 Jan 2021 20:16:02 +0200 Subject: [PATCH 01/26] Remove mutable object func --- Assets/Runtime/MutableObjects.meta | 8 - Assets/Runtime/MutableObjects/Bool.meta | 3 - .../MutableObjects/Bool/MutableBool.cs | 19 - .../MutableObjects/Bool/MutableBool.cs.meta | 3 - Assets/Runtime/MutableObjects/Float.meta | 3 - .../MutableObjects/Float/MutableFloat.cs | 19 - .../MutableObjects/Float/MutableFloat.cs.meta | 3 - Assets/Runtime/MutableObjects/Generic.meta | 3 - .../MutableObjects/Generic/IMutableObject.cs | 15 - .../Generic/IMutableObject.cs.meta | 3 - .../MutableObjects/Generic/MutableObject.cs | 25 - .../Generic/MutableObject.cs.meta | 3 - .../MutableObjects/Generic/ResetType.cs | 19 - .../MutableObjects/Generic/ResetType.cs.meta | 3 - Assets/Runtime/MutableObjects/Int.meta | 3 - .../Runtime/MutableObjects/Int/MutableInt.cs | 19 - .../MutableObjects/Int/MutableInt.cs.meta | 3 - .../MutableObjects/MutableObjectHandler.cs | 63 -- .../MutableObjectHandler.cs.meta | 11 - .../MutableObjectHandlerInitializer.cs | 26 - .../MutableObjectHandlerInitializer.cs.meta | 3 - Assets/Runtime/MutableObjects/String.meta | 3 - .../MutableObjects/String/MutableString.cs | 19 - .../String/MutableString.cs.meta | 3 - Assets/Runtime/MutableObjects/Vector2.meta | 3 - .../MutableObjects/Vector2/MutableVector2.cs | 19 - .../Vector2/MutableVector2.cs.meta | 3 - Assets/Runtime/MutableObjects/Vector3.meta | 3 - .../MutableObjects/Vector3/MutableVector3.cs | 19 - .../Vector3/MutableVector3.cs.meta | 3 - Assets/Samples/MutableObjects.meta | 8 - Assets/Samples/MutableObjects/Materials.meta | 8 - .../MutableObjects/Materials/Decrease.mat | 90 -- .../Materials/Decrease.mat.meta | 8 - .../MutableObjects/Materials/Increase.mat | 90 -- .../Materials/Increase.mat.meta | 8 - .../MutableObjects/MutableObjects.meta | 8 - .../MutableObjects/PlayerHealth.asset | 15 - .../MutableObjects/PlayerHealth.asset.meta | 8 - Assets/Samples/MutableObjects/Prefabs.meta | 8 - .../Prefabs/ClickerCamera.prefab | 131 --- .../Prefabs/ClickerCamera.prefab.meta | 7 - .../Prefabs/DecreasingHealthHandler.prefab | 109 --- .../DecreasingHealthHandler.prefab.meta | 7 - .../Prefabs/HealthIndicator.prefab | 94 -- .../Prefabs/HealthIndicator.prefab.meta | 7 - .../Prefabs/IncreasingHealthHandler.prefab | 109 --- .../IncreasingHealthHandler.prefab.meta | 7 - Assets/Samples/MutableObjects/Scenes.meta | 8 - .../Scenes/MutableObjects.unity | 816 ------------------ .../Scenes/MutableObjects.unity.meta | 7 - Assets/Samples/MutableObjects/Scripts.meta | 8 - .../Scripts/DecreasingHealthHandler.cs | 14 - .../Scripts/DecreasingHealthHandler.cs.meta | 3 - .../MutableObjects/Scripts/HealthHandler.cs | 13 - .../Scripts/HealthHandler.cs.meta | 3 - .../MutableObjects/Scripts/HealthText.cs | 42 - .../MutableObjects/Scripts/HealthText.cs.meta | 3 - .../Scripts/IncreasingHealthHandler.cs | 10 - .../Scripts/IncreasingHealthHandler.cs.meta | 3 - .../Samples/MutableObjects/Scripts/Shooter.cs | 45 - .../MutableObjects/Scripts/Shooter.cs.meta | 11 - Assets/Tests/Runtime/MutableObjects.meta | 8 - .../MutableObjectHandlerTest.cs | 82 -- .../MutableObjectHandlerTest.cs.meta | 3 - .../MutableObjects/MutableObjectProbe.cs | 16 - .../MutableObjects/MutableObjectProbe.cs.meta | 3 - .../MutableObjects/MutableObjectTest.cs | 79 -- .../MutableObjects/MutableObjectTest.cs.meta | 3 - 69 files changed, 2234 deletions(-) delete mode 100644 Assets/Runtime/MutableObjects.meta delete mode 100644 Assets/Runtime/MutableObjects/Bool.meta delete mode 100644 Assets/Runtime/MutableObjects/Bool/MutableBool.cs delete mode 100644 Assets/Runtime/MutableObjects/Bool/MutableBool.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Float.meta delete mode 100644 Assets/Runtime/MutableObjects/Float/MutableFloat.cs delete mode 100644 Assets/Runtime/MutableObjects/Float/MutableFloat.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Generic.meta delete mode 100644 Assets/Runtime/MutableObjects/Generic/IMutableObject.cs delete mode 100644 Assets/Runtime/MutableObjects/Generic/IMutableObject.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Generic/MutableObject.cs delete mode 100644 Assets/Runtime/MutableObjects/Generic/MutableObject.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Generic/ResetType.cs delete mode 100644 Assets/Runtime/MutableObjects/Generic/ResetType.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Int.meta delete mode 100644 Assets/Runtime/MutableObjects/Int/MutableInt.cs delete mode 100644 Assets/Runtime/MutableObjects/Int/MutableInt.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/MutableObjectHandler.cs delete mode 100644 Assets/Runtime/MutableObjects/MutableObjectHandler.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs delete mode 100644 Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/String.meta delete mode 100644 Assets/Runtime/MutableObjects/String/MutableString.cs delete mode 100644 Assets/Runtime/MutableObjects/String/MutableString.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Vector2.meta delete mode 100644 Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs delete mode 100644 Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs.meta delete mode 100644 Assets/Runtime/MutableObjects/Vector3.meta delete mode 100644 Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs delete mode 100644 Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs.meta delete mode 100644 Assets/Samples/MutableObjects.meta delete mode 100644 Assets/Samples/MutableObjects/Materials.meta delete mode 100644 Assets/Samples/MutableObjects/Materials/Decrease.mat delete mode 100644 Assets/Samples/MutableObjects/Materials/Decrease.mat.meta delete mode 100644 Assets/Samples/MutableObjects/Materials/Increase.mat delete mode 100644 Assets/Samples/MutableObjects/Materials/Increase.mat.meta delete mode 100644 Assets/Samples/MutableObjects/MutableObjects.meta delete mode 100644 Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset delete mode 100644 Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset.meta delete mode 100644 Assets/Samples/MutableObjects/Prefabs.meta delete mode 100644 Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab delete mode 100644 Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab.meta delete mode 100644 Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab delete mode 100644 Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab.meta delete mode 100644 Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab delete mode 100644 Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab.meta delete mode 100644 Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab delete mode 100644 Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab.meta delete mode 100644 Assets/Samples/MutableObjects/Scenes.meta delete mode 100644 Assets/Samples/MutableObjects/Scenes/MutableObjects.unity delete mode 100644 Assets/Samples/MutableObjects/Scenes/MutableObjects.unity.meta delete mode 100644 Assets/Samples/MutableObjects/Scripts.meta delete mode 100644 Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs delete mode 100644 Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs.meta delete mode 100644 Assets/Samples/MutableObjects/Scripts/HealthHandler.cs delete mode 100644 Assets/Samples/MutableObjects/Scripts/HealthHandler.cs.meta delete mode 100644 Assets/Samples/MutableObjects/Scripts/HealthText.cs delete mode 100644 Assets/Samples/MutableObjects/Scripts/HealthText.cs.meta delete mode 100644 Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs delete mode 100644 Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs.meta delete mode 100644 Assets/Samples/MutableObjects/Scripts/Shooter.cs delete mode 100644 Assets/Samples/MutableObjects/Scripts/Shooter.cs.meta delete mode 100644 Assets/Tests/Runtime/MutableObjects.meta delete mode 100644 Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs delete mode 100644 Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs.meta delete mode 100644 Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs delete mode 100644 Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs.meta delete mode 100644 Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs delete mode 100644 Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs.meta diff --git a/Assets/Runtime/MutableObjects.meta b/Assets/Runtime/MutableObjects.meta deleted file mode 100644 index 4dad3c5..0000000 --- a/Assets/Runtime/MutableObjects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2ea4f42a83854093888d1eb0445f14e7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Runtime/MutableObjects/Bool.meta b/Assets/Runtime/MutableObjects/Bool.meta deleted file mode 100644 index e773051..0000000 --- a/Assets/Runtime/MutableObjects/Bool.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2b602cbfff2146469cc800fdfd2d77c4 -timeCreated: 1601914554 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Bool/MutableBool.cs b/Assets/Runtime/MutableObjects/Bool/MutableBool.cs deleted file mode 100644 index 895c21b..0000000 --- a/Assets/Runtime/MutableObjects/Bool/MutableBool.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MutableObjects.Generic; -using UnityEngine; - -namespace MutableObjects.Bool -{ - [CreateAssetMenu(fileName = "MutableBool", menuName = "Mutable Objects/Mutable Bool")] - public class MutableBool : MutableObject - { - [SerializeField] - private bool value = default; - - public bool Value { get; set; } - - public override void ResetValues() - { - Value = value; - } - } -} diff --git a/Assets/Runtime/MutableObjects/Bool/MutableBool.cs.meta b/Assets/Runtime/MutableObjects/Bool/MutableBool.cs.meta deleted file mode 100644 index 3a404a9..0000000 --- a/Assets/Runtime/MutableObjects/Bool/MutableBool.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e3b0adfed72642e4a860b3de85741e11 -timeCreated: 1601914554 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Float.meta b/Assets/Runtime/MutableObjects/Float.meta deleted file mode 100644 index b226992..0000000 --- a/Assets/Runtime/MutableObjects/Float.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ffa1662b22ac4a6d9b9f384ba273ef48 -timeCreated: 1601743192 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Float/MutableFloat.cs b/Assets/Runtime/MutableObjects/Float/MutableFloat.cs deleted file mode 100644 index a4f149f..0000000 --- a/Assets/Runtime/MutableObjects/Float/MutableFloat.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MutableObjects.Generic; -using UnityEngine; - -namespace MutableObjects.Float -{ - [CreateAssetMenu(fileName = "MutableFloat", menuName = "Mutable Objects/Mutable Float")] - public class MutableFloat : MutableObject - { - [SerializeField] - private float value = default; - - public float Value { get; set; } - - public override void ResetValues() - { - Value = value; - } - } -} diff --git a/Assets/Runtime/MutableObjects/Float/MutableFloat.cs.meta b/Assets/Runtime/MutableObjects/Float/MutableFloat.cs.meta deleted file mode 100644 index b3ece7c..0000000 --- a/Assets/Runtime/MutableObjects/Float/MutableFloat.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fe56b70473a64c369b9ed218633feb0c -timeCreated: 1601743192 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Generic.meta b/Assets/Runtime/MutableObjects/Generic.meta deleted file mode 100644 index 788cdf6..0000000 --- a/Assets/Runtime/MutableObjects/Generic.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c89a661ef9e94b6ab72f968a3e2c2cc7 -timeCreated: 1601742725 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Generic/IMutableObject.cs b/Assets/Runtime/MutableObjects/Generic/IMutableObject.cs deleted file mode 100644 index 3372983..0000000 --- a/Assets/Runtime/MutableObjects/Generic/IMutableObject.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace MutableObjects.Generic -{ - public interface IMutableObject - { - /// - /// When this mutable object should be reset. - /// - ResetType ResetType { get; } - - /// - /// Reset values on this mutable object to their original ones. - /// - void ResetValues(); - } -} diff --git a/Assets/Runtime/MutableObjects/Generic/IMutableObject.cs.meta b/Assets/Runtime/MutableObjects/Generic/IMutableObject.cs.meta deleted file mode 100644 index 048cc03..0000000 --- a/Assets/Runtime/MutableObjects/Generic/IMutableObject.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 09be57a60c2b49698c09a6a1babd15b2 -timeCreated: 1601742710 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Generic/MutableObject.cs b/Assets/Runtime/MutableObjects/Generic/MutableObject.cs deleted file mode 100644 index f82c070..0000000 --- a/Assets/Runtime/MutableObjects/Generic/MutableObject.cs +++ /dev/null @@ -1,25 +0,0 @@ -using UnityEngine; - -namespace MutableObjects.Generic -{ - public abstract class MutableObject : ScriptableObject, IMutableObject - { - [SerializeField] - [Tooltip("When reset should be called for this object")] - private ResetType resetType = ResetType.None; - - public ResetType ResetType => resetType; - - public abstract void ResetValues(); - - protected virtual void OnValidate() - { - ResetValues(); - } - - protected virtual void OnEnable() - { - ResetValues(); - } - } -} diff --git a/Assets/Runtime/MutableObjects/Generic/MutableObject.cs.meta b/Assets/Runtime/MutableObjects/Generic/MutableObject.cs.meta deleted file mode 100644 index aed6db6..0000000 --- a/Assets/Runtime/MutableObjects/Generic/MutableObject.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e1df6005a214430c9e8cbbf1366da9ff -timeCreated: 1601742868 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Generic/ResetType.cs b/Assets/Runtime/MutableObjects/Generic/ResetType.cs deleted file mode 100644 index 130de40..0000000 --- a/Assets/Runtime/MutableObjects/Generic/ResetType.cs +++ /dev/null @@ -1,19 +0,0 @@ -using UnityEngine; - -namespace MutableObjects.Generic -{ - public enum ResetType - { - [Tooltip("Do not reset")] - None, - - [Tooltip("Reset when the active (focused) scene changes")] - ActiveSceneChange, - - [Tooltip("Reset when the current scene gets unloaded")] - SceneUnloaded, - - [Tooltip("Reset when the scene is loaded")] - SceneLoaded - } -} diff --git a/Assets/Runtime/MutableObjects/Generic/ResetType.cs.meta b/Assets/Runtime/MutableObjects/Generic/ResetType.cs.meta deleted file mode 100644 index 637096d..0000000 --- a/Assets/Runtime/MutableObjects/Generic/ResetType.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f61a23a3d27a495ba161056ee0f552e2 -timeCreated: 1602362226 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Int.meta b/Assets/Runtime/MutableObjects/Int.meta deleted file mode 100644 index d1108e8..0000000 --- a/Assets/Runtime/MutableObjects/Int.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e245b06a03f14b96b9c89499acf5852c -timeCreated: 1601742950 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Int/MutableInt.cs b/Assets/Runtime/MutableObjects/Int/MutableInt.cs deleted file mode 100644 index d782a84..0000000 --- a/Assets/Runtime/MutableObjects/Int/MutableInt.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MutableObjects.Generic; -using UnityEngine; - -namespace MutableObjects.Int -{ - [CreateAssetMenu(fileName = "MutableInt", menuName = "Mutable Objects/Mutable Int")] - public class MutableInt : MutableObject - { - [SerializeField] - private int value = default; - - public int Value { get; set; } - - public override void ResetValues() - { - Value = value; - } - } -} diff --git a/Assets/Runtime/MutableObjects/Int/MutableInt.cs.meta b/Assets/Runtime/MutableObjects/Int/MutableInt.cs.meta deleted file mode 100644 index a9b93e0..0000000 --- a/Assets/Runtime/MutableObjects/Int/MutableInt.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: eb4c1ad19b56486ca2a4e9514f8b7acc -timeCreated: 1601742962 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/MutableObjectHandler.cs b/Assets/Runtime/MutableObjects/MutableObjectHandler.cs deleted file mode 100644 index fbe816b..0000000 --- a/Assets/Runtime/MutableObjects/MutableObjectHandler.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MutableObjects.Generic; - -namespace MutableObjects -{ - public class MutableObjectHandler - { - private readonly List mutableObjects; - - public MutableObjectHandler(List mutableObjects) - { - this.mutableObjects = mutableObjects; - } - - /// - /// Set initial mutable object values (ignoring reset type). - /// - public void SetInitialMutableObjectValues() - { - // Initial all mutable objects are reset (set initial values). - ResetMutableObjects(mutableObjects); - } - - /// - /// Reset objects with reset type. - /// - public void ResetActiveSceneChange() - { - ResetMutableObjects(ResetType.ActiveSceneChange); - } - - /// - /// Reset objects with reset type. - /// - public void ResetSceneUnloaded() - { - ResetMutableObjects(ResetType.SceneUnloaded); - } - - /// - /// Reset objects with reset type. - /// - public void ResetSceneLoaded() - { - ResetMutableObjects(ResetType.SceneLoaded); - } - - private void ResetMutableObjects(ResetType resetType) - { - var filteredByType = mutableObjects.Where(obj => obj.ResetType == resetType); - ResetMutableObjects(filteredByType); - } - - private static void ResetMutableObjects(IEnumerable objects) - { - foreach (var obj in objects) - { - obj.ResetValues(); - } - } - } -} diff --git a/Assets/Runtime/MutableObjects/MutableObjectHandler.cs.meta b/Assets/Runtime/MutableObjects/MutableObjectHandler.cs.meta deleted file mode 100644 index 364ecdb..0000000 --- a/Assets/Runtime/MutableObjects/MutableObjectHandler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6292f477634e4552b51327967ca77061 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: -1 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs b/Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs deleted file mode 100644 index f54c3bb..0000000 --- a/Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using MutableObjects.Generic; -using UnityEngine; -using UnityEngine.SceneManagement; - -namespace MutableObjects -{ - public static class MutableObjectHandlerInitializer - { - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] - private static void RuntimeInit() - { - var handler = new MutableObjectHandler(FindMutableObjects()); - handler.SetInitialMutableObjectValues(); - - SceneManager.activeSceneChanged += (curr, next) => handler.ResetActiveSceneChange(); - SceneManager.sceneUnloaded += scene => handler.ResetSceneUnloaded(); - SceneManager.sceneLoaded += (scene, mode) => handler.ResetSceneLoaded(); - } - - private static List FindMutableObjects() - { - return new List(Resources.FindObjectsOfTypeAll()); - } - } -} diff --git a/Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs.meta b/Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs.meta deleted file mode 100644 index 92dcea6..0000000 --- a/Assets/Runtime/MutableObjects/MutableObjectHandlerInitializer.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d570fba8672849bda9af9259a474bfd2 -timeCreated: 1602408464 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/String.meta b/Assets/Runtime/MutableObjects/String.meta deleted file mode 100644 index f36f508..0000000 --- a/Assets/Runtime/MutableObjects/String.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3434047d882d4e8da1533a9432965021 -timeCreated: 1601743247 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/String/MutableString.cs b/Assets/Runtime/MutableObjects/String/MutableString.cs deleted file mode 100644 index 907496f..0000000 --- a/Assets/Runtime/MutableObjects/String/MutableString.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MutableObjects.Generic; -using UnityEngine; - -namespace MutableObjects.String -{ - [CreateAssetMenu(fileName = "MutableString", menuName = "Mutable Objects/Mutable String")] - public class MutableString : MutableObject - { - [SerializeField] - private string value = default; - - public string Value { get; set; } - - public override void ResetValues() - { - Value = value; - } - } -} diff --git a/Assets/Runtime/MutableObjects/String/MutableString.cs.meta b/Assets/Runtime/MutableObjects/String/MutableString.cs.meta deleted file mode 100644 index 57ee3c6..0000000 --- a/Assets/Runtime/MutableObjects/String/MutableString.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a01cfddbc7254405a4b5033e723125f0 -timeCreated: 1601743247 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Vector2.meta b/Assets/Runtime/MutableObjects/Vector2.meta deleted file mode 100644 index 2fdd580..0000000 --- a/Assets/Runtime/MutableObjects/Vector2.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c11e7d9062be4ee1b5444613bdaa77c6 -timeCreated: 1601743290 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs b/Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs deleted file mode 100644 index f145bf4..0000000 --- a/Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MutableObjects.Generic; -using UnityEngine; - -namespace MutableObjects.Vector2 -{ - [CreateAssetMenu(fileName = "MutableVector2", menuName = "Mutable Objects/Mutable Vector2")] - public class MutableVector2 : MutableObject - { - [SerializeField] - private UnityEngine.Vector2 value = default; - - public UnityEngine.Vector2 Value { get; set; } - - public override void ResetValues() - { - Value = value; - } - } -} diff --git a/Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs.meta b/Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs.meta deleted file mode 100644 index 2a50592..0000000 --- a/Assets/Runtime/MutableObjects/Vector2/MutableVector2.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e180dd849b874a2f8ddccb3e49938e71 -timeCreated: 1601743290 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Vector3.meta b/Assets/Runtime/MutableObjects/Vector3.meta deleted file mode 100644 index a130579..0000000 --- a/Assets/Runtime/MutableObjects/Vector3.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c90f4745cd38454ba82bc3414c7d844e -timeCreated: 1601743335 \ No newline at end of file diff --git a/Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs b/Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs deleted file mode 100644 index 6e32dc8..0000000 --- a/Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MutableObjects.Generic; -using UnityEngine; - -namespace MutableObjects.Vector3 -{ - [CreateAssetMenu(fileName = "MutableVector3", menuName = "Mutable Objects/Mutable Vector3")] - public class MutableVector3 : MutableObject - { - [SerializeField] - private UnityEngine.Vector3 value = default; - - public UnityEngine.Vector3 Value { get; set; } - - public override void ResetValues() - { - Value = value; - } - } -} diff --git a/Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs.meta b/Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs.meta deleted file mode 100644 index 48d9145..0000000 --- a/Assets/Runtime/MutableObjects/Vector3/MutableVector3.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: dcac6b29d5414962b03349b9e7736761 -timeCreated: 1601743335 \ No newline at end of file diff --git a/Assets/Samples/MutableObjects.meta b/Assets/Samples/MutableObjects.meta deleted file mode 100644 index aa3ce9d..0000000 --- a/Assets/Samples/MutableObjects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 230132c2b31f406e8e7497f005a09812 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Materials.meta b/Assets/Samples/MutableObjects/Materials.meta deleted file mode 100644 index df94911..0000000 --- a/Assets/Samples/MutableObjects/Materials.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a211c19547981b44bb67bbe19c5aea97 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Materials/Decrease.mat b/Assets/Samples/MutableObjects/Materials/Decrease.mat deleted file mode 100644 index 9607b4e..0000000 --- a/Assets/Samples/MutableObjects/Materials/Decrease.mat +++ /dev/null @@ -1,90 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Decrease - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2050 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _AlphaClip: 0 - - _Blend: 0 - - _BumpScale: 1 - - _Cull: 2 - - _Cutoff: 0.5 - - _DstBlend: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _Surface: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 0.427451, b: 0.4396678, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} ---- !u!114 &8511839400332316249 -MonoBehaviour: - m_ObjectHideFlags: 11 - 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 diff --git a/Assets/Samples/MutableObjects/Materials/Decrease.mat.meta b/Assets/Samples/MutableObjects/Materials/Decrease.mat.meta deleted file mode 100644 index db2b047..0000000 --- a/Assets/Samples/MutableObjects/Materials/Decrease.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8c1ce5e4b09a8144eabd16a310666ad7 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Materials/Increase.mat b/Assets/Samples/MutableObjects/Materials/Increase.mat deleted file mode 100644 index 365a6b7..0000000 --- a/Assets/Samples/MutableObjects/Materials/Increase.mat +++ /dev/null @@ -1,90 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Increase - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2050 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _AlphaClip: 0 - - _Blend: 0 - - _BumpScale: 1 - - _Cull: 2 - - _Cutoff: 0.5 - - _DstBlend: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _Surface: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 0.48366186, g: 1, b: 0.4292453, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} ---- !u!114 &8511839400332316249 -MonoBehaviour: - m_ObjectHideFlags: 11 - 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 diff --git a/Assets/Samples/MutableObjects/Materials/Increase.mat.meta b/Assets/Samples/MutableObjects/Materials/Increase.mat.meta deleted file mode 100644 index 3df591f..0000000 --- a/Assets/Samples/MutableObjects/Materials/Increase.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 11615e5fe0ef5214e9108bfe94adb24a -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/MutableObjects.meta b/Assets/Samples/MutableObjects/MutableObjects.meta deleted file mode 100644 index ec9530b..0000000 --- a/Assets/Samples/MutableObjects/MutableObjects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e0a0a7c34a001e84a96ecf9fd01ec5d2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset b/Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset deleted file mode 100644 index 63923db..0000000 --- a/Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset +++ /dev/null @@ -1,15 +0,0 @@ -%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: eb4c1ad19b56486ca2a4e9514f8b7acc, type: 3} - m_Name: PlayerHealth - m_EditorClassIdentifier: - value: 100 diff --git a/Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset.meta b/Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset.meta deleted file mode 100644 index 5846479..0000000 --- a/Assets/Samples/MutableObjects/MutableObjects/PlayerHealth.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ec8c3d68c89cc2c48ba9c5e064528ae5 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Prefabs.meta b/Assets/Samples/MutableObjects/Prefabs.meta deleted file mode 100644 index 3dfbc8b..0000000 --- a/Assets/Samples/MutableObjects/Prefabs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 08907d9e17ed51541a5298d373b18eb6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab b/Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab deleted file mode 100644 index 2978c84..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab +++ /dev/null @@ -1,131 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &4521292253474263882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4521292253474263862} - - component: {fileID: 4521292253474263863} - - component: {fileID: 4521292253474263880} - - component: {fileID: 4521292253474263881} - - component: {fileID: 7011280836384613342} - m_Layer: 0 - m_Name: ClickerCamera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4521292253474263862 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521292253474263882} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &4521292253474263863 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521292253474263882} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!81 &4521292253474263880 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521292253474263882} - m_Enabled: 1 ---- !u!114 &4521292253474263881 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521292253474263882} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_Version: 2 ---- !u!114 &7011280836384613342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4521292253474263882} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8801334c70052fe4f9658e19d2cec18c, type: 3} - m_Name: - m_EditorClassIdentifier: - shootButton: Fire1 diff --git a/Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab.meta b/Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab.meta deleted file mode 100644 index d5ac280..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/ClickerCamera.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 236964640b1e69048a86dc1a58f5f200 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab b/Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab deleted file mode 100644 index e3b5ff1..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab +++ /dev/null @@ -1,109 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &4095794639853462127 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4095794639853462115} - - component: {fileID: 4095794639853462114} - - component: {fileID: 4095794639853462125} - - component: {fileID: 4095794639853462124} - - component: {fileID: 4095794639853462112} - m_Layer: 0 - m_Name: DecreasingHealthHandler - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4095794639853462115 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4095794639853462127} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1.5, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4095794639853462114 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4095794639853462127} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &4095794639853462125 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4095794639853462127} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 8c1ce5e4b09a8144eabd16a310666ad7, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!65 &4095794639853462124 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4095794639853462127} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &4095794639853462112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4095794639853462127} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c6c769ca15db4cadb8b3bf44b44d43f7, type: 3} - m_Name: - m_EditorClassIdentifier: - health: {fileID: 11400000, guid: ec8c3d68c89cc2c48ba9c5e064528ae5, type: 2} diff --git a/Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab.meta b/Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab.meta deleted file mode 100644 index 0fc54d4..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/DecreasingHealthHandler.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e9cd2045609ed8a40918c7c99227876d -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab b/Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab deleted file mode 100644 index f1e4d3e..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab +++ /dev/null @@ -1,94 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &759120496304923377 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 759120496304923342} - - component: {fileID: 759120496304923340} - - component: {fileID: 759120496304923343} - - component: {fileID: 759120496304923341} - m_Layer: 5 - m_Name: HealthIndicator - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &759120496304923342 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 759120496304923377} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 64} - m_SizeDelta: {x: 608, y: 128} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &759120496304923340 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 759120496304923377} - m_CullTransparentMesh: 0 ---- !u!114 &759120496304923343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 759120496304923377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.509434, g: 0.509434, b: 0.509434, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 64 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 65 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &759120496304923341 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 759120496304923377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a6862d1164704ff889a807ca193e9b4a, type: 3} - m_Name: - m_EditorClassIdentifier: - health: {fileID: 11400000, guid: ec8c3d68c89cc2c48ba9c5e064528ae5, type: 2} diff --git a/Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab.meta b/Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab.meta deleted file mode 100644 index cb5f1e7..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/HealthIndicator.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2060a7fd8dc817a4bb0e331dc4382989 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab b/Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab deleted file mode 100644 index 97944da..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab +++ /dev/null @@ -1,109 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &2314108798820570059 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2314108798820570064} - - component: {fileID: 2314108798820570063} - - component: {fileID: 2314108798820570062} - - component: {fileID: 2314108798820570061} - - component: {fileID: 2314108798820570060} - m_Layer: 0 - m_Name: IncreasingHealthHandler - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2314108798820570064 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2314108798820570059} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.5, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &2314108798820570063 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2314108798820570059} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &2314108798820570062 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2314108798820570059} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 11615e5fe0ef5214e9108bfe94adb24a, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!65 &2314108798820570061 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2314108798820570059} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &2314108798820570060 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2314108798820570059} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ad3c05f0f39f410fb0a841dd7eaea443, type: 3} - m_Name: - m_EditorClassIdentifier: - health: {fileID: 11400000, guid: ec8c3d68c89cc2c48ba9c5e064528ae5, type: 2} diff --git a/Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab.meta b/Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab.meta deleted file mode 100644 index ed6ba1f..0000000 --- a/Assets/Samples/MutableObjects/Prefabs/IncreasingHealthHandler.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 160e49e6d5ef0164ca9f54ff5f0dc68d -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Scenes.meta b/Assets/Samples/MutableObjects/Scenes.meta deleted file mode 100644 index 259d09f..0000000 --- a/Assets/Samples/MutableObjects/Scenes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 891ded32ce5f422d9f7440b506bf4868 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Scenes/MutableObjects.unity b/Assets/Samples/MutableObjects/Scenes/MutableObjects.unity deleted file mode 100644 index 4fdf18a..0000000 --- a/Assets/Samples/MutableObjects/Scenes/MutableObjects.unity +++ /dev/null @@ -1,816 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.5566038, g: 0.5566038, b: 0.5566038, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &179482124 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 179482125} - m_Layer: 0 - m_Name: Environment - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &179482125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 179482124} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 198214860} - - {fileID: 1418809552} - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &198214858 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 198214860} - - component: {fileID: 198214859} - m_Layer: 0 - m_Name: DirectionalLight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &198214859 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 198214858} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &198214860 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 198214858} - m_LocalRotation: {x: 0.2194982, y: 0.75679785, z: -0.3134759, w: 0.5299156} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 179482125} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 45.000004, y: 110, z: 0} ---- !u!224 &204439456 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - m_PrefabInstance: {fileID: 759120496503971182} - m_PrefabAsset: {fileID: 0} ---- !u!1 &403880565 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 403880566} - m_Layer: 0 - m_Name: HealthHandlers - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &403880566 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 403880565} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 503514128} - - {fileID: 1902164921} - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &503514128 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - m_PrefabInstance: {fileID: 2314108798384297920} - m_PrefabAsset: {fileID: 0} ---- !u!1 &597545309 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 597545313} - - component: {fileID: 597545312} - - component: {fileID: 597545311} - - component: {fileID: 597545310} - m_Layer: 5 - m_Name: UI - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &597545310 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &597545311 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &597545312 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &597545313 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 204439456} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1418809548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1418809552} - - component: {fileID: 1418809551} - - component: {fileID: 1418809550} - - component: {fileID: 1418809549} - m_Layer: 2 - m_Name: Wall - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!64 &1418809549 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &1418809550 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 6721031f739529e4d9bd149a7cfc0d80, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1418809551 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1418809552 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_LocalRotation: {x: -0.0000014603138, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.5, z: 9} - m_LocalScale: {x: 10, y: 10, z: 10} - m_Children: [] - m_Father: {fileID: 179482125} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1902164921 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - m_PrefabInstance: {fileID: 4095794639561988570} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &759120496503971182 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 597545313} - m_Modifications: - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 64 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_SizeDelta.x - value: 608 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_SizeDelta.y - value: 128 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923342, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 759120496304923377, guid: 2060a7fd8dc817a4bb0e331dc4382989, - type: 3} - propertyPath: m_Name - value: HealthIndicator - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 2060a7fd8dc817a4bb0e331dc4382989, type: 3} ---- !u!1001 &2314108798384297920 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 403880566} - m_Modifications: - - target: {fileID: 2314108798820570059, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_Name - value: IncreasingHealthHandler - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalPosition.x - value: -1.5 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2314108798820570064, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 160e49e6d5ef0164ca9f54ff5f0dc68d, type: 3} ---- !u!1001 &4095794639561988570 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 403880566} - m_Modifications: - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalPosition.x - value: 1.5 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462115, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4095794639853462127, guid: e9cd2045609ed8a40918c7c99227876d, - type: 3} - propertyPath: m_Name - value: DecreasingHealthHandler - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: e9cd2045609ed8a40918c7c99227876d, type: 3} ---- !u!1001 &4521292254561523063 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalPosition.x - value: -3 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalPosition.y - value: 4.25 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalPosition.z - value: -3 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalRotation.x - value: 0.35355338 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalRotation.y - value: 0.35355338 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalRotation.z - value: -0.1464466 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalRotation.w - value: 0.8535535 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 45 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 45 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263862, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4521292253474263882, guid: 236964640b1e69048a86dc1a58f5f200, - type: 3} - propertyPath: m_Name - value: ClickerCamera - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 236964640b1e69048a86dc1a58f5f200, type: 3} diff --git a/Assets/Samples/MutableObjects/Scenes/MutableObjects.unity.meta b/Assets/Samples/MutableObjects/Scenes/MutableObjects.unity.meta deleted file mode 100644 index 597c765..0000000 --- a/Assets/Samples/MutableObjects/Scenes/MutableObjects.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ac31d203f09bf1c4a8033c527c3d6fb2 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Scripts.meta b/Assets/Samples/MutableObjects/Scripts.meta deleted file mode 100644 index 0ee02f6..0000000 --- a/Assets/Samples/MutableObjects/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1fac7d11b9eef4843ad18eec889cf7e9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs b/Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs deleted file mode 100644 index 04b565c..0000000 --- a/Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace MutableObjects -{ - public class DecreasingHealthHandler : HealthHandler - { - public override void HandleShot() - { - health.Value--; - if (health.Value <= 0) - { - health.Value = 0; - } - } - } -} diff --git a/Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs.meta b/Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs.meta deleted file mode 100644 index d1d176f..0000000 --- a/Assets/Samples/MutableObjects/Scripts/DecreasingHealthHandler.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c6c769ca15db4cadb8b3bf44b44d43f7 -timeCreated: 1601744926 \ No newline at end of file diff --git a/Assets/Samples/MutableObjects/Scripts/HealthHandler.cs b/Assets/Samples/MutableObjects/Scripts/HealthHandler.cs deleted file mode 100644 index 8951f99..0000000 --- a/Assets/Samples/MutableObjects/Scripts/HealthHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -using MutableObjects.Int; -using UnityEngine; - -namespace MutableObjects -{ - public abstract class HealthHandler : MonoBehaviour - { - [SerializeField] - protected MutableInt health = default; - - public abstract void HandleShot(); - } -} diff --git a/Assets/Samples/MutableObjects/Scripts/HealthHandler.cs.meta b/Assets/Samples/MutableObjects/Scripts/HealthHandler.cs.meta deleted file mode 100644 index 81e7e95..0000000 --- a/Assets/Samples/MutableObjects/Scripts/HealthHandler.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: fe051e1ed8e04d3485309b738b90e722 -timeCreated: 1601744511 \ No newline at end of file diff --git a/Assets/Samples/MutableObjects/Scripts/HealthText.cs b/Assets/Samples/MutableObjects/Scripts/HealthText.cs deleted file mode 100644 index fa8ac4e..0000000 --- a/Assets/Samples/MutableObjects/Scripts/HealthText.cs +++ /dev/null @@ -1,42 +0,0 @@ -using MutableObjects.Int; -using UnityEngine; -using UnityEngine.UI; - -namespace MutableObjects -{ - [RequireComponent(typeof(Text))] - public class HealthText : MonoBehaviour - { - [SerializeField] - private MutableInt health = default; - - private int currentHealth; - - private Text text; - - private void Awake() - { - text = GetComponent(); - } - - private void Start() - { - currentHealth = health.Value; - SetText(); - } - - private void Update() - { - if (currentHealth != health.Value) - { - currentHealth = health.Value; - SetText(); - } - } - - private void SetText() - { - text.text = currentHealth.ToString(); - } - } -} diff --git a/Assets/Samples/MutableObjects/Scripts/HealthText.cs.meta b/Assets/Samples/MutableObjects/Scripts/HealthText.cs.meta deleted file mode 100644 index f2b7b94..0000000 --- a/Assets/Samples/MutableObjects/Scripts/HealthText.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a6862d1164704ff889a807ca193e9b4a -timeCreated: 1601744653 \ No newline at end of file diff --git a/Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs b/Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs deleted file mode 100644 index 88c1364..0000000 --- a/Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MutableObjects -{ - public class IncreasingHealthHandler : HealthHandler - { - public override void HandleShot() - { - health.Value++; - } - } -} diff --git a/Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs.meta b/Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs.meta deleted file mode 100644 index 4b201fb..0000000 --- a/Assets/Samples/MutableObjects/Scripts/IncreasingHealthHandler.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ad3c05f0f39f410fb0a841dd7eaea443 -timeCreated: 1601744887 \ No newline at end of file diff --git a/Assets/Samples/MutableObjects/Scripts/Shooter.cs b/Assets/Samples/MutableObjects/Scripts/Shooter.cs deleted file mode 100644 index afea1b6..0000000 --- a/Assets/Samples/MutableObjects/Scripts/Shooter.cs +++ /dev/null @@ -1,45 +0,0 @@ -using UnityEngine; - -namespace MutableObjects -{ - [RequireComponent(typeof(Camera))] - public class Shooter : MonoBehaviour - { - [SerializeField] - private string shootButton = "Fire1"; - - private new Camera camera; - - private void Awake() - { - camera = GetComponent(); - } - - private void Update() - { - if (IsShoot()) - { - Shoot(); - } - } - - private bool IsShoot() - { - return Input.GetButtonDown(shootButton); - } - - private void Shoot() - { - var ray = camera.ScreenPointToRay(Input.mousePosition); - - if (Physics.Raycast(ray, out var hit)) - { - var handler = hit.transform.GetComponent(); - if (handler != null) - { - handler.HandleShot(); - } - } - } - } -} diff --git a/Assets/Samples/MutableObjects/Scripts/Shooter.cs.meta b/Assets/Samples/MutableObjects/Scripts/Shooter.cs.meta deleted file mode 100644 index cb47140..0000000 --- a/Assets/Samples/MutableObjects/Scripts/Shooter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8801334c70052fe4f9658e19d2cec18c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Tests/Runtime/MutableObjects.meta b/Assets/Tests/Runtime/MutableObjects.meta deleted file mode 100644 index 2505d81..0000000 --- a/Assets/Tests/Runtime/MutableObjects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d7804ba3533e92a4083df65b1905ce33 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs b/Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs deleted file mode 100644 index ec475d6..0000000 --- a/Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using MutableObjects.Generic; -using NUnit.Framework; -using UnityEngine.SceneManagement; -using UnityEngine.TestTools; -using Assert = UnityEngine.Assertions.Assert; - -namespace MutableObjects -{ - public class MutableObjectHandlerTest - { - [UnityTest] - public IEnumerable ShouldResetAppropriateObjects() - { - // The resetting tests must be in one test cases, otherwise problems with race - // conditions arise (while testing). - var probeNone = CreateObjectProbe(ResetType.None); - var probeActiveSceneChange = CreateObjectProbe(ResetType.ActiveSceneChange); - var probeSceneSceneLoaded = CreateObjectProbe(ResetType.SceneLoaded); - var probeSceneUnloaded = CreateObjectProbe(ResetType.SceneUnloaded); - - var handler = new MutableObjectHandler(new List - { - probeNone, - probeActiveSceneChange, - probeSceneSceneLoaded, - probeSceneUnloaded - }); - - RegisterSceneListeners(handler); - - yield return ReloadScene(); - - Assert.AreEqual(0, probeNone.ResetCount); - Assert.AreEqual(1, probeActiveSceneChange.ResetCount); - Assert.AreEqual(1, probeSceneSceneLoaded.ResetCount); - Assert.AreEqual(1, probeSceneUnloaded.ResetCount); - } - - [Test] - public void ShouldSetInitialValues() - { - var objectProbe = CreateObjectProbe(ResetType.None); - var handler = new MutableObjectHandler( - new List {objectProbe} - ); - - handler.SetInitialMutableObjectValues(); - - Assert.AreEqual(1, objectProbe.ResetCount); - } - - private static MutableObjectProbe CreateObjectProbe(ResetType resetType) - { - return new MutableObjectProbe - { - ResetType = resetType - }; - } - - private static void RegisterSceneListeners(MutableObjectHandler handler) - { - SceneManager.activeSceneChanged += (curr, next) => handler.ResetActiveSceneChange(); - SceneManager.sceneUnloaded += scene => handler.ResetSceneUnloaded(); - SceneManager.sceneLoaded += (scene, mode) => handler.ResetSceneLoaded(); - } - - private static IEnumerator ReloadScene() - { - var active = SceneManager.GetActiveScene(); - var loaded = SceneManager.LoadSceneAsync(active.name); - - loaded.allowSceneActivation = true; - - while (!loaded.isDone) - { - yield return null; - } - } - } -} diff --git a/Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs.meta b/Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs.meta deleted file mode 100644 index e649362..0000000 --- a/Assets/Tests/Runtime/MutableObjects/MutableObjectHandlerTest.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cef50a90e8134ff295b990b0fd805521 -timeCreated: 1602073421 \ No newline at end of file diff --git a/Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs b/Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs deleted file mode 100644 index 46fe453..0000000 --- a/Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs +++ /dev/null @@ -1,16 +0,0 @@ -using MutableObjects.Generic; - -namespace MutableObjects -{ - public class MutableObjectProbe : IMutableObject - { - public ResetType ResetType { get; set; } = ResetType.None; - - public int ResetCount { get; private set; } - - public void ResetValues() - { - ResetCount++; - } - } -} diff --git a/Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs.meta b/Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs.meta deleted file mode 100644 index f9ba6c2..0000000 --- a/Assets/Tests/Runtime/MutableObjects/MutableObjectProbe.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: aa904f7258b34927909d68ea048ca9c4 -timeCreated: 1602073874 \ No newline at end of file diff --git a/Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs b/Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs deleted file mode 100644 index 45a99e2..0000000 --- a/Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs +++ /dev/null @@ -1,79 +0,0 @@ -using MutableObjects.Bool; -using MutableObjects.Float; -using MutableObjects.String; -using MutableObjects.Vector2; -using MutableObjects.Vector3; -using NUnit.Framework; -using UnityEngine; -using Assert = UnityEngine.Assertions.Assert; - -namespace MutableObjects -{ - public class MutableObjectTest - { - [Test] - public void ShouldSetAndResetMutableBool() - { - var mutable = ScriptableObject.CreateInstance(); - mutable.Value = true; - - Assert.AreEqual(true, mutable.Value); - - mutable.ResetValues(); - - Assert.AreEqual(false, mutable.Value); - } - - [Test] - public void ShouldSetAndResetMutableFloat() - { - var mutable = ScriptableObject.CreateInstance(); - mutable.Value = 10f; - - Assert.AreEqual(10f, mutable.Value); - - mutable.ResetValues(); - - Assert.AreEqual(0f, mutable.Value); - } - - [Test] - public void ShouldSetAndResetMutableString() - { - var mutable = ScriptableObject.CreateInstance(); - mutable.Value = "foo"; - - Assert.AreEqual("foo", mutable.Value); - - mutable.ResetValues(); - - Assert.AreEqual(null, mutable.Value); - } - - [Test] - public void ShouldSetAndResetMutableVector2() - { - var mutable = ScriptableObject.CreateInstance(); - mutable.Value = UnityEngine.Vector2.one; - - Assert.AreEqual(UnityEngine.Vector2.one, mutable.Value); - - mutable.ResetValues(); - - Assert.AreEqual(UnityEngine.Vector2.zero, mutable.Value); - } - - [Test] - public void ShouldSetAndResetMutableVector3() - { - var mutable = ScriptableObject.CreateInstance(); - mutable.Value = UnityEngine.Vector3.one; - - Assert.AreEqual(UnityEngine.Vector3.one, mutable.Value); - - mutable.ResetValues(); - - Assert.AreEqual(UnityEngine.Vector3.zero, mutable.Value); - } - } -} diff --git a/Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs.meta b/Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs.meta deleted file mode 100644 index b7a177b..0000000 --- a/Assets/Tests/Runtime/MutableObjects/MutableObjectTest.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5bbda50d14e74a35bd32132806e167f5 -timeCreated: 1602069656 \ No newline at end of file From 9c06e401713c956cf9cb0adfc95819fc0d4f6569 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Wed, 20 Jan 2021 21:57:30 +0200 Subject: [PATCH 02/26] Initial rework of events --- Assets/Documentation~/{README.md => index.md} | 0 Assets/Editor/Chark.GameEvents.Editor.asmdef | 9 ++ ...ta => Chark.GameEvents.Editor.asmdef.meta} | 0 ...Chark.UnityScriptableObjects.Editor.asmdef | 9 -- Assets/Runtime/BaseGameEvent.cs | 128 ++++++++++++++++++ Assets/Runtime/BaseGameEvent.cs.meta | 3 + Assets/Runtime/BaseGameEventListener.cs | 57 ++++++++ Assets/Runtime/BaseGameEventListener.cs.meta | 3 + ...Objects.asmdef => Chark.GameEvents.asmdef} | 4 +- ...mdef.meta => Chark.GameEvents.asmdef.meta} | 0 Assets/Runtime/GameEvents/Empty.meta | 3 + Assets/Runtime/GameEvents/Empty/EmptyArg.cs | 11 ++ .../Runtime/GameEvents/Empty/EmptyArg.cs.meta | 3 + .../GameEvents/Empty/EmptyUnityEvent.cs | 10 ++ .../GameEvents/Empty/EmptyUnityEvent.cs.meta | 3 + Assets/Runtime/GameEvents/Empty/GameEvent.cs | 13 ++ .../GameEvents/Empty/GameEvent.cs.meta | 3 + .../GameEvents/Empty/GameEventListener.cs | 6 + .../Empty/GameEventListener.cs.meta | 3 + Assets/Runtime/IGameEvent.cs | 27 ++++ Assets/Runtime/IGameEvent.cs.meta | 3 + Assets/Runtime/IGameEventListener.cs | 10 ++ Assets/Runtime/IGameEventListener.cs.meta | 3 + ...asmdef => Chark.GameEvents.Samples.asmdef} | 8 +- ...a => Chark.GameEvents.Samples.asmdef.meta} | 0 .../Samples/GameEvents/Events/GameEvent.asset | 21 +++ .../GameEvents/Events/GameEvent.asset.meta | 8 ++ ...s.asmdef => Chark.GameEvents.Tests.asmdef} | 6 +- ...eta => Chark.GameEvents.Tests.asmdef.meta} | 0 Chark.GameEvents.csproj.DotSettings | 2 + ProjectSettings/QualitySettings.asset | 2 +- 31 files changed, 339 insertions(+), 19 deletions(-) rename Assets/Documentation~/{README.md => index.md} (100%) create mode 100644 Assets/Editor/Chark.GameEvents.Editor.asmdef rename Assets/Editor/{Chark.UnityScriptableObjects.Editor.asmdef.meta => Chark.GameEvents.Editor.asmdef.meta} (100%) delete mode 100644 Assets/Editor/Chark.UnityScriptableObjects.Editor.asmdef create mode 100644 Assets/Runtime/BaseGameEvent.cs create mode 100644 Assets/Runtime/BaseGameEvent.cs.meta create mode 100644 Assets/Runtime/BaseGameEventListener.cs create mode 100644 Assets/Runtime/BaseGameEventListener.cs.meta rename Assets/Runtime/{Chark.UnityScriptableObjects.asmdef => Chark.GameEvents.asmdef} (86%) rename Assets/Runtime/{Chark.UnityScriptableObjects.asmdef.meta => Chark.GameEvents.asmdef.meta} (100%) create mode 100644 Assets/Runtime/GameEvents/Empty.meta create mode 100644 Assets/Runtime/GameEvents/Empty/EmptyArg.cs create mode 100644 Assets/Runtime/GameEvents/Empty/EmptyArg.cs.meta create mode 100644 Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs create mode 100644 Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs.meta create mode 100644 Assets/Runtime/GameEvents/Empty/GameEvent.cs create mode 100644 Assets/Runtime/GameEvents/Empty/GameEvent.cs.meta create mode 100644 Assets/Runtime/GameEvents/Empty/GameEventListener.cs create mode 100644 Assets/Runtime/GameEvents/Empty/GameEventListener.cs.meta create mode 100644 Assets/Runtime/IGameEvent.cs create mode 100644 Assets/Runtime/IGameEvent.cs.meta create mode 100644 Assets/Runtime/IGameEventListener.cs create mode 100644 Assets/Runtime/IGameEventListener.cs.meta rename Assets/Samples/{Chark.UnityScriptableObjects.Samples.asmdef => Chark.GameEvents.Samples.asmdef} (68%) rename Assets/Samples/{Chark.UnityScriptableObjects.Samples.asmdef.meta => Chark.GameEvents.Samples.asmdef.meta} (100%) create mode 100644 Assets/Samples/GameEvents/Events/GameEvent.asset create mode 100644 Assets/Samples/GameEvents/Events/GameEvent.asset.meta rename Assets/Tests/Runtime/{Chark.UnityScriptableObjects.Tests.asmdef => Chark.GameEvents.Tests.asmdef} (81%) rename Assets/Tests/Runtime/{Chark.UnityScriptableObjects.Tests.asmdef.meta => Chark.GameEvents.Tests.asmdef.meta} (100%) create mode 100644 Chark.GameEvents.csproj.DotSettings diff --git a/Assets/Documentation~/README.md b/Assets/Documentation~/index.md similarity index 100% rename from Assets/Documentation~/README.md rename to Assets/Documentation~/index.md diff --git a/Assets/Editor/Chark.GameEvents.Editor.asmdef b/Assets/Editor/Chark.GameEvents.Editor.asmdef new file mode 100644 index 0000000..ded14e8 --- /dev/null +++ b/Assets/Editor/Chark.GameEvents.Editor.asmdef @@ -0,0 +1,9 @@ +{ + "name": "Chark.GameEvents.Editor", + "references": [ + "Chark.GameEvents" + ], + "includePlatforms": [ + "Editor" + ] +} diff --git a/Assets/Editor/Chark.UnityScriptableObjects.Editor.asmdef.meta b/Assets/Editor/Chark.GameEvents.Editor.asmdef.meta similarity index 100% rename from Assets/Editor/Chark.UnityScriptableObjects.Editor.asmdef.meta rename to Assets/Editor/Chark.GameEvents.Editor.asmdef.meta diff --git a/Assets/Editor/Chark.UnityScriptableObjects.Editor.asmdef b/Assets/Editor/Chark.UnityScriptableObjects.Editor.asmdef deleted file mode 100644 index f9e66aa..0000000 --- a/Assets/Editor/Chark.UnityScriptableObjects.Editor.asmdef +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "Chark.UnityScriptableObjects.Editor", - "references": [ - "Chark.UnityScriptableObjects" - ], - "includePlatforms": [ - "Editor" - ] -} diff --git a/Assets/Runtime/BaseGameEvent.cs b/Assets/Runtime/BaseGameEvent.cs new file mode 100644 index 0000000..21fc4d4 --- /dev/null +++ b/Assets/Runtime/BaseGameEvent.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine; + +namespace GameEvents +{ + public abstract class BaseGameEvent : ScriptableObject, IGameEvent + { + #region Editor + + // todo: add locking https://github.com/roboryantron/Unite2017/blob/master/Assets/Code/Variables/Editor/FloatReferenceDrawer.cs + [Multiline(4)] + [SerializeField] + [Tooltip("Description of the game event")] + private string description; + + [SerializeField] + [Tooltip("Should exceptions be suppressed and continue the listener chain")] + private bool suppressExceptions; + + // todo: show yellow warning + [SerializeField] + [Tooltip("Should debug messages be logged for this game event")] + private bool trace; + + #endregion + + #region Fields + + // ReadOnlyCollection is used here so it wouldn't get modified via Listeners without having + // to use Add or Remove. + private readonly ReadOnlyCollection> readOnlyListeners; + + private readonly List> listeners + = new List>(); + + #endregion + + #region Properties + + public ICollection> Listeners => readOnlyListeners; + + #endregion + + #region Unity Lifecycle + + private void OnDisable() + { + listeners.Clear(); + } + + #endregion + + #region Methods + + protected BaseGameEvent() + { + readOnlyListeners = new ReadOnlyCollection>(listeners); + } + + public void Raise(TArg arg) + { + for (var i = listeners.Count - 1; i >= 0; i--) + { + var listener = listeners[i]; + + if (trace) + { + Trace(listener, arg); + } + + if (suppressExceptions) + { + OnRaiseSuppressed(listener, arg); + } + else + { + OnRaise(listener, arg); + } + } + } + + public void Add(IGameEventListener listener) + { + if (listeners.Contains(listener)) + { + return; + } + + listeners.Add(listener); + } + + public void Remove(IGameEventListener listener) + { + listeners.Remove(listener); + } + + private void Trace(IGameEventListener listener, TArg arg) + { + Debug.Log($"Raise event: {name}, listener: {listener}, arg: {arg}", this); + } + + private void OnRaiseSuppressed(IGameEventListener listener, TArg arg) + { + try + { + listener.OnRaised(arg); + } + catch (Exception e) + { + Debug.LogError( + $"Listener: {listener} of event: {name} has thrown an exception.", + this + ); + + Debug.LogException(e, this); + } + } + + private static void OnRaise(IGameEventListener listener, TArg arg) + { + listener.OnRaised(arg); + } + + #endregion + } +} diff --git a/Assets/Runtime/BaseGameEvent.cs.meta b/Assets/Runtime/BaseGameEvent.cs.meta new file mode 100644 index 0000000..4c47878 --- /dev/null +++ b/Assets/Runtime/BaseGameEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ad7df0078c084622ad3d7be6fa67cf8d +timeCreated: 1611166943 \ No newline at end of file diff --git a/Assets/Runtime/BaseGameEventListener.cs b/Assets/Runtime/BaseGameEventListener.cs new file mode 100644 index 0000000..3991bb5 --- /dev/null +++ b/Assets/Runtime/BaseGameEventListener.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace GameEvents +{ + public class BaseGameEventListener + : MonoBehaviour, IGameEventListener + where TGameEvent : BaseGameEvent + where TUnityEvent : UnityEvent + { + #region Editor + + [SerializeField] + private TGameEvent gameEvent; + + [Space] + [SerializeField] + private TUnityEvent onRaised; + + #endregion + + #region Unity Lifecycle + + private void OnEnable() + { + if (gameEvent == null) + { + Debug.LogError($"{typeof(TGameEvent).Name} is not assigned", this); + return; + } + + gameEvent.Add(this); + } + + private void OnDisable() + { + if (gameEvent == null) + { + // Can exit without logging as OnEnable should give enough info. + return; + } + + gameEvent.Remove(this); + } + + #endregion + + #region Methods + + public void OnRaised(TArg arg) + { + onRaised.Invoke(arg); + } + + #endregion + } +} diff --git a/Assets/Runtime/BaseGameEventListener.cs.meta b/Assets/Runtime/BaseGameEventListener.cs.meta new file mode 100644 index 0000000..758c01b --- /dev/null +++ b/Assets/Runtime/BaseGameEventListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0e7519fc695046a4b4a0d24f1d1f60bf +timeCreated: 1611166971 \ No newline at end of file diff --git a/Assets/Runtime/Chark.UnityScriptableObjects.asmdef b/Assets/Runtime/Chark.GameEvents.asmdef similarity index 86% rename from Assets/Runtime/Chark.UnityScriptableObjects.asmdef rename to Assets/Runtime/Chark.GameEvents.asmdef index e23f533..cdc21dc 100644 --- a/Assets/Runtime/Chark.UnityScriptableObjects.asmdef +++ b/Assets/Runtime/Chark.GameEvents.asmdef @@ -1,5 +1,5 @@ { - "name": "Chark.UnityScriptableObjects", + "name": "Chark.GameEvents", "references": [], "includePlatforms": [], "excludePlatforms": [], @@ -10,4 +10,4 @@ "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Assets/Runtime/Chark.UnityScriptableObjects.asmdef.meta b/Assets/Runtime/Chark.GameEvents.asmdef.meta similarity index 100% rename from Assets/Runtime/Chark.UnityScriptableObjects.asmdef.meta rename to Assets/Runtime/Chark.GameEvents.asmdef.meta diff --git a/Assets/Runtime/GameEvents/Empty.meta b/Assets/Runtime/GameEvents/Empty.meta new file mode 100644 index 0000000..2486c2a --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 11fde44fb39f48268781e2169533feda +timeCreated: 1611167723 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Empty/EmptyArg.cs b/Assets/Runtime/GameEvents/Empty/EmptyArg.cs new file mode 100644 index 0000000..4bac333 --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/EmptyArg.cs @@ -0,0 +1,11 @@ +namespace GameEvents.Empty +{ + public class EmptyArg + { + public static readonly EmptyArg Instance = new EmptyArg(); + + private EmptyArg() + { + } + } +} diff --git a/Assets/Runtime/GameEvents/Empty/EmptyArg.cs.meta b/Assets/Runtime/GameEvents/Empty/EmptyArg.cs.meta new file mode 100644 index 0000000..f57700f --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/EmptyArg.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b613ccfb6b6e458b94acf07de26dbbb2 +timeCreated: 1611167750 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs b/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs new file mode 100644 index 0000000..6e96695 --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs @@ -0,0 +1,10 @@ +using System; +using UnityEngine.Events; + +namespace GameEvents.Empty +{ + [Serializable] + public class EmptyUnityEvent : UnityEvent + { + } +} diff --git a/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs.meta b/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs.meta new file mode 100644 index 0000000..5232043 --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9aae76d7ace94aeba4f40e74b469dd82 +timeCreated: 1611167840 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Empty/GameEvent.cs b/Assets/Runtime/GameEvents/Empty/GameEvent.cs new file mode 100644 index 0000000..3caf5ee --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/GameEvent.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace GameEvents.Empty +{ + [CreateAssetMenu(fileName = "GameEvent", menuName = "Game Events 2/Game Event")] + public class GameEvent : BaseGameEvent + { + public void Raise() + { + Raise(EmptyArg.Instance); + } + } +} diff --git a/Assets/Runtime/GameEvents/Empty/GameEvent.cs.meta b/Assets/Runtime/GameEvents/Empty/GameEvent.cs.meta new file mode 100644 index 0000000..319d375 --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/GameEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3ca9d72c0f5043e9b9ed7e25d63422f5 +timeCreated: 1611167731 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Empty/GameEventListener.cs b/Assets/Runtime/GameEvents/Empty/GameEventListener.cs new file mode 100644 index 0000000..099e48b --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/GameEventListener.cs @@ -0,0 +1,6 @@ +namespace GameEvents.Empty +{ + public class GameEventListener : BaseGameEventListener + { + } +} diff --git a/Assets/Runtime/GameEvents/Empty/GameEventListener.cs.meta b/Assets/Runtime/GameEvents/Empty/GameEventListener.cs.meta new file mode 100644 index 0000000..e710ebe --- /dev/null +++ b/Assets/Runtime/GameEvents/Empty/GameEventListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2300d56ac22446e59de6de2fb87235d1 +timeCreated: 1611167874 \ No newline at end of file diff --git a/Assets/Runtime/IGameEvent.cs b/Assets/Runtime/IGameEvent.cs new file mode 100644 index 0000000..4b6ed67 --- /dev/null +++ b/Assets/Runtime/IGameEvent.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace GameEvents +{ + public interface IGameEvent + { + /// + /// Registered listeners. + /// + ICollection> Listeners { get; } + + /// + /// Raise this game event with an argument. + /// + void Raise(TArg arg); + + /// + /// Add a listener to this game event. + /// + void Add(IGameEventListener listener); + + /// + /// Remove a listener from this game event. + /// + void Remove(IGameEventListener listener); + } +} diff --git a/Assets/Runtime/IGameEvent.cs.meta b/Assets/Runtime/IGameEvent.cs.meta new file mode 100644 index 0000000..ddd7e9c --- /dev/null +++ b/Assets/Runtime/IGameEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f62ff48639d0421598a90127b09a990c +timeCreated: 1611166784 \ No newline at end of file diff --git a/Assets/Runtime/IGameEventListener.cs b/Assets/Runtime/IGameEventListener.cs new file mode 100644 index 0000000..e053e38 --- /dev/null +++ b/Assets/Runtime/IGameEventListener.cs @@ -0,0 +1,10 @@ +namespace GameEvents +{ + public interface IGameEventListener + { + /// + /// Handle raised game event by accepting its argument. + /// + void OnRaised(TArg arg); + } +} diff --git a/Assets/Runtime/IGameEventListener.cs.meta b/Assets/Runtime/IGameEventListener.cs.meta new file mode 100644 index 0000000..ae8370c --- /dev/null +++ b/Assets/Runtime/IGameEventListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d3afe043ca8a4e36bbf19fe482d7ca13 +timeCreated: 1611166884 \ No newline at end of file diff --git a/Assets/Samples/Chark.UnityScriptableObjects.Samples.asmdef b/Assets/Samples/Chark.GameEvents.Samples.asmdef similarity index 68% rename from Assets/Samples/Chark.UnityScriptableObjects.Samples.asmdef rename to Assets/Samples/Chark.GameEvents.Samples.asmdef index d98b321..6110722 100644 --- a/Assets/Samples/Chark.UnityScriptableObjects.Samples.asmdef +++ b/Assets/Samples/Chark.GameEvents.Samples.asmdef @@ -1,8 +1,8 @@ { - "name": "Chark.UnityScriptableObjects.Samples", + "name": "Chark.GameEvents.Samples", "references": [ - "Chark.UnityScriptableObjects", - "Chark.UnityScriptableObjects.Editor" + "Chark.GameEvents", + "Chark.GameEvents.Editor" ], "includePlatforms": [], "excludePlatforms": [], @@ -13,4 +13,4 @@ "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Assets/Samples/Chark.UnityScriptableObjects.Samples.asmdef.meta b/Assets/Samples/Chark.GameEvents.Samples.asmdef.meta similarity index 100% rename from Assets/Samples/Chark.UnityScriptableObjects.Samples.asmdef.meta rename to Assets/Samples/Chark.GameEvents.Samples.asmdef.meta diff --git a/Assets/Samples/GameEvents/Events/GameEvent.asset b/Assets/Samples/GameEvents/Events/GameEvent.asset new file mode 100644 index 0000000..a9fd845 --- /dev/null +++ b/Assets/Samples/GameEvents/Events/GameEvent.asset @@ -0,0 +1,21 @@ +%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: 3ca9d72c0f5043e9b9ed7e25d63422f5, type: 3} + m_Name: GameEvent + m_EditorClassIdentifier: + description: 'asdasdas asdas asd asdasd21321 asdasd + + asdasd + + asdasd' + suppressExceptions: 0 + trace: 0 diff --git a/Assets/Samples/GameEvents/Events/GameEvent.asset.meta b/Assets/Samples/GameEvents/Events/GameEvent.asset.meta new file mode 100644 index 0000000..59e6a4b --- /dev/null +++ b/Assets/Samples/GameEvents/Events/GameEvent.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31423e6b17c75ce45a70cac3afc3f434 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Runtime/Chark.UnityScriptableObjects.Tests.asmdef b/Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef similarity index 81% rename from Assets/Tests/Runtime/Chark.UnityScriptableObjects.Tests.asmdef rename to Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef index 622bc97..32563aa 100644 --- a/Assets/Tests/Runtime/Chark.UnityScriptableObjects.Tests.asmdef +++ b/Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef @@ -1,8 +1,8 @@ { - "name": "Chark.UnityScriptableObjects.Tests", + "name": "Chark.GameEvents.Tests", "references": [ "UnityEngine.TestRunner", - "Chark.UnityScriptableObjects" + "Chark.GameEvents" ], "includePlatforms": [], "excludePlatforms": [], @@ -17,4 +17,4 @@ ], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Chark.UnityScriptableObjects.Tests.asmdef.meta b/Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef.meta similarity index 100% rename from Assets/Tests/Runtime/Chark.UnityScriptableObjects.Tests.asmdef.meta rename to Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef.meta diff --git a/Chark.GameEvents.csproj.DotSettings b/Chark.GameEvents.csproj.DotSettings new file mode 100644 index 0000000..46d7629 --- /dev/null +++ b/Chark.GameEvents.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 4219f4b..cab35cc 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -95,7 +95,7 @@ QualitySettings: skinWeights: 2 textureQuality: 0 anisotropicTextures: 1 - antiAliasing: 8 + antiAliasing: 0 softParticles: 0 softVegetation: 1 realtimeReflectionProbes: 1 From b595d3af0d0cdd4e28f2422b886b6103ab3fac30 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Thu, 21 Jan 2021 11:18:19 +0200 Subject: [PATCH 03/26] Use new game event API --- Assets/Editor/BaseGameEventEditor.cs | 114 ++++++++++++++++++ Assets/Editor/BaseGameEventEditor.cs.meta | 3 + Assets/Editor/BoolGameEventEditor.cs | 14 +++ .../Bool => }/BoolGameEventEditor.cs.meta | 0 Assets/Editor/FloatGameEventEditor.cs | 14 +++ .../Float => }/FloatGameEventEditor.cs.meta | 0 Assets/Editor/GameEvents.meta | 8 -- Assets/Editor/GameEvents/Bool.meta | 3 - .../GameEvents/Bool/BoolGameEventEditor.cs | 14 --- Assets/Editor/GameEvents/Float.meta | 3 - .../GameEvents/Float/FloatGameEventEditor.cs | 14 --- Assets/Editor/GameEvents/Game.meta | 3 - .../Editor/GameEvents/Game/GameEventEditor.cs | 44 ------- .../GameEvents/Game/GameEventEditor.cs.meta | 3 - Assets/Editor/GameEvents/GameEventEditors.cs | 69 ----------- .../GameEvents/GameEventEditors.cs.meta | 3 - Assets/Editor/GameEvents/GameObject.meta | 8 -- .../GameObjectGameEventEditor.cs.meta | 11 -- Assets/Editor/GameEvents/Generic.meta | 8 -- .../Generic/ArgumentGameEventEditor.cs | 49 -------- .../Generic/ArgumentGameEventEditor.cs.meta | 3 - Assets/Editor/GameEvents/Int.meta | 3 - .../GameEvents/Int/IntGameEventEditor.cs | 14 --- Assets/Editor/GameEvents/String.meta | 3 - .../String/StringGameEventEditor.cs | 14 --- Assets/Editor/GameEvents/Transform.meta | 3 - Assets/Editor/GameEvents/Vector2.meta | 3 - Assets/Editor/GameEvents/Vector3.meta | 3 - .../GameObjectGameEventEditor.cs | 8 +- .../GameObjectGameEventEditor.cs.meta | 0 Assets/Editor/IntGameEventEditor.cs | 14 +++ .../Int => }/IntGameEventEditor.cs.meta | 0 Assets/Editor/SimpleEventEditor.cs | 15 +++ Assets/Editor/SimpleEventEditor.cs.meta | 3 + Assets/Editor/StringGameEventEditor.cs | 14 +++ .../String => }/StringGameEventEditor.cs.meta | 0 ...tEditor.cs => TransformGameEventEditor.cs} | 8 +- .../Editor/TransformGameEventEditor.cs.meta | 3 + .../Vector2 => }/Vector2GameEventEditor.cs | 8 +- .../Vector2GameEventEditor.cs.meta | 0 .../Vector3 => }/Vector3GameEventEditor.cs | 8 +- .../Vector3GameEventEditor.cs.meta | 0 Assets/Runtime/BaseGameEvent.cs | 2 - Assets/Runtime/{GameEvents => }/Bool.meta | 0 .../{GameEvents => }/Bool/BoolGameEvent.cs | 5 +- .../Bool/BoolGameEvent.cs.meta | 0 Assets/Runtime/Bool/BoolGameEventListener.cs | 9 ++ .../Bool/BoolGameEventListener.cs.meta | 0 .../BoolEvent.cs => Bool/BoolUnityEvent.cs} | 2 +- .../BoolUnityEvent.cs.meta} | 0 Assets/Runtime/{GameEvents => }/Float.meta | 0 .../{GameEvents => }/Float/FloatGameEvent.cs | 5 +- .../Float/FloatGameEvent.cs.meta | 0 .../Runtime/Float/FloatGameEventListener.cs | 10 ++ .../Float/FloatGameEventListener.cs.meta | 0 .../FloatUnityEvent.cs} | 2 +- .../FloatUnityEvent.cs.meta} | 0 Assets/Runtime/GameEvents.meta | 8 -- .../GameEvents/Bool/BoolGameEventListener.cs | 10 -- Assets/Runtime/GameEvents/Empty.meta | 3 - Assets/Runtime/GameEvents/Empty/EmptyArg.cs | 11 -- .../GameEvents/Empty/EmptyUnityEvent.cs | 10 -- Assets/Runtime/GameEvents/Empty/GameEvent.cs | 13 -- .../GameEvents/Empty/GameEventListener.cs | 6 - .../Float/FloatGameEventListener.cs | 11 -- Assets/Runtime/GameEvents/Game/GameEvent.cs | 75 ------------ .../Runtime/GameEvents/Game/GameEvent.cs.meta | 3 - .../GameEvents/Game/GameEventListener.cs | 10 -- .../GameEvents/Game/GameEventListener.cs.meta | 3 - Assets/Runtime/GameEvents/Generic.meta | 3 - .../GameEvents/Generic/ArgumentGameEvent.cs | 74 ------------ .../Generic/ArgumentGameEvent.cs.meta | 11 -- .../Generic/ArgumentGameEventListener.cs | 57 --------- .../Generic/ArgumentGameEventListener.cs.meta | 3 - .../Generic/BaseGameEventListener.cs | 51 -------- .../Generic/BaseGameEventListener.cs.meta | 11 -- .../GameEvents/Generic/IArgumentGameEvent.cs | 27 ----- .../Generic/IArgumentGameEvent.cs.meta | 3 - .../Generic/IArgumentGameEventListener.cs | 10 -- .../IArgumentGameEventListener.cs.meta | 3 - .../Runtime/GameEvents/Generic/IGameEvent.cs | 27 ----- .../GameEvents/Generic/IGameEvent.cs.meta | 3 - .../GameEvents/Generic/IGameEventListener.cs | 10 -- .../Generic/IGameEventListener.cs.meta | 3 - .../GameEvents/Int/IntGameEventListener.cs | 10 -- .../String/StringGameEventListener.cs | 11 -- .../Runtime/{GameEvents => }/GameObject.meta | 0 .../GameObject/GameObjectGameEvent.cs | 5 +- .../GameObject/GameObjectGameEvent.cs.meta | 0 .../GameObject/GameObjectGameEventListener.cs | 5 +- .../GameObjectGameEventListener.cs.meta | 0 .../GameObjectUnityEvent.cs} | 2 +- .../GameObjectUnityEvent.cs.meta} | 0 Assets/Runtime/{GameEvents => }/Int.meta | 0 .../{GameEvents => }/Int/IntGameEvent.cs | 5 +- .../{GameEvents => }/Int/IntGameEvent.cs.meta | 0 Assets/Runtime/Int/IntGameEventListener.cs | 9 ++ .../Int/IntGameEventListener.cs.meta | 0 .../Int/IntEvent.cs => Int/IntUnityEvent.cs} | 2 +- .../IntUnityEvent.cs.meta} | 0 .../{GameEvents/Game.meta => Simple.meta} | 0 Assets/Runtime/Simple/SimpleArg.cs | 11 ++ .../SimpleArg.cs.meta} | 0 Assets/Runtime/Simple/SimpleGameEvent.cs | 16 +++ .../SimpleGameEvent.cs.meta} | 0 .../Runtime/Simple/SimpleGameEventListener.cs | 7 ++ .../SimpleGameEventListener.cs.meta} | 0 Assets/Runtime/Simple/SimpleUnityEvent.cs | 10 ++ .../SimpleUnityEvent.cs.meta} | 0 Assets/Runtime/{GameEvents => }/String.meta | 0 .../String/StringGameEvent.cs | 5 +- .../String/StringGameEvent.cs.meta | 0 .../Runtime/String/StringGameEventListener.cs | 10 ++ .../String/StringGameEventListener.cs.meta | 0 .../StringUnityEvent.cs} | 2 +- .../StringUnityEvent.cs.meta} | 0 .../Runtime/{GameEvents => }/Transform.meta | 0 .../Transform/TransformGameEvent.cs | 5 +- .../Transform/TransformGameEvent.cs.meta | 0 .../Transform/TransformGameEventListener.cs | 5 +- .../TransformGameEventListener.cs.meta | 0 .../TransformUnityEvent.cs} | 2 +- .../TransformUnityEvent.cs.meta} | 0 Assets/Runtime/{GameEvents => }/Vector2.meta | 0 .../Vector2/Vector2GameEvent.cs | 5 +- .../Vector2/Vector2GameEvent.cs.meta | 0 .../Vector2/Vector2GameEventListener.cs | 5 +- .../Vector2/Vector2GameEventListener.cs.meta | 0 .../Vector2UnityEvent.cs} | 2 +- .../Vector2UnityEvent.cs.meta} | 0 Assets/Runtime/{GameEvents => }/Vector3.meta | 0 .../Vector3/Vector3GameEvent.cs | 5 +- .../Vector3/Vector3GameEvent.cs.meta | 0 .../Vector3/Vector3GameEventListener.cs | 5 +- .../Vector3/Vector3GameEventListener.cs.meta | 0 .../VectorUnity3Event.cs} | 2 +- .../VectorUnity3Event.cs.meta} | 0 .../Tests/Runtime/GameEvents/GameEventTest.cs | 12 +- Assets/package.json | 6 +- Chark.GameEvents.Editor.csproj.DotSettings | 2 + game-events.sln.DotSettings | 3 + 141 files changed, 338 insertions(+), 837 deletions(-) create mode 100644 Assets/Editor/BaseGameEventEditor.cs create mode 100644 Assets/Editor/BaseGameEventEditor.cs.meta create mode 100644 Assets/Editor/BoolGameEventEditor.cs rename Assets/Editor/{GameEvents/Bool => }/BoolGameEventEditor.cs.meta (100%) create mode 100644 Assets/Editor/FloatGameEventEditor.cs rename Assets/Editor/{GameEvents/Float => }/FloatGameEventEditor.cs.meta (100%) delete mode 100644 Assets/Editor/GameEvents.meta delete mode 100644 Assets/Editor/GameEvents/Bool.meta delete mode 100644 Assets/Editor/GameEvents/Bool/BoolGameEventEditor.cs delete mode 100644 Assets/Editor/GameEvents/Float.meta delete mode 100644 Assets/Editor/GameEvents/Float/FloatGameEventEditor.cs delete mode 100644 Assets/Editor/GameEvents/Game.meta delete mode 100644 Assets/Editor/GameEvents/Game/GameEventEditor.cs delete mode 100644 Assets/Editor/GameEvents/Game/GameEventEditor.cs.meta delete mode 100644 Assets/Editor/GameEvents/GameEventEditors.cs delete mode 100644 Assets/Editor/GameEvents/GameEventEditors.cs.meta delete mode 100644 Assets/Editor/GameEvents/GameObject.meta delete mode 100644 Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs.meta delete mode 100644 Assets/Editor/GameEvents/Generic.meta delete mode 100644 Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs delete mode 100644 Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs.meta delete mode 100644 Assets/Editor/GameEvents/Int.meta delete mode 100644 Assets/Editor/GameEvents/Int/IntGameEventEditor.cs delete mode 100644 Assets/Editor/GameEvents/String.meta delete mode 100644 Assets/Editor/GameEvents/String/StringGameEventEditor.cs delete mode 100644 Assets/Editor/GameEvents/Transform.meta delete mode 100644 Assets/Editor/GameEvents/Vector2.meta delete mode 100644 Assets/Editor/GameEvents/Vector3.meta rename Assets/Editor/{GameEvents/GameObject => }/GameObjectGameEventEditor.cs (58%) rename Assets/Editor/{GameEvents/Transform => }/GameObjectGameEventEditor.cs.meta (100%) create mode 100644 Assets/Editor/IntGameEventEditor.cs rename Assets/Editor/{GameEvents/Int => }/IntGameEventEditor.cs.meta (100%) create mode 100644 Assets/Editor/SimpleEventEditor.cs create mode 100644 Assets/Editor/SimpleEventEditor.cs.meta create mode 100644 Assets/Editor/StringGameEventEditor.cs rename Assets/Editor/{GameEvents/String => }/StringGameEventEditor.cs.meta (100%) rename Assets/Editor/{GameEvents/Transform/GameObjectGameEventEditor.cs => TransformGameEventEditor.cs} (58%) create mode 100644 Assets/Editor/TransformGameEventEditor.cs.meta rename Assets/Editor/{GameEvents/Vector2 => }/Vector2GameEventEditor.cs (51%) rename Assets/Editor/{GameEvents/Vector2 => }/Vector2GameEventEditor.cs.meta (100%) rename Assets/Editor/{GameEvents/Vector3 => }/Vector3GameEventEditor.cs (51%) rename Assets/Editor/{GameEvents/Vector3 => }/Vector3GameEventEditor.cs.meta (100%) rename Assets/Runtime/{GameEvents => }/Bool.meta (100%) rename Assets/Runtime/{GameEvents => }/Bool/BoolGameEvent.cs (56%) rename Assets/Runtime/{GameEvents => }/Bool/BoolGameEvent.cs.meta (100%) create mode 100644 Assets/Runtime/Bool/BoolGameEventListener.cs rename Assets/Runtime/{GameEvents => }/Bool/BoolGameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/Bool/BoolEvent.cs => Bool/BoolUnityEvent.cs} (67%) rename Assets/Runtime/{GameEvents/Bool/BoolEvent.cs.meta => Bool/BoolUnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents => }/Float.meta (100%) rename Assets/Runtime/{GameEvents => }/Float/FloatGameEvent.cs (56%) rename Assets/Runtime/{GameEvents => }/Float/FloatGameEvent.cs.meta (100%) create mode 100644 Assets/Runtime/Float/FloatGameEventListener.cs rename Assets/Runtime/{GameEvents => }/Float/FloatGameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/Float/FloatEvent.cs => Float/FloatUnityEvent.cs} (66%) rename Assets/Runtime/{GameEvents/Float/FloatEvent.cs.meta => Float/FloatUnityEvent.cs.meta} (100%) delete mode 100644 Assets/Runtime/GameEvents.meta delete mode 100644 Assets/Runtime/GameEvents/Bool/BoolGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Empty.meta delete mode 100644 Assets/Runtime/GameEvents/Empty/EmptyArg.cs delete mode 100644 Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs delete mode 100644 Assets/Runtime/GameEvents/Empty/GameEvent.cs delete mode 100644 Assets/Runtime/GameEvents/Empty/GameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Float/FloatGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Game/GameEvent.cs delete mode 100644 Assets/Runtime/GameEvents/Game/GameEvent.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Game/GameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Game/GameEventListener.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/IGameEvent.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/IGameEvent.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Generic/IGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/Generic/IGameEventListener.cs.meta delete mode 100644 Assets/Runtime/GameEvents/Int/IntGameEventListener.cs delete mode 100644 Assets/Runtime/GameEvents/String/StringGameEventListener.cs rename Assets/Runtime/{GameEvents => }/GameObject.meta (100%) rename Assets/Runtime/{GameEvents => }/GameObject/GameObjectGameEvent.cs (52%) rename Assets/Runtime/{GameEvents => }/GameObject/GameObjectGameEvent.cs.meta (100%) rename Assets/Runtime/{GameEvents => }/GameObject/GameObjectGameEventListener.cs (52%) rename Assets/Runtime/{GameEvents => }/GameObject/GameObjectGameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/GameObject/GameObjectEvent.cs => GameObject/GameObjectUnityEvent.cs} (59%) rename Assets/Runtime/{GameEvents/GameObject/GameObjectEvent.cs.meta => GameObject/GameObjectUnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents => }/Int.meta (100%) rename Assets/Runtime/{GameEvents => }/Int/IntGameEvent.cs (56%) rename Assets/Runtime/{GameEvents => }/Int/IntGameEvent.cs.meta (100%) create mode 100644 Assets/Runtime/Int/IntGameEventListener.cs rename Assets/Runtime/{GameEvents => }/Int/IntGameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/Int/IntEvent.cs => Int/IntUnityEvent.cs} (67%) rename Assets/Runtime/{GameEvents/Int/IntEvent.cs.meta => Int/IntUnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents/Game.meta => Simple.meta} (100%) create mode 100644 Assets/Runtime/Simple/SimpleArg.cs rename Assets/Runtime/{GameEvents/Empty/EmptyArg.cs.meta => Simple/SimpleArg.cs.meta} (100%) create mode 100644 Assets/Runtime/Simple/SimpleGameEvent.cs rename Assets/Runtime/{GameEvents/Empty/GameEvent.cs.meta => Simple/SimpleGameEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Simple/SimpleGameEventListener.cs rename Assets/Runtime/{GameEvents/Empty/GameEventListener.cs.meta => Simple/SimpleGameEventListener.cs.meta} (100%) create mode 100644 Assets/Runtime/Simple/SimpleUnityEvent.cs rename Assets/Runtime/{GameEvents/Empty/EmptyUnityEvent.cs.meta => Simple/SimpleUnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents => }/String.meta (100%) rename Assets/Runtime/{GameEvents => }/String/StringGameEvent.cs (56%) rename Assets/Runtime/{GameEvents => }/String/StringGameEvent.cs.meta (100%) create mode 100644 Assets/Runtime/String/StringGameEventListener.cs rename Assets/Runtime/{GameEvents => }/String/StringGameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/String/StringEvent.cs => String/StringUnityEvent.cs} (66%) rename Assets/Runtime/{GameEvents/String/StringEvent.cs.meta => String/StringUnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents => }/Transform.meta (100%) rename Assets/Runtime/{GameEvents => }/Transform/TransformGameEvent.cs (57%) rename Assets/Runtime/{GameEvents => }/Transform/TransformGameEvent.cs.meta (100%) rename Assets/Runtime/{GameEvents => }/Transform/TransformGameEventListener.cs (52%) rename Assets/Runtime/{GameEvents => }/Transform/TransformGameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/Transform/TransformEvent.cs => Transform/TransformUnityEvent.cs} (60%) rename Assets/Runtime/{GameEvents/Transform/TransformEvent.cs.meta => Transform/TransformUnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents => }/Vector2.meta (100%) rename Assets/Runtime/{GameEvents => }/Vector2/Vector2GameEvent.cs (53%) rename Assets/Runtime/{GameEvents => }/Vector2/Vector2GameEvent.cs.meta (100%) rename Assets/Runtime/{GameEvents => }/Vector2/Vector2GameEventListener.cs (52%) rename Assets/Runtime/{GameEvents => }/Vector2/Vector2GameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/Vector2/Vector2Event.cs => Vector2/Vector2UnityEvent.cs} (61%) rename Assets/Runtime/{GameEvents/Vector2/Vector2Event.cs.meta => Vector2/Vector2UnityEvent.cs.meta} (100%) rename Assets/Runtime/{GameEvents => }/Vector3.meta (100%) rename Assets/Runtime/{GameEvents => }/Vector3/Vector3GameEvent.cs (53%) rename Assets/Runtime/{GameEvents => }/Vector3/Vector3GameEvent.cs.meta (100%) rename Assets/Runtime/{GameEvents => }/Vector3/Vector3GameEventListener.cs (52%) rename Assets/Runtime/{GameEvents => }/Vector3/Vector3GameEventListener.cs.meta (100%) rename Assets/Runtime/{GameEvents/Vector3/Vector3Event.cs => Vector3/VectorUnity3Event.cs} (61%) rename Assets/Runtime/{GameEvents/Vector3/Vector3Event.cs.meta => Vector3/VectorUnity3Event.cs.meta} (100%) create mode 100644 Chark.GameEvents.Editor.csproj.DotSettings create mode 100644 game-events.sln.DotSettings diff --git a/Assets/Editor/BaseGameEventEditor.cs b/Assets/Editor/BaseGameEventEditor.cs new file mode 100644 index 0000000..4381247 --- /dev/null +++ b/Assets/Editor/BaseGameEventEditor.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace GameEvents.Editor +{ + [CanEditMultipleObjects] + public abstract class BaseGameEventEditor + : UnityEditor.Editor + where TGameEvent : class, IGameEvent + { + #region Fields + + private SerializedProperty descriptionField; + private TArg argValue; + + #endregion + + #region Unity Lifecycle + + public void OnEnable() + { + // todo: add locking https://github.com/roboryantron/Unite2017/blob/master/Assets/Code/Variables/Editor/FloatReferenceDrawer.cs + descriptionField = serializedObject.FindProperty("description"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + if (!(target is TGameEvent gameEvent)) + { + return; + } + + GUI.enabled = Application.isPlaying; + EditorGUILayout.Space(); + + DrawRaise(gameEvent); + + EditorGUILayout.Space(); + DrawReferences(gameEvent); + } + + #endregion + + #region Methods + + private void DrawRaise(TGameEvent gameEvent) + { + DrawPlaymodeLabel("Raise event"); + GUILayout.BeginHorizontal(); + + argValue = DrawArgField(argValue); + if (GUILayout.Button("Raise")) + { + gameEvent.Raise(argValue); + } + + GUILayout.EndHorizontal(); + } + + /// + /// Value that is entered in the game event argument field. + /// + protected abstract TArg DrawArgField(TArg value); + + private static void DrawReferences(IGameEvent gameEvent) + { + DrawListeners(gameEvent.Listeners); + } + + private static void DrawPlaymodeLabel(string text) + { + var labelSuffix = Application.isPlaying ? "" : "(play mode only)"; + GUILayout.Label($"{text} {labelSuffix}"); + } + + private static void DrawListeners(ICollection listeners) + { + DrawPlaymodeLabel("Listeners"); + if (Application.isPlaying) + { + if (listeners.Count == 0) + { + EditorGUILayout.HelpBox( + "There are no listeners listening for this event", + MessageType.Warning + ); + + return; + } + + foreach (var listener in listeners) + { + if (listener is MonoBehaviour behaviour) + { + EditorGUILayout.ObjectField(behaviour, typeof(UnityEngine.Object), true); + } + } + } + else + { + EditorGUILayout.HelpBox( + "Registered listeners will be displayed here", + MessageType.Info + ); + } + } + + #endregion + } +} diff --git a/Assets/Editor/BaseGameEventEditor.cs.meta b/Assets/Editor/BaseGameEventEditor.cs.meta new file mode 100644 index 0000000..484f239 --- /dev/null +++ b/Assets/Editor/BaseGameEventEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 71bc42aedc0346228c8a9bc64767ced5 +timeCreated: 1611217275 \ No newline at end of file diff --git a/Assets/Editor/BoolGameEventEditor.cs b/Assets/Editor/BoolGameEventEditor.cs new file mode 100644 index 0000000..aa12ece --- /dev/null +++ b/Assets/Editor/BoolGameEventEditor.cs @@ -0,0 +1,14 @@ +using GameEvents.Bool; +using UnityEditor; + +namespace GameEvents.Editor +{ + [CustomEditor(typeof(BoolGameEvent))] + public class BoolGameEventEditor : BaseGameEventEditor + { + protected override bool DrawArgField(bool value) + { + return EditorGUILayout.Toggle(value); + } + } +} diff --git a/Assets/Editor/GameEvents/Bool/BoolGameEventEditor.cs.meta b/Assets/Editor/BoolGameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/Bool/BoolGameEventEditor.cs.meta rename to Assets/Editor/BoolGameEventEditor.cs.meta diff --git a/Assets/Editor/FloatGameEventEditor.cs b/Assets/Editor/FloatGameEventEditor.cs new file mode 100644 index 0000000..52d47e0 --- /dev/null +++ b/Assets/Editor/FloatGameEventEditor.cs @@ -0,0 +1,14 @@ +using GameEvents.Float; +using UnityEditor; + +namespace GameEvents.Editor +{ + [CustomEditor(typeof(FloatGameEvent))] + public class FloatGameEventEditor : BaseGameEventEditor + { + protected override float DrawArgField(float value) + { + return EditorGUILayout.FloatField(value); + } + } +} diff --git a/Assets/Editor/GameEvents/Float/FloatGameEventEditor.cs.meta b/Assets/Editor/FloatGameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/Float/FloatGameEventEditor.cs.meta rename to Assets/Editor/FloatGameEventEditor.cs.meta diff --git a/Assets/Editor/GameEvents.meta b/Assets/Editor/GameEvents.meta deleted file mode 100644 index a6e8f61..0000000 --- a/Assets/Editor/GameEvents.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cbcc665b02ec09a4eabb8541ac606e5b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor/GameEvents/Bool.meta b/Assets/Editor/GameEvents/Bool.meta deleted file mode 100644 index 8767f2c..0000000 --- a/Assets/Editor/GameEvents/Bool.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 34167708c84442588aafd6c7ff8808dd -timeCreated: 1601721644 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Bool/BoolGameEventEditor.cs b/Assets/Editor/GameEvents/Bool/BoolGameEventEditor.cs deleted file mode 100644 index cc9a469..0000000 --- a/Assets/Editor/GameEvents/Bool/BoolGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Generic; -using UnityEditor; - -namespace GameEvents.Bool -{ - [CustomEditor(typeof(BoolGameEvent))] - public class BoolGameEventEditor : ArgumentGameEventEditor - { - protected override bool DrawArgumentField(bool value) - { - return EditorGUILayout.Toggle(value); - } - } -} diff --git a/Assets/Editor/GameEvents/Float.meta b/Assets/Editor/GameEvents/Float.meta deleted file mode 100644 index 41f6e4f..0000000 --- a/Assets/Editor/GameEvents/Float.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 78bb1224441446668ebad91d1301bd49 -timeCreated: 1601721624 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Float/FloatGameEventEditor.cs b/Assets/Editor/GameEvents/Float/FloatGameEventEditor.cs deleted file mode 100644 index 1348e12..0000000 --- a/Assets/Editor/GameEvents/Float/FloatGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Generic; -using UnityEditor; - -namespace GameEvents.Float -{ - [CustomEditor(typeof(FloatGameEvent))] - public class FloatGameEventEditor : ArgumentGameEventEditor - { - protected override float DrawArgumentField(float value) - { - return EditorGUILayout.FloatField(value); - } - } -} diff --git a/Assets/Editor/GameEvents/Game.meta b/Assets/Editor/GameEvents/Game.meta deleted file mode 100644 index 1654493..0000000 --- a/Assets/Editor/GameEvents/Game.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 552df535d6024270b6dbdabd6cd01ed9 -timeCreated: 1601721674 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Game/GameEventEditor.cs b/Assets/Editor/GameEvents/Game/GameEventEditor.cs deleted file mode 100644 index 8507006..0000000 --- a/Assets/Editor/GameEvents/Game/GameEventEditor.cs +++ /dev/null @@ -1,44 +0,0 @@ -using GameEvents.Generic; -using UnityEditor; -using UnityEngine; - -namespace GameEvents.Game -{ - [CanEditMultipleObjects] - [CustomEditor(typeof(GameEvent))] - public class GameEventEditor : Editor - { - public override void OnInspectorGUI() - { - base.OnInspectorGUI(); - - var gameEvent = target as GameEvent; - if (gameEvent == null) - { - return; - } - - GUI.enabled = Application.isPlaying; - EditorGUILayout.Space(); - - DrawRaise(gameEvent); - - if (!Application.isPlaying) - { - return; - } - - EditorGUILayout.Space(); - GameEventEditors.DrawReferences(gameEvent); - } - - private static void DrawRaise(IGameEvent gameEvent) - { - GameEventEditors.DrawPlaymodeLabel("Raise event"); - if (GUILayout.Button("Raise")) - { - gameEvent.RaiseGameEvent(); - } - } - } -} diff --git a/Assets/Editor/GameEvents/Game/GameEventEditor.cs.meta b/Assets/Editor/GameEvents/Game/GameEventEditor.cs.meta deleted file mode 100644 index 2cc8ebe..0000000 --- a/Assets/Editor/GameEvents/Game/GameEventEditor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: aefbcf645ce54017af595ee80a2b6aaf -timeCreated: 1601505993 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/GameEventEditors.cs b/Assets/Editor/GameEvents/GameEventEditors.cs deleted file mode 100644 index f867f83..0000000 --- a/Assets/Editor/GameEvents/GameEventEditors.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using GameEvents.Generic; -using UnityEditor; -using UnityEngine; - -namespace GameEvents -{ - public static class GameEventEditors - { - /// - /// Draw a list of argument game event listener references. - /// - public static void DrawReferences( - IArgumentGameEvent gameEvent - ) - { - DrawListeners(gameEvent.Listeners); - } - - /// - /// Draw a list of game event listener references. - /// - public static void DrawReferences(IGameEvent gameEvent) - { - DrawListeners(gameEvent.Listeners); - } - - /// - /// Draw a label which changes its suffix based on play mode state. - /// - public static void DrawPlaymodeLabel(string text) - { - var labelSuffix = Application.isPlaying ? "" : "(play mode only)"; - GUILayout.Label($"{text} {labelSuffix}"); - } - - private static void DrawListeners(ICollection listeners) - { - DrawPlaymodeLabel("Listeners"); - if (Application.isPlaying) - { - if (listeners.Count == 0) - { - EditorGUILayout.HelpBox( - "There are no listeners on this event", - MessageType.Warning - ); - - return; - } - - foreach (var listener in listeners) - { - if (listener is MonoBehaviour behaviour) - { - EditorGUILayout.ObjectField(behaviour, typeof(Object), true); - } - } - } - else - { - EditorGUILayout.HelpBox( - "Registered listeners will be displayed here", - MessageType.Info - ); - } - } - } -} diff --git a/Assets/Editor/GameEvents/GameEventEditors.cs.meta b/Assets/Editor/GameEvents/GameEventEditors.cs.meta deleted file mode 100644 index b52dc18..0000000 --- a/Assets/Editor/GameEvents/GameEventEditors.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0b8ab43a41cc4902a452e98af8e27a04 -timeCreated: 1602580628 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/GameObject.meta b/Assets/Editor/GameEvents/GameObject.meta deleted file mode 100644 index dbf658e..0000000 --- a/Assets/Editor/GameEvents/GameObject.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3bd3d37f552f4556b5abcdafc361945d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs.meta b/Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs.meta deleted file mode 100644 index ca44439..0000000 --- a/Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a7950ca1c5ef3a74aa19eaa9bf5b26c8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor/GameEvents/Generic.meta b/Assets/Editor/GameEvents/Generic.meta deleted file mode 100644 index b9c60dd..0000000 --- a/Assets/Editor/GameEvents/Generic.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 64263b88ab86c2043913d3478aa388ea -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs b/Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs deleted file mode 100644 index 27ac0a8..0000000 --- a/Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs +++ /dev/null @@ -1,49 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace GameEvents.Generic -{ - [CanEditMultipleObjects] - public abstract class ArgumentGameEventEditor : Editor - where TGameEvent : class, IArgumentGameEvent - { - private TArgument argumentValue = default; - - public override void OnInspectorGUI() - { - base.OnInspectorGUI(); - - if (!(target is TGameEvent gameEvent)) - { - return; - } - - GUI.enabled = Application.isPlaying; - EditorGUILayout.Space(); - - DrawRaise(gameEvent); - - EditorGUILayout.Space(); - GameEventEditors.DrawReferences(gameEvent); - } - - private void DrawRaise(TGameEvent gameEvent) - { - GameEventEditors.DrawPlaymodeLabel("Raise event"); - GUILayout.BeginHorizontal(); - - argumentValue = DrawArgumentField(argumentValue); - if (GUILayout.Button("Raise")) - { - gameEvent.RaiseGameEvent(argumentValue); - } - - GUILayout.EndHorizontal(); - } - - /// - /// Value that is entered in the argument field. - /// - protected abstract TArgument DrawArgumentField(TArgument value); - } -} diff --git a/Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs.meta b/Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs.meta deleted file mode 100644 index a73e45f..0000000 --- a/Assets/Editor/GameEvents/Generic/ArgumentGameEventEditor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c1612c78d6e34250a68141b82ff6d894 -timeCreated: 1601501695 diff --git a/Assets/Editor/GameEvents/Int.meta b/Assets/Editor/GameEvents/Int.meta deleted file mode 100644 index 9f549af..0000000 --- a/Assets/Editor/GameEvents/Int.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 49b514db2c774b26a87cea2ef32b4687 -timeCreated: 1601721604 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Int/IntGameEventEditor.cs b/Assets/Editor/GameEvents/Int/IntGameEventEditor.cs deleted file mode 100644 index f9e838f..0000000 --- a/Assets/Editor/GameEvents/Int/IntGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Generic; -using UnityEditor; - -namespace GameEvents.Int -{ - [CustomEditor(typeof(IntGameEvent))] - public class IntGameEventEditor : ArgumentGameEventEditor - { - protected override int DrawArgumentField(int value) - { - return EditorGUILayout.IntField(value); - } - } -} diff --git a/Assets/Editor/GameEvents/String.meta b/Assets/Editor/GameEvents/String.meta deleted file mode 100644 index c4b2133..0000000 --- a/Assets/Editor/GameEvents/String.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a6ec7806d24c4a288012c9db2307e9ef -timeCreated: 1601721579 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/String/StringGameEventEditor.cs b/Assets/Editor/GameEvents/String/StringGameEventEditor.cs deleted file mode 100644 index e95da81..0000000 --- a/Assets/Editor/GameEvents/String/StringGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Generic; -using UnityEditor; - -namespace GameEvents.String -{ - [CustomEditor(typeof(StringGameEvent))] - public class StringGameEventEditor : ArgumentGameEventEditor - { - protected override string DrawArgumentField(string value) - { - return EditorGUILayout.TextField(value); - } - } -} diff --git a/Assets/Editor/GameEvents/Transform.meta b/Assets/Editor/GameEvents/Transform.meta deleted file mode 100644 index 22bb00f..0000000 --- a/Assets/Editor/GameEvents/Transform.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 703e3d5cb1cc43d181567521f66b2b99 -timeCreated: 1602360189 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Vector2.meta b/Assets/Editor/GameEvents/Vector2.meta deleted file mode 100644 index 513a646..0000000 --- a/Assets/Editor/GameEvents/Vector2.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ddf1da149e354e49867cd11e27b6dbe4 -timeCreated: 1601721543 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Vector3.meta b/Assets/Editor/GameEvents/Vector3.meta deleted file mode 100644 index 1b31307..0000000 --- a/Assets/Editor/GameEvents/Vector3.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5bc1c7979217484f816520ba3c2e374d -timeCreated: 1601721475 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs b/Assets/Editor/GameObjectGameEventEditor.cs similarity index 58% rename from Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs rename to Assets/Editor/GameObjectGameEventEditor.cs index 5c17342..376bf47 100644 --- a/Assets/Editor/GameEvents/GameObject/GameObjectGameEventEditor.cs +++ b/Assets/Editor/GameObjectGameEventEditor.cs @@ -1,13 +1,13 @@ -using GameEvents.Generic; +using GameEvents.GameObject; using UnityEditor; -namespace GameEvents.GameObject +namespace GameEvents.Editor { [CustomEditor(typeof(GameObjectGameEvent))] public class GameObjectGameEventEditor - : ArgumentGameEventEditor + : BaseGameEventEditor { - protected override UnityEngine.GameObject DrawArgumentField(UnityEngine.GameObject value) + protected override UnityEngine.GameObject DrawArgField(UnityEngine.GameObject value) { var fieldValue = EditorGUILayout .ObjectField(value, typeof(UnityEngine.GameObject), true); diff --git a/Assets/Editor/GameEvents/Transform/GameObjectGameEventEditor.cs.meta b/Assets/Editor/GameObjectGameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/Transform/GameObjectGameEventEditor.cs.meta rename to Assets/Editor/GameObjectGameEventEditor.cs.meta diff --git a/Assets/Editor/IntGameEventEditor.cs b/Assets/Editor/IntGameEventEditor.cs new file mode 100644 index 0000000..4c89eef --- /dev/null +++ b/Assets/Editor/IntGameEventEditor.cs @@ -0,0 +1,14 @@ +using GameEvents.Int; +using UnityEditor; + +namespace GameEvents.Editor +{ + [CustomEditor(typeof(IntGameEvent))] + public class IntGameEventEditor : BaseGameEventEditor + { + protected override int DrawArgField(int value) + { + return EditorGUILayout.IntField(value); + } + } +} diff --git a/Assets/Editor/GameEvents/Int/IntGameEventEditor.cs.meta b/Assets/Editor/IntGameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/Int/IntGameEventEditor.cs.meta rename to Assets/Editor/IntGameEventEditor.cs.meta diff --git a/Assets/Editor/SimpleEventEditor.cs b/Assets/Editor/SimpleEventEditor.cs new file mode 100644 index 0000000..df1f755 --- /dev/null +++ b/Assets/Editor/SimpleEventEditor.cs @@ -0,0 +1,15 @@ +using GameEvents.Simple; +using UnityEditor; + +namespace GameEvents.Editor +{ + [CustomEditor(typeof(SimpleGameEvent))] + public class SimpleEventEditor : BaseGameEventEditor + { + protected override SimpleArg DrawArgField(SimpleArg value) + { + // SimpleGameEvent "doesn't take" an arg. + return value; + } + } +} diff --git a/Assets/Editor/SimpleEventEditor.cs.meta b/Assets/Editor/SimpleEventEditor.cs.meta new file mode 100644 index 0000000..3da8b44 --- /dev/null +++ b/Assets/Editor/SimpleEventEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f53c2ce1f4654ed58dbf78ae486a448d +timeCreated: 1611217717 \ No newline at end of file diff --git a/Assets/Editor/StringGameEventEditor.cs b/Assets/Editor/StringGameEventEditor.cs new file mode 100644 index 0000000..3528c44 --- /dev/null +++ b/Assets/Editor/StringGameEventEditor.cs @@ -0,0 +1,14 @@ +using GameEvents.String; +using UnityEditor; + +namespace GameEvents.Editor +{ + [CustomEditor(typeof(StringGameEvent))] + public class StringGameEventEditor : BaseGameEventEditor + { + protected override string DrawArgField(string value) + { + return EditorGUILayout.TextField(value); + } + } +} diff --git a/Assets/Editor/GameEvents/String/StringGameEventEditor.cs.meta b/Assets/Editor/StringGameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/String/StringGameEventEditor.cs.meta rename to Assets/Editor/StringGameEventEditor.cs.meta diff --git a/Assets/Editor/GameEvents/Transform/GameObjectGameEventEditor.cs b/Assets/Editor/TransformGameEventEditor.cs similarity index 58% rename from Assets/Editor/GameEvents/Transform/GameObjectGameEventEditor.cs rename to Assets/Editor/TransformGameEventEditor.cs index 48083fe..9cfd0c7 100644 --- a/Assets/Editor/GameEvents/Transform/GameObjectGameEventEditor.cs +++ b/Assets/Editor/TransformGameEventEditor.cs @@ -1,13 +1,13 @@ -using GameEvents.Generic; +using GameEvents.Transform; using UnityEditor; -namespace GameEvents.Transform +namespace GameEvents.Editor { [CustomEditor(typeof(TransformGameEvent))] public class TransformGameEventEditor - : ArgumentGameEventEditor + : BaseGameEventEditor { - protected override UnityEngine.Transform DrawArgumentField(UnityEngine.Transform value) + protected override UnityEngine.Transform DrawArgField(UnityEngine.Transform value) { var fieldValue = EditorGUILayout .ObjectField(value, typeof(UnityEngine.Transform), true); diff --git a/Assets/Editor/TransformGameEventEditor.cs.meta b/Assets/Editor/TransformGameEventEditor.cs.meta new file mode 100644 index 0000000..34a91fe --- /dev/null +++ b/Assets/Editor/TransformGameEventEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 63fc5c913a8f47629857734fb0765467 +timeCreated: 1611219840 \ No newline at end of file diff --git a/Assets/Editor/GameEvents/Vector2/Vector2GameEventEditor.cs b/Assets/Editor/Vector2GameEventEditor.cs similarity index 51% rename from Assets/Editor/GameEvents/Vector2/Vector2GameEventEditor.cs rename to Assets/Editor/Vector2GameEventEditor.cs index 9572d82..6597ced 100644 --- a/Assets/Editor/GameEvents/Vector2/Vector2GameEventEditor.cs +++ b/Assets/Editor/Vector2GameEventEditor.cs @@ -1,14 +1,14 @@ -using GameEvents.Generic; +using GameEvents.Vector2; using UnityEditor; using UnityEngine; -namespace GameEvents.Vector2 +namespace GameEvents.Editor { [CustomEditor(typeof(Vector2GameEvent))] public class Vector2GameEventEditor - : ArgumentGameEventEditor + : BaseGameEventEditor { - protected override UnityEngine.Vector2 DrawArgumentField(UnityEngine.Vector2 value) + protected override UnityEngine.Vector2 DrawArgField(UnityEngine.Vector2 value) { return EditorGUILayout.Vector2Field(GUIContent.none, value); } diff --git a/Assets/Editor/GameEvents/Vector2/Vector2GameEventEditor.cs.meta b/Assets/Editor/Vector2GameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/Vector2/Vector2GameEventEditor.cs.meta rename to Assets/Editor/Vector2GameEventEditor.cs.meta diff --git a/Assets/Editor/GameEvents/Vector3/Vector3GameEventEditor.cs b/Assets/Editor/Vector3GameEventEditor.cs similarity index 51% rename from Assets/Editor/GameEvents/Vector3/Vector3GameEventEditor.cs rename to Assets/Editor/Vector3GameEventEditor.cs index f304492..d070c1d 100644 --- a/Assets/Editor/GameEvents/Vector3/Vector3GameEventEditor.cs +++ b/Assets/Editor/Vector3GameEventEditor.cs @@ -1,14 +1,14 @@ -using GameEvents.Generic; +using GameEvents.Vector3; using UnityEditor; using UnityEngine; -namespace GameEvents.Vector3 +namespace GameEvents.Editor { [CustomEditor(typeof(Vector3GameEvent))] public class Vector3GameEventEditor - : ArgumentGameEventEditor + : BaseGameEventEditor { - protected override UnityEngine.Vector3 DrawArgumentField(UnityEngine.Vector3 value) + protected override UnityEngine.Vector3 DrawArgField(UnityEngine.Vector3 value) { return EditorGUILayout.Vector3Field(GUIContent.none, value); } diff --git a/Assets/Editor/GameEvents/Vector3/Vector3GameEventEditor.cs.meta b/Assets/Editor/Vector3GameEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameEvents/Vector3/Vector3GameEventEditor.cs.meta rename to Assets/Editor/Vector3GameEventEditor.cs.meta diff --git a/Assets/Runtime/BaseGameEvent.cs b/Assets/Runtime/BaseGameEvent.cs index 21fc4d4..b3f16c9 100644 --- a/Assets/Runtime/BaseGameEvent.cs +++ b/Assets/Runtime/BaseGameEvent.cs @@ -9,8 +9,6 @@ public abstract class BaseGameEvent : ScriptableObject, IGameEvent { #region Editor - // todo: add locking https://github.com/roboryantron/Unite2017/blob/master/Assets/Code/Variables/Editor/FloatReferenceDrawer.cs - [Multiline(4)] [SerializeField] [Tooltip("Description of the game event")] private string description; diff --git a/Assets/Runtime/GameEvents/Bool.meta b/Assets/Runtime/Bool.meta similarity index 100% rename from Assets/Runtime/GameEvents/Bool.meta rename to Assets/Runtime/Bool.meta diff --git a/Assets/Runtime/GameEvents/Bool/BoolGameEvent.cs b/Assets/Runtime/Bool/BoolGameEvent.cs similarity index 56% rename from Assets/Runtime/GameEvents/Bool/BoolGameEvent.cs rename to Assets/Runtime/Bool/BoolGameEvent.cs index a7d2470..40f521f 100644 --- a/Assets/Runtime/GameEvents/Bool/BoolGameEvent.cs +++ b/Assets/Runtime/Bool/BoolGameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Bool { [CreateAssetMenu(fileName = "BoolGameEvent", menuName = "Game Events/Bool Game Event")] - public class BoolGameEvent : ArgumentGameEvent + public class BoolGameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/Bool/BoolGameEvent.cs.meta b/Assets/Runtime/Bool/BoolGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Bool/BoolGameEvent.cs.meta rename to Assets/Runtime/Bool/BoolGameEvent.cs.meta diff --git a/Assets/Runtime/Bool/BoolGameEventListener.cs b/Assets/Runtime/Bool/BoolGameEventListener.cs new file mode 100644 index 0000000..f061725 --- /dev/null +++ b/Assets/Runtime/Bool/BoolGameEventListener.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace GameEvents.Bool +{ + [AddComponentMenu("Game Events/Bool Game Event Listener")] + public class BoolGameEventListener : BaseGameEventListener + { + } +} diff --git a/Assets/Runtime/GameEvents/Bool/BoolGameEventListener.cs.meta b/Assets/Runtime/Bool/BoolGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Bool/BoolGameEventListener.cs.meta rename to Assets/Runtime/Bool/BoolGameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/Bool/BoolEvent.cs b/Assets/Runtime/Bool/BoolUnityEvent.cs similarity index 67% rename from Assets/Runtime/GameEvents/Bool/BoolEvent.cs rename to Assets/Runtime/Bool/BoolUnityEvent.cs index 915028b..676fbe6 100644 --- a/Assets/Runtime/GameEvents/Bool/BoolEvent.cs +++ b/Assets/Runtime/Bool/BoolUnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.Bool { [Serializable] - public class BoolEvent : UnityEvent + public class BoolUnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/Bool/BoolEvent.cs.meta b/Assets/Runtime/Bool/BoolUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Bool/BoolEvent.cs.meta rename to Assets/Runtime/Bool/BoolUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Float.meta b/Assets/Runtime/Float.meta similarity index 100% rename from Assets/Runtime/GameEvents/Float.meta rename to Assets/Runtime/Float.meta diff --git a/Assets/Runtime/GameEvents/Float/FloatGameEvent.cs b/Assets/Runtime/Float/FloatGameEvent.cs similarity index 56% rename from Assets/Runtime/GameEvents/Float/FloatGameEvent.cs rename to Assets/Runtime/Float/FloatGameEvent.cs index 03208ee..863c2fd 100644 --- a/Assets/Runtime/GameEvents/Float/FloatGameEvent.cs +++ b/Assets/Runtime/Float/FloatGameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Float { [CreateAssetMenu(fileName = "FloatGameEvent", menuName = "Game Events/Float Game Event")] - public class FloatGameEvent : ArgumentGameEvent + public class FloatGameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/Float/FloatGameEvent.cs.meta b/Assets/Runtime/Float/FloatGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Float/FloatGameEvent.cs.meta rename to Assets/Runtime/Float/FloatGameEvent.cs.meta diff --git a/Assets/Runtime/Float/FloatGameEventListener.cs b/Assets/Runtime/Float/FloatGameEventListener.cs new file mode 100644 index 0000000..5f269f8 --- /dev/null +++ b/Assets/Runtime/Float/FloatGameEventListener.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace GameEvents.Float +{ + [AddComponentMenu("Game Events/Float Game Event Listener")] + public class + FloatGameEventListener : BaseGameEventListener + { + } +} diff --git a/Assets/Runtime/GameEvents/Float/FloatGameEventListener.cs.meta b/Assets/Runtime/Float/FloatGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Float/FloatGameEventListener.cs.meta rename to Assets/Runtime/Float/FloatGameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/Float/FloatEvent.cs b/Assets/Runtime/Float/FloatUnityEvent.cs similarity index 66% rename from Assets/Runtime/GameEvents/Float/FloatEvent.cs rename to Assets/Runtime/Float/FloatUnityEvent.cs index 19a4f29..6cdc9cc 100644 --- a/Assets/Runtime/GameEvents/Float/FloatEvent.cs +++ b/Assets/Runtime/Float/FloatUnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.Float { [Serializable] - public class FloatEvent : UnityEvent + public class FloatUnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/Float/FloatEvent.cs.meta b/Assets/Runtime/Float/FloatUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Float/FloatEvent.cs.meta rename to Assets/Runtime/Float/FloatUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents.meta b/Assets/Runtime/GameEvents.meta deleted file mode 100644 index 0aa9259..0000000 --- a/Assets/Runtime/GameEvents.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d181c151a2755a34a9710bdbb608a9c7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Runtime/GameEvents/Bool/BoolGameEventListener.cs b/Assets/Runtime/GameEvents/Bool/BoolGameEventListener.cs deleted file mode 100644 index 8d6112e..0000000 --- a/Assets/Runtime/GameEvents/Bool/BoolGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using GameEvents.Generic; -using UnityEngine; - -namespace GameEvents.Bool -{ - [AddComponentMenu("Game Events/Bool Game Event Listener")] - public class BoolGameEventListener : ArgumentGameEventListener - { - } -} diff --git a/Assets/Runtime/GameEvents/Empty.meta b/Assets/Runtime/GameEvents/Empty.meta deleted file mode 100644 index 2486c2a..0000000 --- a/Assets/Runtime/GameEvents/Empty.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 11fde44fb39f48268781e2169533feda -timeCreated: 1611167723 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Empty/EmptyArg.cs b/Assets/Runtime/GameEvents/Empty/EmptyArg.cs deleted file mode 100644 index 4bac333..0000000 --- a/Assets/Runtime/GameEvents/Empty/EmptyArg.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace GameEvents.Empty -{ - public class EmptyArg - { - public static readonly EmptyArg Instance = new EmptyArg(); - - private EmptyArg() - { - } - } -} diff --git a/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs b/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs deleted file mode 100644 index 6e96695..0000000 --- a/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using UnityEngine.Events; - -namespace GameEvents.Empty -{ - [Serializable] - public class EmptyUnityEvent : UnityEvent - { - } -} diff --git a/Assets/Runtime/GameEvents/Empty/GameEvent.cs b/Assets/Runtime/GameEvents/Empty/GameEvent.cs deleted file mode 100644 index 3caf5ee..0000000 --- a/Assets/Runtime/GameEvents/Empty/GameEvent.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Empty -{ - [CreateAssetMenu(fileName = "GameEvent", menuName = "Game Events 2/Game Event")] - public class GameEvent : BaseGameEvent - { - public void Raise() - { - Raise(EmptyArg.Instance); - } - } -} diff --git a/Assets/Runtime/GameEvents/Empty/GameEventListener.cs b/Assets/Runtime/GameEvents/Empty/GameEventListener.cs deleted file mode 100644 index 099e48b..0000000 --- a/Assets/Runtime/GameEvents/Empty/GameEventListener.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace GameEvents.Empty -{ - public class GameEventListener : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/GameEvents/Float/FloatGameEventListener.cs b/Assets/Runtime/GameEvents/Float/FloatGameEventListener.cs deleted file mode 100644 index aa18044..0000000 --- a/Assets/Runtime/GameEvents/Float/FloatGameEventListener.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GameEvents.Generic; -using UnityEngine; - -namespace GameEvents.Float -{ - [AddComponentMenu("Game Events/Float Game Event Listener")] - public class - FloatGameEventListener : ArgumentGameEventListener - { - } -} diff --git a/Assets/Runtime/GameEvents/Game/GameEvent.cs b/Assets/Runtime/GameEvents/Game/GameEvent.cs deleted file mode 100644 index 109fe2b..0000000 --- a/Assets/Runtime/GameEvents/Game/GameEvent.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using GameEvents.Generic; -using UnityEngine; - -namespace GameEvents.Game -{ - [CreateAssetMenu(fileName = "GameEvent", menuName = "Game Events/Game Event")] - public class GameEvent : ScriptableObject, IGameEvent - { - [SerializeField] - [Tooltip("Should debug messages be logged for this event")] - private bool debug = false; - - private readonly ReadOnlyCollection readListeners; - - private readonly List listeners = - new List(); - - public ICollection Listeners => readListeners; - - public GameEvent() - { - readListeners = listeners.AsReadOnly(); - } - - public void RaiseGameEvent() - { - if (debug) - { - Debug.Log($"Raise event: {name}"); - } - - for (var i = listeners.Count - 1; i >= 0; i--) - { - var listener = listeners[i]; - if (debug) - { - Debug.Log($"Raise event: {name}, listener: {listener}"); - } - - try - { - listener.RaiseGameEvent(); - } - catch (Exception e) - { - Debug.Log($"Listener: {listener} of event: {name} has thrown an exception."); - Debug.LogException(e, this); - } - } - } - - public void RegisterListener(IGameEventListener listener) - { - if (debug) - { - Debug.Log($"Registering listener: {listener}"); - } - - listeners.Add(listener); - } - - public void UnregisterListener(IGameEventListener listener) - { - if (debug) - { - Debug.Log($"Unregistering listener: {listener}"); - } - - listeners.Remove(listener); - } - } -} diff --git a/Assets/Runtime/GameEvents/Game/GameEvent.cs.meta b/Assets/Runtime/GameEvents/Game/GameEvent.cs.meta deleted file mode 100644 index e3511ef..0000000 --- a/Assets/Runtime/GameEvents/Game/GameEvent.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 21db6c450dc447148ebdd67c2a7c553d -timeCreated: 1601505560 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Game/GameEventListener.cs b/Assets/Runtime/GameEvents/Game/GameEventListener.cs deleted file mode 100644 index 9631544..0000000 --- a/Assets/Runtime/GameEvents/Game/GameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using GameEvents.Generic; -using UnityEngine; - -namespace GameEvents.Game -{ - [AddComponentMenu("Game Events/Game Event Listener")] - public class GameEventListener : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/GameEvents/Game/GameEventListener.cs.meta b/Assets/Runtime/GameEvents/Game/GameEventListener.cs.meta deleted file mode 100644 index 719d6f6..0000000 --- a/Assets/Runtime/GameEvents/Game/GameEventListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a0b2f85583a54b21922069d1d0951342 -timeCreated: 1601742453 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Generic.meta b/Assets/Runtime/GameEvents/Generic.meta deleted file mode 100644 index 047b9f2..0000000 --- a/Assets/Runtime/GameEvents/Generic.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 133ae890956e447e848186dd54bab7dd -timeCreated: 1601497071 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs b/Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs deleted file mode 100644 index a89fdf0..0000000 --- a/Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using UnityEngine; - -namespace GameEvents.Generic -{ - public abstract class ArgumentGameEvent - : ScriptableObject, IArgumentGameEvent - { - [SerializeField] - [Tooltip("Should debug messages be logged for this event")] - private bool debug = false; - - private readonly ReadOnlyCollection> readListeners; - - private readonly List> listeners = - new List>(); - - public ICollection> Listeners => readListeners; - - public ArgumentGameEvent() - { - readListeners = listeners.AsReadOnly(); - } - - public void RaiseGameEvent(TArgument argument) - { - if (debug) - { - Debug.Log($"Raise event: {name} with an argument: {argument}"); - } - - for (var i = listeners.Count - 1; i >= 0; i--) - { - var listener = listeners[i]; - if (debug) - { - Debug.Log($"Raise event: {name}, listener: {listener}, argument: {argument}"); - } - - try - { - listener.RaiseGameEvent(argument); - } - catch (Exception e) - { - Debug.Log($"Listener: {listener} of event: {name} has thrown an exception."); - Debug.LogException(e, this); - } - } - } - - public void RegisterListener(IArgumentGameEventListener listener) - { - if (debug) - { - Debug.Log($"Registering listener: {listener}"); - } - - listeners.Add(listener); - } - - public void UnregisterListener(IArgumentGameEventListener listener) - { - if (debug) - { - Debug.Log($"Unregistering listener: {listener}"); - } - - listeners.Remove(listener); - } - } -} diff --git a/Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs.meta b/Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs.meta deleted file mode 100644 index c4b1d66..0000000 --- a/Assets/Runtime/GameEvents/Generic/ArgumentGameEvent.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d30ce9ddbe6ab324a958ce96f81dd13c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs b/Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs deleted file mode 100644 index 21b36f0..0000000 --- a/Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs +++ /dev/null @@ -1,57 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -namespace GameEvents.Generic -{ - public abstract class ArgumentGameEventListener - : MonoBehaviour, IArgumentGameEventListener - where TGameEvent : IArgumentGameEvent - where TUnityEvent : UnityEvent - { - [SerializeField] - [Tooltip("Game event to listen to which will trigger the onGameEvent event")] - private TGameEvent gameEvent = default; - - // ReSharper disable once Unity.RedundantSerializeFieldAttribute - // ReSharper disable once FieldCanBeMadeReadOnly.Local - [SerializeField] - [Tooltip("Called when the listener is triggered with an argument")] - private TUnityEvent onGameEvent = default; - - /// - /// Get or set the underlying GameEvent. - /// - public TGameEvent GameEvent - { - get => gameEvent; - set => gameEvent = value; - } - - /// - /// Get or set the underlying UnityEvent. - /// - public TUnityEvent OnGameEvent - { - get => onGameEvent; - set => onGameEvent = value; - } - - /// - /// Trigger this listener with an argument. - /// - public void RaiseGameEvent(TArgument argument) - { - onGameEvent.Invoke(argument); - } - - private void OnEnable() - { - gameEvent.RegisterListener(this); - } - - private void OnDisable() - { - gameEvent.UnregisterListener(this); - } - } -} diff --git a/Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs.meta b/Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs.meta deleted file mode 100644 index bb0294a..0000000 --- a/Assets/Runtime/GameEvents/Generic/ArgumentGameEventListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a56f032f967a4020adcd19a17ba06e54 -timeCreated: 1601496583 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs b/Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs deleted file mode 100644 index 7e40fdd..0000000 --- a/Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -namespace GameEvents.Generic -{ - public abstract class BaseGameEventListener - : MonoBehaviour, IGameEventListener - where TGameEvent : IGameEvent - { - [SerializeField] - [Tooltip("Game event to listen to which will trigger the onGameEvent event")] - private TGameEvent gameEvent = default; - - [SerializeField] - [Tooltip("Called when the listener is triggered with an argument")] - private UnityEvent onGameEvent = default; - - /// - /// Get or set the underlying GameEvent. - /// - public TGameEvent GameEvent - { - get => gameEvent; - set => gameEvent = value; - } - - /// - /// Get or set the underlying UnityEvent. - /// - public UnityEvent OnGameEvent - { - get => onGameEvent; - set => onGameEvent = value; - } - - public void RaiseGameEvent() - { - onGameEvent.Invoke(); - } - - private void OnEnable() - { - gameEvent.RegisterListener(this); - } - - private void OnDisable() - { - gameEvent.UnregisterListener(this); - } - } -} diff --git a/Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs.meta b/Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs.meta deleted file mode 100644 index fb48634..0000000 --- a/Assets/Runtime/GameEvents/Generic/BaseGameEventListener.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6085baf1c9ef647428c1dde1cc5d7633 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs b/Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs deleted file mode 100644 index d473a55..0000000 --- a/Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; - -namespace GameEvents.Generic -{ - public interface IArgumentGameEvent - { - /// - /// Currently registered listeners. - /// - ICollection> Listeners { get; } - - /// - /// Raise this event with an argument. - /// - void RaiseGameEvent(TArgument argument); - - /// - /// Register a listener with an argument to this event. - /// - void RegisterListener(IArgumentGameEventListener listener); - - /// - /// Unregister a listener with an argument from this event. - /// - void UnregisterListener(IArgumentGameEventListener listener); - } -} diff --git a/Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs.meta b/Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs.meta deleted file mode 100644 index 943916a..0000000 --- a/Assets/Runtime/GameEvents/Generic/IArgumentGameEvent.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a2c094d73e984a8a8c3f5c6aa06da650 -timeCreated: 1601504434 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs b/Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs deleted file mode 100644 index 8bf8402..0000000 --- a/Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace GameEvents.Generic -{ - public interface IArgumentGameEventListener - { - /// - /// Trigger this listener with an argument. - /// - void RaiseGameEvent(TArgument argument); - } -} diff --git a/Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs.meta b/Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs.meta deleted file mode 100644 index 9bfe625..0000000 --- a/Assets/Runtime/GameEvents/Generic/IArgumentGameEventListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 46728124ea394601833d952b6563f90f -timeCreated: 1601504669 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Generic/IGameEvent.cs b/Assets/Runtime/GameEvents/Generic/IGameEvent.cs deleted file mode 100644 index af1467c..0000000 --- a/Assets/Runtime/GameEvents/Generic/IGameEvent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; - -namespace GameEvents.Generic -{ - public interface IGameEvent - { - /// - /// Currently registered listeners. - /// - ICollection Listeners { get; } - - /// - /// Raise this event. - /// - void RaiseGameEvent(); - - /// - /// Register a listener to this event. - /// - void RegisterListener(IGameEventListener listener); - - /// - /// Unregister a listener from this event. - /// - void UnregisterListener(IGameEventListener listener); - } -} diff --git a/Assets/Runtime/GameEvents/Generic/IGameEvent.cs.meta b/Assets/Runtime/GameEvents/Generic/IGameEvent.cs.meta deleted file mode 100644 index 349f8a6..0000000 --- a/Assets/Runtime/GameEvents/Generic/IGameEvent.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d4028bf2eaa644448f5cc6c883dfe8fb -timeCreated: 1601500047 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Generic/IGameEventListener.cs b/Assets/Runtime/GameEvents/Generic/IGameEventListener.cs deleted file mode 100644 index f248236..0000000 --- a/Assets/Runtime/GameEvents/Generic/IGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace GameEvents.Generic -{ - public interface IGameEventListener - { - /// - /// Trigger this listener. - /// - void RaiseGameEvent(); - } -} diff --git a/Assets/Runtime/GameEvents/Generic/IGameEventListener.cs.meta b/Assets/Runtime/GameEvents/Generic/IGameEventListener.cs.meta deleted file mode 100644 index 2d28477..0000000 --- a/Assets/Runtime/GameEvents/Generic/IGameEventListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 92f33ef0400e4dc9868b6d2ba4f0336b -timeCreated: 1601500241 \ No newline at end of file diff --git a/Assets/Runtime/GameEvents/Int/IntGameEventListener.cs b/Assets/Runtime/GameEvents/Int/IntGameEventListener.cs deleted file mode 100644 index 7259412..0000000 --- a/Assets/Runtime/GameEvents/Int/IntGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using GameEvents.Generic; -using UnityEngine; - -namespace GameEvents.Int -{ - [AddComponentMenu("Game Events/Int Game Event Listener")] - public class IntGameEventListener : ArgumentGameEventListener - { - } -} diff --git a/Assets/Runtime/GameEvents/String/StringGameEventListener.cs b/Assets/Runtime/GameEvents/String/StringGameEventListener.cs deleted file mode 100644 index 6d78850..0000000 --- a/Assets/Runtime/GameEvents/String/StringGameEventListener.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GameEvents.Generic; -using UnityEngine; - -namespace GameEvents.String -{ - [AddComponentMenu("Game Events/String Game Event Listener")] - public class - StringGameEventListener : ArgumentGameEventListener - { - } -} diff --git a/Assets/Runtime/GameEvents/GameObject.meta b/Assets/Runtime/GameObject.meta similarity index 100% rename from Assets/Runtime/GameEvents/GameObject.meta rename to Assets/Runtime/GameObject.meta diff --git a/Assets/Runtime/GameEvents/GameObject/GameObjectGameEvent.cs b/Assets/Runtime/GameObject/GameObjectGameEvent.cs similarity index 52% rename from Assets/Runtime/GameEvents/GameObject/GameObjectGameEvent.cs rename to Assets/Runtime/GameObject/GameObjectGameEvent.cs index 7cce532..43db958 100644 --- a/Assets/Runtime/GameEvents/GameObject/GameObjectGameEvent.cs +++ b/Assets/Runtime/GameObject/GameObjectGameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.GameObject { [CreateAssetMenu(fileName = "GameObjectEvent", menuName = "Game Events/Game Object Event")] - public class GameObjectGameEvent : ArgumentGameEvent + public class GameObjectGameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/GameObject/GameObjectGameEvent.cs.meta b/Assets/Runtime/GameObject/GameObjectGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/GameObject/GameObjectGameEvent.cs.meta rename to Assets/Runtime/GameObject/GameObjectGameEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/GameObject/GameObjectGameEventListener.cs b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs similarity index 52% rename from Assets/Runtime/GameEvents/GameObject/GameObjectGameEventListener.cs rename to Assets/Runtime/GameObject/GameObjectGameEventListener.cs index 070afd0..aa7b932 100644 --- a/Assets/Runtime/GameEvents/GameObject/GameObjectGameEventListener.cs +++ b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs @@ -1,11 +1,10 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.GameObject { [AddComponentMenu("Game Events/Game Object Game Event Listener")] public class GameObjectGameEventListener - : ArgumentGameEventListener + : BaseGameEventListener { } } diff --git a/Assets/Runtime/GameEvents/GameObject/GameObjectGameEventListener.cs.meta b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/GameObject/GameObjectGameEventListener.cs.meta rename to Assets/Runtime/GameObject/GameObjectGameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/GameObject/GameObjectEvent.cs b/Assets/Runtime/GameObject/GameObjectUnityEvent.cs similarity index 59% rename from Assets/Runtime/GameEvents/GameObject/GameObjectEvent.cs rename to Assets/Runtime/GameObject/GameObjectUnityEvent.cs index 61f48ce..20b21e9 100644 --- a/Assets/Runtime/GameEvents/GameObject/GameObjectEvent.cs +++ b/Assets/Runtime/GameObject/GameObjectUnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.GameObject { [Serializable] - public class GameObjectEvent : UnityEvent + public class GameObjectUnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/GameObject/GameObjectEvent.cs.meta b/Assets/Runtime/GameObject/GameObjectUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/GameObject/GameObjectEvent.cs.meta rename to Assets/Runtime/GameObject/GameObjectUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Int.meta b/Assets/Runtime/Int.meta similarity index 100% rename from Assets/Runtime/GameEvents/Int.meta rename to Assets/Runtime/Int.meta diff --git a/Assets/Runtime/GameEvents/Int/IntGameEvent.cs b/Assets/Runtime/Int/IntGameEvent.cs similarity index 56% rename from Assets/Runtime/GameEvents/Int/IntGameEvent.cs rename to Assets/Runtime/Int/IntGameEvent.cs index 5fd24e0..3804b1e 100644 --- a/Assets/Runtime/GameEvents/Int/IntGameEvent.cs +++ b/Assets/Runtime/Int/IntGameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Int { [CreateAssetMenu(fileName = "IntGameEvent", menuName = "Game Events/Int Game Event")] - public class IntGameEvent : ArgumentGameEvent + public class IntGameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/Int/IntGameEvent.cs.meta b/Assets/Runtime/Int/IntGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Int/IntGameEvent.cs.meta rename to Assets/Runtime/Int/IntGameEvent.cs.meta diff --git a/Assets/Runtime/Int/IntGameEventListener.cs b/Assets/Runtime/Int/IntGameEventListener.cs new file mode 100644 index 0000000..f2a443c --- /dev/null +++ b/Assets/Runtime/Int/IntGameEventListener.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace GameEvents.Int +{ + [AddComponentMenu("Game Events/Int Game Event Listener")] + public class IntGameEventListener : BaseGameEventListener + { + } +} diff --git a/Assets/Runtime/GameEvents/Int/IntGameEventListener.cs.meta b/Assets/Runtime/Int/IntGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Int/IntGameEventListener.cs.meta rename to Assets/Runtime/Int/IntGameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/Int/IntEvent.cs b/Assets/Runtime/Int/IntUnityEvent.cs similarity index 67% rename from Assets/Runtime/GameEvents/Int/IntEvent.cs rename to Assets/Runtime/Int/IntUnityEvent.cs index c7c96b5..3b4e1c9 100644 --- a/Assets/Runtime/GameEvents/Int/IntEvent.cs +++ b/Assets/Runtime/Int/IntUnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.Int { [Serializable] - public class IntEvent : UnityEvent + public class IntUnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/Int/IntEvent.cs.meta b/Assets/Runtime/Int/IntUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Int/IntEvent.cs.meta rename to Assets/Runtime/Int/IntUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Game.meta b/Assets/Runtime/Simple.meta similarity index 100% rename from Assets/Runtime/GameEvents/Game.meta rename to Assets/Runtime/Simple.meta diff --git a/Assets/Runtime/Simple/SimpleArg.cs b/Assets/Runtime/Simple/SimpleArg.cs new file mode 100644 index 0000000..493ee96 --- /dev/null +++ b/Assets/Runtime/Simple/SimpleArg.cs @@ -0,0 +1,11 @@ +namespace GameEvents.Simple +{ + public class SimpleArg + { + public static readonly SimpleArg Instance = new SimpleArg(); + + private SimpleArg() + { + } + } +} diff --git a/Assets/Runtime/GameEvents/Empty/EmptyArg.cs.meta b/Assets/Runtime/Simple/SimpleArg.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Empty/EmptyArg.cs.meta rename to Assets/Runtime/Simple/SimpleArg.cs.meta diff --git a/Assets/Runtime/Simple/SimpleGameEvent.cs b/Assets/Runtime/Simple/SimpleGameEvent.cs new file mode 100644 index 0000000..275e4e6 --- /dev/null +++ b/Assets/Runtime/Simple/SimpleGameEvent.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace GameEvents.Simple +{ + [CreateAssetMenu(fileName = "SimpleGameEvent", menuName = "Game Events/Simple Game Event")] + public class SimpleGameEvent : BaseGameEvent + { + /// + /// Raise this game event without an argument. + /// + public void Raise() + { + Raise(SimpleArg.Instance); + } + } +} diff --git a/Assets/Runtime/GameEvents/Empty/GameEvent.cs.meta b/Assets/Runtime/Simple/SimpleGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Empty/GameEvent.cs.meta rename to Assets/Runtime/Simple/SimpleGameEvent.cs.meta diff --git a/Assets/Runtime/Simple/SimpleGameEventListener.cs b/Assets/Runtime/Simple/SimpleGameEventListener.cs new file mode 100644 index 0000000..98c343f --- /dev/null +++ b/Assets/Runtime/Simple/SimpleGameEventListener.cs @@ -0,0 +1,7 @@ +namespace GameEvents.Simple +{ + public class SimpleGameEventListener + : BaseGameEventListener + { + } +} diff --git a/Assets/Runtime/GameEvents/Empty/GameEventListener.cs.meta b/Assets/Runtime/Simple/SimpleGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Empty/GameEventListener.cs.meta rename to Assets/Runtime/Simple/SimpleGameEventListener.cs.meta diff --git a/Assets/Runtime/Simple/SimpleUnityEvent.cs b/Assets/Runtime/Simple/SimpleUnityEvent.cs new file mode 100644 index 0000000..845d771 --- /dev/null +++ b/Assets/Runtime/Simple/SimpleUnityEvent.cs @@ -0,0 +1,10 @@ +using System; +using UnityEngine.Events; + +namespace GameEvents.Simple +{ + [Serializable] + public class SimpleUnityEvent : UnityEvent + { + } +} diff --git a/Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs.meta b/Assets/Runtime/Simple/SimpleUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Empty/EmptyUnityEvent.cs.meta rename to Assets/Runtime/Simple/SimpleUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/String.meta b/Assets/Runtime/String.meta similarity index 100% rename from Assets/Runtime/GameEvents/String.meta rename to Assets/Runtime/String.meta diff --git a/Assets/Runtime/GameEvents/String/StringGameEvent.cs b/Assets/Runtime/String/StringGameEvent.cs similarity index 56% rename from Assets/Runtime/GameEvents/String/StringGameEvent.cs rename to Assets/Runtime/String/StringGameEvent.cs index cdcabd0..2bfce95 100644 --- a/Assets/Runtime/GameEvents/String/StringGameEvent.cs +++ b/Assets/Runtime/String/StringGameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.String { [CreateAssetMenu(fileName = "StringGameEvent", menuName = "Game Events/String Game Event")] - public class StringGameEvent : ArgumentGameEvent + public class StringGameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/String/StringGameEvent.cs.meta b/Assets/Runtime/String/StringGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/String/StringGameEvent.cs.meta rename to Assets/Runtime/String/StringGameEvent.cs.meta diff --git a/Assets/Runtime/String/StringGameEventListener.cs b/Assets/Runtime/String/StringGameEventListener.cs new file mode 100644 index 0000000..7724b65 --- /dev/null +++ b/Assets/Runtime/String/StringGameEventListener.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace GameEvents.String +{ + [AddComponentMenu("Game Events/String Game Event Listener")] + public class StringGameEventListener + : BaseGameEventListener + { + } +} diff --git a/Assets/Runtime/GameEvents/String/StringGameEventListener.cs.meta b/Assets/Runtime/String/StringGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/String/StringGameEventListener.cs.meta rename to Assets/Runtime/String/StringGameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/String/StringEvent.cs b/Assets/Runtime/String/StringUnityEvent.cs similarity index 66% rename from Assets/Runtime/GameEvents/String/StringEvent.cs rename to Assets/Runtime/String/StringUnityEvent.cs index 157bd13..238192a 100644 --- a/Assets/Runtime/GameEvents/String/StringEvent.cs +++ b/Assets/Runtime/String/StringUnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.String { [Serializable] - public class StringEvent : UnityEvent + public class StringUnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/String/StringEvent.cs.meta b/Assets/Runtime/String/StringUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/String/StringEvent.cs.meta rename to Assets/Runtime/String/StringUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Transform.meta b/Assets/Runtime/Transform.meta similarity index 100% rename from Assets/Runtime/GameEvents/Transform.meta rename to Assets/Runtime/Transform.meta diff --git a/Assets/Runtime/GameEvents/Transform/TransformGameEvent.cs b/Assets/Runtime/Transform/TransformGameEvent.cs similarity index 57% rename from Assets/Runtime/GameEvents/Transform/TransformGameEvent.cs rename to Assets/Runtime/Transform/TransformGameEvent.cs index 5a0ffc0..b5cddac 100644 --- a/Assets/Runtime/GameEvents/Transform/TransformGameEvent.cs +++ b/Assets/Runtime/Transform/TransformGameEvent.cs @@ -1,5 +1,4 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Transform { @@ -7,7 +6,7 @@ namespace GameEvents.Transform fileName = "TransformGameEvent", menuName = "Game Events/Transform Game Event" )] - public class TransformGameEvent : ArgumentGameEvent + public class TransformGameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/Transform/TransformGameEvent.cs.meta b/Assets/Runtime/Transform/TransformGameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Transform/TransformGameEvent.cs.meta rename to Assets/Runtime/Transform/TransformGameEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Transform/TransformGameEventListener.cs b/Assets/Runtime/Transform/TransformGameEventListener.cs similarity index 52% rename from Assets/Runtime/GameEvents/Transform/TransformGameEventListener.cs rename to Assets/Runtime/Transform/TransformGameEventListener.cs index e2d086c..1d81d1e 100644 --- a/Assets/Runtime/GameEvents/Transform/TransformGameEventListener.cs +++ b/Assets/Runtime/Transform/TransformGameEventListener.cs @@ -1,11 +1,10 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Transform { [AddComponentMenu("Game Events/Transform Game Event Listener")] public class TransformGameEventListener - : ArgumentGameEventListener + : BaseGameEventListener { } } diff --git a/Assets/Runtime/GameEvents/Transform/TransformGameEventListener.cs.meta b/Assets/Runtime/Transform/TransformGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Transform/TransformGameEventListener.cs.meta rename to Assets/Runtime/Transform/TransformGameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/Transform/TransformEvent.cs b/Assets/Runtime/Transform/TransformUnityEvent.cs similarity index 60% rename from Assets/Runtime/GameEvents/Transform/TransformEvent.cs rename to Assets/Runtime/Transform/TransformUnityEvent.cs index 2b79745..2c70b4f 100644 --- a/Assets/Runtime/GameEvents/Transform/TransformEvent.cs +++ b/Assets/Runtime/Transform/TransformUnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.Transform { [Serializable] - public class TransformEvent : UnityEvent + public class TransformUnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/Transform/TransformEvent.cs.meta b/Assets/Runtime/Transform/TransformUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Transform/TransformEvent.cs.meta rename to Assets/Runtime/Transform/TransformUnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Vector2.meta b/Assets/Runtime/Vector2.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector2.meta rename to Assets/Runtime/Vector2.meta diff --git a/Assets/Runtime/GameEvents/Vector2/Vector2GameEvent.cs b/Assets/Runtime/Vector2/Vector2GameEvent.cs similarity index 53% rename from Assets/Runtime/GameEvents/Vector2/Vector2GameEvent.cs rename to Assets/Runtime/Vector2/Vector2GameEvent.cs index 125d954..a3f9bab 100644 --- a/Assets/Runtime/GameEvents/Vector2/Vector2GameEvent.cs +++ b/Assets/Runtime/Vector2/Vector2GameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Vector2 { [CreateAssetMenu(fileName = "Vector2GameEvent", menuName = "Game Events/Vector2 Game Event")] - public class Vector2GameEvent : ArgumentGameEvent + public class Vector2GameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/Vector2/Vector2GameEvent.cs.meta b/Assets/Runtime/Vector2/Vector2GameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector2/Vector2GameEvent.cs.meta rename to Assets/Runtime/Vector2/Vector2GameEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Vector2/Vector2GameEventListener.cs b/Assets/Runtime/Vector2/Vector2GameEventListener.cs similarity index 52% rename from Assets/Runtime/GameEvents/Vector2/Vector2GameEventListener.cs rename to Assets/Runtime/Vector2/Vector2GameEventListener.cs index e89ad9f..66ee57d 100644 --- a/Assets/Runtime/GameEvents/Vector2/Vector2GameEventListener.cs +++ b/Assets/Runtime/Vector2/Vector2GameEventListener.cs @@ -1,11 +1,10 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Vector2 { [AddComponentMenu("Game Events/Vector2 Game Event Listener")] public class Vector2GameEventListener - : ArgumentGameEventListener + : BaseGameEventListener { } } diff --git a/Assets/Runtime/GameEvents/Vector2/Vector2GameEventListener.cs.meta b/Assets/Runtime/Vector2/Vector2GameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector2/Vector2GameEventListener.cs.meta rename to Assets/Runtime/Vector2/Vector2GameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/Vector2/Vector2Event.cs b/Assets/Runtime/Vector2/Vector2UnityEvent.cs similarity index 61% rename from Assets/Runtime/GameEvents/Vector2/Vector2Event.cs rename to Assets/Runtime/Vector2/Vector2UnityEvent.cs index 398676f..7d05881 100644 --- a/Assets/Runtime/GameEvents/Vector2/Vector2Event.cs +++ b/Assets/Runtime/Vector2/Vector2UnityEvent.cs @@ -4,7 +4,7 @@ namespace GameEvents.Vector2 { [Serializable] - public class Vector2Event : UnityEvent + public class Vector2UnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/Vector2/Vector2Event.cs.meta b/Assets/Runtime/Vector2/Vector2UnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector2/Vector2Event.cs.meta rename to Assets/Runtime/Vector2/Vector2UnityEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Vector3.meta b/Assets/Runtime/Vector3.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector3.meta rename to Assets/Runtime/Vector3.meta diff --git a/Assets/Runtime/GameEvents/Vector3/Vector3GameEvent.cs b/Assets/Runtime/Vector3/Vector3GameEvent.cs similarity index 53% rename from Assets/Runtime/GameEvents/Vector3/Vector3GameEvent.cs rename to Assets/Runtime/Vector3/Vector3GameEvent.cs index 06316b4..c50493d 100644 --- a/Assets/Runtime/GameEvents/Vector3/Vector3GameEvent.cs +++ b/Assets/Runtime/Vector3/Vector3GameEvent.cs @@ -1,10 +1,9 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Vector3 { [CreateAssetMenu(fileName = "Vector3GameEvent", menuName = "Game Events/Vector3 Game Event")] - public class Vector3GameEvent : ArgumentGameEvent + public class Vector3GameEvent : BaseGameEvent { } } diff --git a/Assets/Runtime/GameEvents/Vector3/Vector3GameEvent.cs.meta b/Assets/Runtime/Vector3/Vector3GameEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector3/Vector3GameEvent.cs.meta rename to Assets/Runtime/Vector3/Vector3GameEvent.cs.meta diff --git a/Assets/Runtime/GameEvents/Vector3/Vector3GameEventListener.cs b/Assets/Runtime/Vector3/Vector3GameEventListener.cs similarity index 52% rename from Assets/Runtime/GameEvents/Vector3/Vector3GameEventListener.cs rename to Assets/Runtime/Vector3/Vector3GameEventListener.cs index 2fdc4f4..079cf94 100644 --- a/Assets/Runtime/GameEvents/Vector3/Vector3GameEventListener.cs +++ b/Assets/Runtime/Vector3/Vector3GameEventListener.cs @@ -1,11 +1,10 @@ -using GameEvents.Generic; -using UnityEngine; +using UnityEngine; namespace GameEvents.Vector3 { [AddComponentMenu("Game Events/Vector3 Game Event Listener")] public class Vector3GameEventListener - : ArgumentGameEventListener + : BaseGameEventListener { } } diff --git a/Assets/Runtime/GameEvents/Vector3/Vector3GameEventListener.cs.meta b/Assets/Runtime/Vector3/Vector3GameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector3/Vector3GameEventListener.cs.meta rename to Assets/Runtime/Vector3/Vector3GameEventListener.cs.meta diff --git a/Assets/Runtime/GameEvents/Vector3/Vector3Event.cs b/Assets/Runtime/Vector3/VectorUnity3Event.cs similarity index 61% rename from Assets/Runtime/GameEvents/Vector3/Vector3Event.cs rename to Assets/Runtime/Vector3/VectorUnity3Event.cs index b089736..225a575 100644 --- a/Assets/Runtime/GameEvents/Vector3/Vector3Event.cs +++ b/Assets/Runtime/Vector3/VectorUnity3Event.cs @@ -4,7 +4,7 @@ namespace GameEvents.Vector3 { [Serializable] - public class Vector3Event : UnityEvent + public class VectorUnity3Event : UnityEvent { } } diff --git a/Assets/Runtime/GameEvents/Vector3/Vector3Event.cs.meta b/Assets/Runtime/Vector3/VectorUnity3Event.cs.meta similarity index 100% rename from Assets/Runtime/GameEvents/Vector3/Vector3Event.cs.meta rename to Assets/Runtime/Vector3/VectorUnity3Event.cs.meta diff --git a/Assets/Tests/Runtime/GameEvents/GameEventTest.cs b/Assets/Tests/Runtime/GameEvents/GameEventTest.cs index 1ef7862..ad02af7 100644 --- a/Assets/Tests/Runtime/GameEvents/GameEventTest.cs +++ b/Assets/Tests/Runtime/GameEvents/GameEventTest.cs @@ -171,7 +171,7 @@ public void ShouldRaiseGameObjectGameEventListener() var tester = new GameEventTester< GameObjectGameEventListener, GameObjectGameEvent, - GameObjectEvent, + GameObjectUnityEvent, UnityEngine.GameObject >(); @@ -209,7 +209,7 @@ public void ShouldRaiseIntGameEventListener() var tester = new GameEventTester< IntGameEventListener, IntGameEvent, - IntEvent, + IntUnityEvent, int >(); @@ -245,7 +245,7 @@ public void ShouldRaiseStringGameEventListener() var tester = new GameEventTester< StringGameEventListener, StringGameEvent, - StringEvent, + StringUnityEvent, string >(); @@ -281,7 +281,7 @@ public void ShouldRaiseTransformGameEventListener() var tester = new GameEventTester< TransformGameEventListener, TransformGameEvent, - TransformEvent, + TransformUnityEvent, UnityEngine.Transform >(); @@ -319,7 +319,7 @@ public void ShouldRaiseVector2EventListener() var tester = new GameEventTester< Vector2GameEventListener, Vector2GameEvent, - Vector2Event, + Vector2UnityEvent, UnityEngine.Vector2 >(); @@ -355,7 +355,7 @@ public void ShouldRaiseVector3EventListener() var tester = new GameEventTester< Vector3GameEventListener, Vector3GameEvent, - Vector3Event, + VectorUnity3Event, UnityEngine.Vector3 >(); diff --git a/Assets/package.json b/Assets/package.json index 439a552..ec0d619 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,13 +1,13 @@ { - "name": "com.chark.unity-scriptable-objects", - "displayName": "Unity Scriptable Objects", + "name": "com.chark.game-events", + "displayName": "Game Events", "author": { "name": "Chark", "url": "https://chark.io" }, "version": "1.1.0", "unity": "2019.4", - "description": "Provides Game Events and their respective listeners. Includes Mutable Scriptable Objects for injecting and using shared data.", + "description": "Extensible event system implemented via ScriptableObject", "samples": [ { "displayName": "Game Events", diff --git a/Chark.GameEvents.Editor.csproj.DotSettings b/Chark.GameEvents.Editor.csproj.DotSettings new file mode 100644 index 0000000..5ac0881 --- /dev/null +++ b/Chark.GameEvents.Editor.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/game-events.sln.DotSettings b/game-events.sln.DotSettings new file mode 100644 index 0000000..542dd4c --- /dev/null +++ b/game-events.sln.DotSettings @@ -0,0 +1,3 @@ + + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> \ No newline at end of file From 015068131cc5ecbbf933c8a1183b83bc38896ecf Mon Sep 17 00:00:00 2001 From: Edvinas Date: Thu, 21 Jan 2021 12:22:14 +0200 Subject: [PATCH 04/26] Fixup most tests, disable some (for now) --- Assets/Samples/GameEvents.meta | 8 - Assets/Samples/GameEvents/Events.meta | 8 - .../Samples/GameEvents/Events/GameEvent.asset | 21 - .../GameEvents/Events/GameEvent.asset.meta | 8 - .../GameEvents/Events/ShotGameEvent.asset | 15 - .../Events/ShotGameEvent.asset.meta | 8 - .../GameEvents/Events/TargetDeathEvent.asset | 15 - .../Events/TargetDeathEvent.asset.meta | 8 - Assets/Samples/GameEvents/Materials.meta | 8 - .../Samples/GameEvents/Materials/Target.mat | 110 --- .../GameEvents/Materials/Target.mat.meta | 8 - Assets/Samples/GameEvents/Materials/Wall.mat | 110 --- .../GameEvents/Materials/Wall.mat.meta | 8 - Assets/Samples/GameEvents/Prefabs.meta | 8 - .../GameEvents/Prefabs/ScoreEffect.prefab | 97 --- .../Prefabs/ScoreEffect.prefab.meta | 7 - .../GameEvents/Prefabs/ScoreHandler.prefab | 125 --- .../Prefabs/ScoreHandler.prefab.meta | 7 - .../GameEvents/Prefabs/ShooterCamera.prefab | 132 --- .../Prefabs/ShooterCamera.prefab.meta | 7 - .../GameEvents/Prefabs/ShotHandler.prefab | 87 -- .../Prefabs/ShotHandler.prefab.meta | 7 - .../Samples/GameEvents/Prefabs/Spawner.prefab | 91 -- .../GameEvents/Prefabs/Spawner.prefab.meta | 7 - .../Samples/GameEvents/Prefabs/Target.prefab | 126 --- .../GameEvents/Prefabs/Target.prefab.meta | 7 - Assets/Samples/GameEvents/Scenes.meta | 8 - .../GameEvents/Scenes/GameEvents.unity | 816 ------------------ .../GameEvents/Scenes/GameEvents.unity.meta | 7 - Assets/Samples/{GameEvents => }/Scripts.meta | 0 .../Scripts/FloatFadeOutText.cs | 2 +- .../Scripts/FloatFadeOutText.cs.meta | 0 .../Samples/{GameEvents => }/Scripts/Score.cs | 2 +- .../{GameEvents => }/Scripts/Score.cs.meta | 0 .../{GameEvents => }/Scripts/Shooter.cs | 4 +- .../{GameEvents => }/Scripts/Shooter.cs.meta | 0 .../{GameEvents => }/Scripts/ShotHandler.cs | 2 +- .../Scripts/ShotHandler.cs.meta | 0 .../{GameEvents => }/Scripts/Spawner.cs | 2 +- .../{GameEvents => }/Scripts/Spawner.cs.meta | 0 .../Runtime/{GameEvents => }/GameEventTest.cs | 201 +++-- .../{GameEvents => }/GameEventTest.cs.meta | 0 .../{GameEvents => }/GameEventTester.cs | 15 +- .../{GameEvents => }/GameEventTester.cs.meta | 0 Assets/Tests/Runtime/GameEvents.meta | 3 - .../GameEvents/NoOpArgumentListener.cs | 11 - .../Tests/Runtime/GameEvents/NoOpListener.cs | 11 - .../Runtime/GameEvents/NoOpListener.cs.meta | 3 - Assets/Tests/Runtime/NoOpListener.cs | 9 + ...tListener.cs.meta => NoOpListener.cs.meta} | 0 50 files changed, 123 insertions(+), 2016 deletions(-) delete mode 100644 Assets/Samples/GameEvents.meta delete mode 100644 Assets/Samples/GameEvents/Events.meta delete mode 100644 Assets/Samples/GameEvents/Events/GameEvent.asset delete mode 100644 Assets/Samples/GameEvents/Events/GameEvent.asset.meta delete mode 100644 Assets/Samples/GameEvents/Events/ShotGameEvent.asset delete mode 100644 Assets/Samples/GameEvents/Events/ShotGameEvent.asset.meta delete mode 100644 Assets/Samples/GameEvents/Events/TargetDeathEvent.asset delete mode 100644 Assets/Samples/GameEvents/Events/TargetDeathEvent.asset.meta delete mode 100644 Assets/Samples/GameEvents/Materials.meta delete mode 100644 Assets/Samples/GameEvents/Materials/Target.mat delete mode 100644 Assets/Samples/GameEvents/Materials/Target.mat.meta delete mode 100644 Assets/Samples/GameEvents/Materials/Wall.mat delete mode 100644 Assets/Samples/GameEvents/Materials/Wall.mat.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab delete mode 100644 Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab delete mode 100644 Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab delete mode 100644 Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab delete mode 100644 Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs/Spawner.prefab delete mode 100644 Assets/Samples/GameEvents/Prefabs/Spawner.prefab.meta delete mode 100644 Assets/Samples/GameEvents/Prefabs/Target.prefab delete mode 100644 Assets/Samples/GameEvents/Prefabs/Target.prefab.meta delete mode 100644 Assets/Samples/GameEvents/Scenes.meta delete mode 100644 Assets/Samples/GameEvents/Scenes/GameEvents.unity delete mode 100644 Assets/Samples/GameEvents/Scenes/GameEvents.unity.meta rename Assets/Samples/{GameEvents => }/Scripts.meta (100%) rename Assets/Samples/{GameEvents => }/Scripts/FloatFadeOutText.cs (97%) rename Assets/Samples/{GameEvents => }/Scripts/FloatFadeOutText.cs.meta (100%) rename Assets/Samples/{GameEvents => }/Scripts/Score.cs (97%) rename Assets/Samples/{GameEvents => }/Scripts/Score.cs.meta (100%) rename Assets/Samples/{GameEvents => }/Scripts/Shooter.cs (91%) rename Assets/Samples/{GameEvents => }/Scripts/Shooter.cs.meta (100%) rename Assets/Samples/{GameEvents => }/Scripts/ShotHandler.cs (92%) rename Assets/Samples/{GameEvents => }/Scripts/ShotHandler.cs.meta (100%) rename Assets/Samples/{GameEvents => }/Scripts/Spawner.cs (98%) rename Assets/Samples/{GameEvents => }/Scripts/Spawner.cs.meta (100%) rename Assets/Tests/Runtime/{GameEvents => }/GameEventTest.cs (68%) rename Assets/Tests/Runtime/{GameEvents => }/GameEventTest.cs.meta (100%) rename Assets/Tests/Runtime/{GameEvents => }/GameEventTester.cs (81%) rename Assets/Tests/Runtime/{GameEvents => }/GameEventTester.cs.meta (100%) delete mode 100644 Assets/Tests/Runtime/GameEvents.meta delete mode 100644 Assets/Tests/Runtime/GameEvents/NoOpArgumentListener.cs delete mode 100644 Assets/Tests/Runtime/GameEvents/NoOpListener.cs delete mode 100644 Assets/Tests/Runtime/GameEvents/NoOpListener.cs.meta create mode 100644 Assets/Tests/Runtime/NoOpListener.cs rename Assets/Tests/Runtime/{GameEvents/NoOpArgumentListener.cs.meta => NoOpListener.cs.meta} (100%) diff --git a/Assets/Samples/GameEvents.meta b/Assets/Samples/GameEvents.meta deleted file mode 100644 index 50d8419..0000000 --- a/Assets/Samples/GameEvents.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 25b6bc34b5cf9c147b45808d933da96d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Events.meta b/Assets/Samples/GameEvents/Events.meta deleted file mode 100644 index 16956e2..0000000 --- a/Assets/Samples/GameEvents/Events.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 52c66523ac2a021439e0990d6ec0f2ad -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Events/GameEvent.asset b/Assets/Samples/GameEvents/Events/GameEvent.asset deleted file mode 100644 index a9fd845..0000000 --- a/Assets/Samples/GameEvents/Events/GameEvent.asset +++ /dev/null @@ -1,21 +0,0 @@ -%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: 3ca9d72c0f5043e9b9ed7e25d63422f5, type: 3} - m_Name: GameEvent - m_EditorClassIdentifier: - description: 'asdasdas asdas asd asdasd21321 asdasd - - asdasd - - asdasd' - suppressExceptions: 0 - trace: 0 diff --git a/Assets/Samples/GameEvents/Events/GameEvent.asset.meta b/Assets/Samples/GameEvents/Events/GameEvent.asset.meta deleted file mode 100644 index 59e6a4b..0000000 --- a/Assets/Samples/GameEvents/Events/GameEvent.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 31423e6b17c75ce45a70cac3afc3f434 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Events/ShotGameEvent.asset b/Assets/Samples/GameEvents/Events/ShotGameEvent.asset deleted file mode 100644 index ce5342a..0000000 --- a/Assets/Samples/GameEvents/Events/ShotGameEvent.asset +++ /dev/null @@ -1,15 +0,0 @@ -%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: b7d4060906d542e7a9dca07008bdc652, type: 3} - m_Name: ShotGameEvent - m_EditorClassIdentifier: - debug: 0 diff --git a/Assets/Samples/GameEvents/Events/ShotGameEvent.asset.meta b/Assets/Samples/GameEvents/Events/ShotGameEvent.asset.meta deleted file mode 100644 index fb5cfb8..0000000 --- a/Assets/Samples/GameEvents/Events/ShotGameEvent.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d15108d9f7748d24584a3a876de12713 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Events/TargetDeathEvent.asset b/Assets/Samples/GameEvents/Events/TargetDeathEvent.asset deleted file mode 100644 index 66e9a18..0000000 --- a/Assets/Samples/GameEvents/Events/TargetDeathEvent.asset +++ /dev/null @@ -1,15 +0,0 @@ -%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: 21db6c450dc447148ebdd67c2a7c553d, type: 3} - m_Name: TargetDeathEvent - m_EditorClassIdentifier: - debug: 0 diff --git a/Assets/Samples/GameEvents/Events/TargetDeathEvent.asset.meta b/Assets/Samples/GameEvents/Events/TargetDeathEvent.asset.meta deleted file mode 100644 index 3768c8c..0000000 --- a/Assets/Samples/GameEvents/Events/TargetDeathEvent.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ba3e9660171fc3e499829b9d9ed8b9cb -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Materials.meta b/Assets/Samples/GameEvents/Materials.meta deleted file mode 100644 index cd5635d..0000000 --- a/Assets/Samples/GameEvents/Materials.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f7f26e1167d70f6488c790ba278c6f6d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Materials/Target.mat b/Assets/Samples/GameEvents/Materials/Target.mat deleted file mode 100644 index 74b7731..0000000 --- a/Assets/Samples/GameEvents/Materials/Target.mat +++ /dev/null @@ -1,110 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-8071150190349356560 -MonoBehaviour: - m_ObjectHideFlags: 11 - 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Target - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2050 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _AlphaClip: 0 - - _Blend: 0 - - _BumpScale: 1 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 0.9716981, g: 0.5179334, b: 0.5179334, a: 1} - - _Color: {r: 0.9716981, g: 0.5179334, b: 0.5179334, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/Samples/GameEvents/Materials/Target.mat.meta b/Assets/Samples/GameEvents/Materials/Target.mat.meta deleted file mode 100644 index 74c946f..0000000 --- a/Assets/Samples/GameEvents/Materials/Target.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 275f385ed1d71b242ac4af4042c4974e -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Materials/Wall.mat b/Assets/Samples/GameEvents/Materials/Wall.mat deleted file mode 100644 index c9e4aaa..0000000 --- a/Assets/Samples/GameEvents/Materials/Wall.mat +++ /dev/null @@ -1,110 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Wall - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2050 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _AlphaClip: 0 - - _Blend: 0 - - _BumpScale: 1 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} ---- !u!114 &2019156213369660498 -MonoBehaviour: - m_ObjectHideFlags: 11 - 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 diff --git a/Assets/Samples/GameEvents/Materials/Wall.mat.meta b/Assets/Samples/GameEvents/Materials/Wall.mat.meta deleted file mode 100644 index 5f33c4c..0000000 --- a/Assets/Samples/GameEvents/Materials/Wall.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6721031f739529e4d9bd149a7cfc0d80 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs.meta b/Assets/Samples/GameEvents/Prefabs.meta deleted file mode 100644 index 073738a..0000000 --- a/Assets/Samples/GameEvents/Prefabs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6f0a6aa25c3fac74d8d6463f1dbbe2ad -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab b/Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab deleted file mode 100644 index 42d652d..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab +++ /dev/null @@ -1,97 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &131506036300085454 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 131506036300085455} - - component: {fileID: 131506036300085457} - - component: {fileID: 131506036300085456} - - component: {fileID: 131506036300085458} - m_Layer: 5 - m_Name: ScoreEffect - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &131506036300085455 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 131506036300085454} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &131506036300085457 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 131506036300085454} - m_CullTransparentMesh: 0 ---- !u!114 &131506036300085456 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 131506036300085454} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.7735849, g: 0.39004228, b: 0.13501246, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &131506036300085458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 131506036300085454} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 04272e1dd140b4647a81945fd79860d0, type: 3} - m_Name: - m_EditorClassIdentifier: - floatDirection: {x: 0, y: 1, z: 0} - fadeOutColor: {r: 0, g: 0, b: 0, a: 0} - floatSpeed: 15 - floatDuration: 3 diff --git a/Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab.meta b/Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab.meta deleted file mode 100644 index 7baacaf..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ScoreEffect.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: afe75c613b95bbe449a605b71f6bdd67 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab b/Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab deleted file mode 100644 index d58e7cb..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab +++ /dev/null @@ -1,125 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &3201492554182924235 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3201492554182924232} - - component: {fileID: 3201492554182924238} - - component: {fileID: 3201492554182924233} - - component: {fileID: 3197890015597547032} - - component: {fileID: 3201492554182924239} - m_Layer: 5 - m_Name: ScoreHandler - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3201492554182924232 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201492554182924235} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 15} - m_SizeDelta: {x: 0, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3201492554182924238 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201492554182924235} - m_CullTransparentMesh: 0 ---- !u!114 &3201492554182924233 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201492554182924235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.6415094, g: 0.493236, b: 0.493236, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 24 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &3197890015597547032 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201492554182924235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0b2f85583a54b21922069d1d0951342, type: 3} - m_Name: - m_EditorClassIdentifier: - gameEvent: {fileID: 11400000, guid: ba3e9660171fc3e499829b9d9ed8b9cb, type: 2} - onGameEvent: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 3201492554182924239} - m_MethodName: IncreaseScore - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &3201492554182924239 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201492554182924235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 66ebf31fba15413096990cd356aa98e6, type: 3} - m_Name: - m_EditorClassIdentifier: - scoreIncrease: 1 - scoreEffectYOffset: 10 - scoreEffectPrefab: {fileID: 131506036300085458, guid: afe75c613b95bbe449a605b71f6bdd67, - type: 3} diff --git a/Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab.meta b/Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab.meta deleted file mode 100644 index b841c88..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ScoreHandler.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 29b95b1c8d09d5942a41b5a2e00ec62e -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab b/Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab deleted file mode 100644 index 28b91db..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab +++ /dev/null @@ -1,132 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &6785867113212262390 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6785867113212262385} - - component: {fileID: 6785867113212262384} - - component: {fileID: 6785867113212262391} - - component: {fileID: 6785867113212262386} - - component: {fileID: 3563761561003061392} - m_Layer: 0 - m_Name: ShooterCamera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6785867113212262385 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6785867113212262390} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &6785867113212262384 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6785867113212262390} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 85 - orthographic: 1 - orthographic size: 9 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!81 &6785867113212262391 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6785867113212262390} - m_Enabled: 1 ---- !u!114 &6785867113212262386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6785867113212262390} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f5322d0809e6c094c9f48718decf34db, type: 3} - m_Name: - m_EditorClassIdentifier: - shotGameEvent: {fileID: 11400000, guid: d15108d9f7748d24584a3a876de12713, type: 2} - shootButton: Fire1 ---- !u!114 &3563761561003061392 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6785867113212262390} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_Version: 2 diff --git a/Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab.meta b/Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab.meta deleted file mode 100644 index a632b7e..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ShooterCamera.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 39aea4008adc3114ba8ad37589825c2a -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab b/Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab deleted file mode 100644 index 4b5cdda..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab +++ /dev/null @@ -1,87 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &1526703896885373470 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1526703896885373471} - - component: {fileID: 1526703896885373469} - - component: {fileID: 1526703896885373468} - m_Layer: 0 - m_Name: ShotHandler - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1526703896885373471 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1526703896885373470} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1526703896885373469 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1526703896885373470} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ad65403ebd3445baad61e78877ff6ed6, type: 3} - m_Name: - m_EditorClassIdentifier: - gameEvent: {fileID: 11400000, guid: d15108d9f7748d24584a3a876de12713, type: 2} - onGameEvent: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1526703896885373468} - m_MethodName: HandleShot - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &1526703896885373468 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1526703896885373470} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1080b2340bee3cb4fa67da041bf81815, type: 3} - m_Name: - m_EditorClassIdentifier: - onShot: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 11400000, guid: ba3e9660171fc3e499829b9d9ed8b9cb, type: 2} - m_MethodName: RaiseGameEvent - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 diff --git a/Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab.meta b/Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab.meta deleted file mode 100644 index 008b6bb..0000000 --- a/Assets/Samples/GameEvents/Prefabs/ShotHandler.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2fef0869f9c6baf4db6f03bb350504df -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs/Spawner.prefab b/Assets/Samples/GameEvents/Prefabs/Spawner.prefab deleted file mode 100644 index 52a3757..0000000 --- a/Assets/Samples/GameEvents/Prefabs/Spawner.prefab +++ /dev/null @@ -1,91 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &3952613158653746747 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3952613158653746744} - - component: {fileID: 3952613158653746750} - - component: {fileID: 1775778486484008960} - - component: {fileID: 3952613158653746745} - m_Layer: 2 - m_Name: Spawner - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3952613158653746744 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3952613158653746747} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &3952613158653746750 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3952613158653746747} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 15, y: 0.5, z: 15} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &1775778486484008960 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3952613158653746747} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0b2f85583a54b21922069d1d0951342, type: 3} - m_Name: - m_EditorClassIdentifier: - gameEvent: {fileID: 11400000, guid: ba3e9660171fc3e499829b9d9ed8b9cb, type: 2} - onGameEvent: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 3952613158653746745} - m_MethodName: DecreaseSpawned - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &3952613158653746745 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3952613158653746747} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5916e7e0178a40ba8209ec5b7ac1d1a7, type: 3} - m_Name: - m_EditorClassIdentifier: - spawnedLimit: 10 - spawnPrefab: {fileID: 7326214114355414923, guid: 499fa445dcd1c5e4691103ff3cf960d3, - type: 3} - maxRandomScale: {x: 1, y: 2, z: 1} diff --git a/Assets/Samples/GameEvents/Prefabs/Spawner.prefab.meta b/Assets/Samples/GameEvents/Prefabs/Spawner.prefab.meta deleted file mode 100644 index 04b8d2d..0000000 --- a/Assets/Samples/GameEvents/Prefabs/Spawner.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: cde315354eda1ba4fae3b0c33583e9a1 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Prefabs/Target.prefab b/Assets/Samples/GameEvents/Prefabs/Target.prefab deleted file mode 100644 index 2de0355..0000000 --- a/Assets/Samples/GameEvents/Prefabs/Target.prefab +++ /dev/null @@ -1,126 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &2144511059860342937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1951316595536880060} - - component: {fileID: 7110850260090275822} - - component: {fileID: 4882082495510605036} - - component: {fileID: 6426669856614916432} - m_Layer: 0 - m_Name: Body - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1951316595536880060 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2144511059860342937} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 7326214114355414922} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &7110850260090275822 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2144511059860342937} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &4882082495510605036 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2144511059860342937} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 275f385ed1d71b242ac4af4042c4974e, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!65 &6426669856614916432 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2144511059860342937} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &7326214114355414923 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7326214114355414922} - m_Layer: 0 - m_Name: Target - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &7326214114355414922 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7326214114355414923} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1951316595536880060} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Samples/GameEvents/Prefabs/Target.prefab.meta b/Assets/Samples/GameEvents/Prefabs/Target.prefab.meta deleted file mode 100644 index 2061f8e..0000000 --- a/Assets/Samples/GameEvents/Prefabs/Target.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 499fa445dcd1c5e4691103ff3cf960d3 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Scenes.meta b/Assets/Samples/GameEvents/Scenes.meta deleted file mode 100644 index f260d51..0000000 --- a/Assets/Samples/GameEvents/Scenes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3bf78cb7fbb04e54e9e3f3dcfab4d50f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Scenes/GameEvents.unity b/Assets/Samples/GameEvents/Scenes/GameEvents.unity deleted file mode 100644 index 3bb8a1a..0000000 --- a/Assets/Samples/GameEvents/Scenes/GameEvents.unity +++ /dev/null @@ -1,816 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.40784085, g: 0.41969264, b: 0.4433962, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &179482124 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 179482125} - m_Layer: 0 - m_Name: Environment - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &179482125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 179482124} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 198214860} - - {fileID: 1418809552} - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &198214858 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 198214860} - - component: {fileID: 198214859} - m_Layer: 0 - m_Name: DirectionalLight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &198214859 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 198214858} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &198214860 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 198214858} - m_LocalRotation: {x: 0.305453, y: 0.46908507, z: -0.2784701, w: 0.78045636} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 179482125} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 47.565002, y: 56.409004, z: -12.679001} ---- !u!224 &530501970 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - m_PrefabInstance: {fileID: 3201492554344253082} - m_PrefabAsset: {fileID: 0} ---- !u!1 &597545309 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 597545313} - - component: {fileID: 597545312} - - component: {fileID: 597545311} - - component: {fileID: 597545310} - m_Layer: 5 - m_Name: UI - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &597545310 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &597545311 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &597545312 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &597545313 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597545309} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 530501970} - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1418809548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1418809552} - - component: {fileID: 1418809551} - - component: {fileID: 1418809550} - - component: {fileID: 1418809549} - m_Layer: 2 - m_Name: Wall - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!64 &1418809549 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &1418809550 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 6721031f739529e4d9bd149a7cfc0d80, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1418809551 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1418809552 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1418809548} - m_LocalRotation: {x: -0.0000014603136, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 3} - m_LocalScale: {x: 10, y: 10, z: 10} - m_Children: [] - m_Father: {fileID: 179482125} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &2097392453 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - m_PrefabInstance: {fileID: 1526703894922330458} - m_PrefabAsset: {fileID: 0} ---- !u!1 &2128261166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2128261167} - m_Layer: 0 - m_Name: Targets - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2128261167 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2128261166} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2131695426} - - {fileID: 2097392453} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &2131695426 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - m_PrefabInstance: {fileID: 3952613157831723386} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &1526703894922330458 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 2128261167} - m_Modifications: - - target: {fileID: 1526703896885373470, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_Name - value: ShotHandler - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1526703896885373471, guid: 2fef0869f9c6baf4db6f03bb350504df, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 2fef0869f9c6baf4db6f03bb350504df, type: 3} ---- !u!1001 &3201492554344253082 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 597545313} - m_Modifications: - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_SizeDelta.y - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924232, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 3201492554182924235, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, - type: 3} - propertyPath: m_Name - value: ScoreHandler - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 29b95b1c8d09d5942a41b5a2e00ec62e, type: 3} ---- !u!1001 &3952613157831723386 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 2128261167} - m_Modifications: - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalPosition.y - value: 0.25 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746744, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3952613158653746747, guid: cde315354eda1ba4fae3b0c33583e9a1, - type: 3} - propertyPath: m_Name - value: Spawner - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cde315354eda1ba4fae3b0c33583e9a1, type: 3} ---- !u!1001 &6785867112939382004 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalPosition.x - value: -7 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalPosition.y - value: 7 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalPosition.z - value: -7 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalRotation.x - value: 0.35355285 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalRotation.y - value: 0.35355288 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalRotation.z - value: -0.1464461 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalRotation.w - value: 0.8535539 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 45.000004 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 45.000004 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262385, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6785867113212262390, guid: 39aea4008adc3114ba8ad37589825c2a, - type: 3} - propertyPath: m_Name - value: ShooterCamera - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 39aea4008adc3114ba8ad37589825c2a, type: 3} diff --git a/Assets/Samples/GameEvents/Scenes/GameEvents.unity.meta b/Assets/Samples/GameEvents/Scenes/GameEvents.unity.meta deleted file mode 100644 index c8a1f0b..0000000 --- a/Assets/Samples/GameEvents/Scenes/GameEvents.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6a282a0d0949f8249a192188afeb9d1e -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/GameEvents/Scripts.meta b/Assets/Samples/Scripts.meta similarity index 100% rename from Assets/Samples/GameEvents/Scripts.meta rename to Assets/Samples/Scripts.meta diff --git a/Assets/Samples/GameEvents/Scripts/FloatFadeOutText.cs b/Assets/Samples/Scripts/FloatFadeOutText.cs similarity index 97% rename from Assets/Samples/GameEvents/Scripts/FloatFadeOutText.cs rename to Assets/Samples/Scripts/FloatFadeOutText.cs index 5856bcc..c37a935 100644 --- a/Assets/Samples/GameEvents/Scripts/FloatFadeOutText.cs +++ b/Assets/Samples/Scripts/FloatFadeOutText.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace GameEvents +namespace GameEvents.Smaples { [RequireComponent(typeof(Text))] public class FloatFadeOutText : MonoBehaviour diff --git a/Assets/Samples/GameEvents/Scripts/FloatFadeOutText.cs.meta b/Assets/Samples/Scripts/FloatFadeOutText.cs.meta similarity index 100% rename from Assets/Samples/GameEvents/Scripts/FloatFadeOutText.cs.meta rename to Assets/Samples/Scripts/FloatFadeOutText.cs.meta diff --git a/Assets/Samples/GameEvents/Scripts/Score.cs b/Assets/Samples/Scripts/Score.cs similarity index 97% rename from Assets/Samples/GameEvents/Scripts/Score.cs rename to Assets/Samples/Scripts/Score.cs index f4e599e..a99b935 100644 --- a/Assets/Samples/GameEvents/Scripts/Score.cs +++ b/Assets/Samples/Scripts/Score.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace GameEvents +namespace GameEvents.Smaples { [RequireComponent(typeof(Text))] public class Score : MonoBehaviour diff --git a/Assets/Samples/GameEvents/Scripts/Score.cs.meta b/Assets/Samples/Scripts/Score.cs.meta similarity index 100% rename from Assets/Samples/GameEvents/Scripts/Score.cs.meta rename to Assets/Samples/Scripts/Score.cs.meta diff --git a/Assets/Samples/GameEvents/Scripts/Shooter.cs b/Assets/Samples/Scripts/Shooter.cs similarity index 91% rename from Assets/Samples/GameEvents/Scripts/Shooter.cs rename to Assets/Samples/Scripts/Shooter.cs index ea6e0de..58a6c28 100644 --- a/Assets/Samples/GameEvents/Scripts/Shooter.cs +++ b/Assets/Samples/Scripts/Shooter.cs @@ -1,7 +1,7 @@ using GameEvents.Transform; using UnityEngine; -namespace GameEvents +namespace GameEvents.Samples { [RequireComponent(typeof(Camera))] public class Shooter : MonoBehaviour @@ -38,7 +38,7 @@ private void Shoot() if (Physics.Raycast(ray, out var hit)) { - shotGameEvent.RaiseGameEvent(hit.transform); + shotGameEvent.Raise(hit.transform); } } } diff --git a/Assets/Samples/GameEvents/Scripts/Shooter.cs.meta b/Assets/Samples/Scripts/Shooter.cs.meta similarity index 100% rename from Assets/Samples/GameEvents/Scripts/Shooter.cs.meta rename to Assets/Samples/Scripts/Shooter.cs.meta diff --git a/Assets/Samples/GameEvents/Scripts/ShotHandler.cs b/Assets/Samples/Scripts/ShotHandler.cs similarity index 92% rename from Assets/Samples/GameEvents/Scripts/ShotHandler.cs rename to Assets/Samples/Scripts/ShotHandler.cs index 068658b..9c279bc 100644 --- a/Assets/Samples/GameEvents/Scripts/ShotHandler.cs +++ b/Assets/Samples/Scripts/ShotHandler.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.Events; -namespace GameEvents +namespace GameEvents.Samples { public class ShotHandler : MonoBehaviour { diff --git a/Assets/Samples/GameEvents/Scripts/ShotHandler.cs.meta b/Assets/Samples/Scripts/ShotHandler.cs.meta similarity index 100% rename from Assets/Samples/GameEvents/Scripts/ShotHandler.cs.meta rename to Assets/Samples/Scripts/ShotHandler.cs.meta diff --git a/Assets/Samples/GameEvents/Scripts/Spawner.cs b/Assets/Samples/Scripts/Spawner.cs similarity index 98% rename from Assets/Samples/GameEvents/Scripts/Spawner.cs rename to Assets/Samples/Scripts/Spawner.cs index 934a974..a35adde 100644 --- a/Assets/Samples/GameEvents/Scripts/Spawner.cs +++ b/Assets/Samples/Scripts/Spawner.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace GameEvents +namespace GameEvents.Samples { [RequireComponent(typeof(BoxCollider))] public class Spawner : MonoBehaviour diff --git a/Assets/Samples/GameEvents/Scripts/Spawner.cs.meta b/Assets/Samples/Scripts/Spawner.cs.meta similarity index 100% rename from Assets/Samples/GameEvents/Scripts/Spawner.cs.meta rename to Assets/Samples/Scripts/Spawner.cs.meta diff --git a/Assets/Tests/Runtime/GameEvents/GameEventTest.cs b/Assets/Tests/Runtime/GameEventTest.cs similarity index 68% rename from Assets/Tests/Runtime/GameEvents/GameEventTest.cs rename to Assets/Tests/Runtime/GameEventTest.cs index ad02af7..19a84a5 100644 --- a/Assets/Tests/Runtime/GameEvents/GameEventTest.cs +++ b/Assets/Tests/Runtime/GameEventTest.cs @@ -1,20 +1,19 @@ -using System; using System.Linq; using GameEvents.Bool; using GameEvents.Float; -using GameEvents.Game; using GameEvents.GameObject; using GameEvents.Int; +using GameEvents.Simple; using GameEvents.String; using GameEvents.Transform; using GameEvents.Vector2; using GameEvents.Vector3; using NUnit.Framework; using UnityEngine; -using UnityEngine.Events; using Assert = UnityEngine.Assertions.Assert; -namespace GameEvents +// todo: look over tests, use parametrized +namespace GameEvents.Tests { public class GameEventTest { @@ -24,7 +23,7 @@ public void ShouldRaiseBoolGameEvent() var tester = new GameEventTester< BoolGameEventListener, BoolGameEvent, - BoolEvent, + BoolUnityEvent, bool >(); @@ -45,12 +44,12 @@ public void ShouldRaiseBoolGameEvent() public void ShouldRegisterAndUnregisterBoolGameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -60,7 +59,7 @@ public void ShouldRaiseFloatGameEvent() var tester = new GameEventTester< FloatGameEventListener, FloatGameEvent, - FloatEvent, + FloatUnityEvent, float >(); @@ -81,87 +80,87 @@ public void ShouldRaiseFloatGameEvent() public void ShouldRegisterAndUnregisterFloatGameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } - [Test] - public void ShouldRaiseGameEventEvent() - { - // Given. - var gameObject = new UnityEngine.GameObject(); - gameObject.SetActive(false); - - var listener = gameObject.AddComponent(); - - listener.OnGameEvent = new UnityEvent(); - listener.GameEvent = ScriptableObject.CreateInstance(); - - var count = new int[1]; - listener.OnGameEvent.AddListener(() => count[0]++); - - // Then. - gameObject.SetActive(true); - listener.GameEvent.RaiseGameEvent(); - - Assert.AreEqual(1, count[0]); - count[0] = 0; - - gameObject.SetActive(false); - listener.GameEvent.RaiseGameEvent(); - - Assert.AreEqual(0, count[0]); - } - - - [Test] - public void ShouldNotBreakChainWhenExceptionIsThrown() - { - // Given. - var gameObject = new UnityEngine.GameObject(); - gameObject.SetActive(false); - - var listenerWithError = gameObject.AddComponent(); - var listener = gameObject.AddComponent(); - - listenerWithError.OnGameEvent = new UnityEvent(); - listenerWithError.GameEvent = ScriptableObject.CreateInstance(); - - listener.OnGameEvent = new UnityEvent(); - listener.GameEvent = listenerWithError.GameEvent; - - var count = new int[1]; - listenerWithError.OnGameEvent.AddListener(() => throw new NullReferenceException()); - listener.OnGameEvent.AddListener(() => count[0]++); - - // Then. - gameObject.SetActive(true); - listener.GameEvent.RaiseGameEvent(); - - Assert.AreEqual(1, count[0]); - count[0] = 0; - - gameObject.SetActive(false); - listener.GameEvent.RaiseGameEvent(); - - Assert.AreEqual(0, count[0]); - } + // [Test] + // public void ShouldRaiseGameEventEvent() + // { + // // Given. + // var gameObject = new UnityEngine.GameObject(); + // gameObject.SetActive(false); + // + // var listener = gameObject.AddComponent(); + // + // listener.OnGameEvent = new UnityEvent(); + // listener.GameEvent = ScriptableObject.CreateInstance(); + // + // var count = new int[1]; + // listener.OnGameEvent.AddListener(() => count[0]++); + // + // // Then. + // gameObject.SetActive(true); + // listener.GameEvent.RaiseGameEvent(); + // + // Assert.AreEqual(1, count[0]); + // count[0] = 0; + // + // gameObject.SetActive(false); + // listener.GameEvent.RaiseGameEvent(); + // + // Assert.AreEqual(0, count[0]); + // } + // + // + // [Test] + // public void ShouldNotBreakChainWhenExceptionIsThrown() + // { + // // Given. + // var gameObject = new UnityEngine.GameObject(); + // gameObject.SetActive(false); + // + // var listenerWithError = gameObject.AddComponent(); + // var listener = gameObject.AddComponent(); + // + // listenerWithError.OnGameEvent = new UnityEvent(); + // listenerWithError.GameEvent = ScriptableObject.CreateInstance(); + // + // listener.OnGameEvent = new UnityEvent(); + // listener.GameEvent = listenerWithError.GameEvent; + // + // var count = new int[1]; + // listenerWithError.OnGameEvent.AddListener(() => throw new NullReferenceException()); + // listener.OnGameEvent.AddListener(() => count[0]++); + // + // // Then. + // gameObject.SetActive(true); + // listener.GameEvent.RaiseGameEvent(); + // + // Assert.AreEqual(1, count[0]); + // count[0] = 0; + // + // gameObject.SetActive(false); + // listener.GameEvent.RaiseGameEvent(); + // + // Assert.AreEqual(0, count[0]); + // } [Test] public void ShouldRegisterAndUnregisterGameObjectGameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -193,13 +192,13 @@ public void ShouldRaiseGameObjectGameEventListener() [Test] public void ShouldRegisterAndUnregisterGameEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); + var gameEvent = ScriptableObject.CreateInstance(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -230,12 +229,12 @@ public void ShouldRaiseIntGameEventListener() public void ShouldRegisterAndUnregisterIntGameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -266,12 +265,12 @@ public void ShouldRaiseStringGameEventListener() public void ShouldRegisterAndUnregisterStringGameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -304,12 +303,12 @@ public void ShouldRaiseTransformGameEventListener() public void ShouldRegisterAndUnregisterTransformGameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -340,12 +339,12 @@ public void ShouldRaiseVector2EventListener() public void ShouldRegisterAndUnregisterVector2GameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -376,12 +375,12 @@ public void ShouldRaiseVector3EventListener() public void ShouldRegisterAndUnregisterVector3GameEventListener() { var gameEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpArgumentListener(); + var listener = new NoOpListener(); - gameEvent.RegisterListener(listener); + gameEvent.Add(listener); Assert.AreEqual(1, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(listener); + gameEvent.Remove(listener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } @@ -389,15 +388,15 @@ public void ShouldRegisterAndUnregisterVector3GameEventListener() public void ShouldRegisterAndUnregisterGameEventMultipleListeners() { var gameEvent = ScriptableObject.CreateInstance(); - var firstListener = new NoOpArgumentListener(); - var secondListener = new NoOpArgumentListener(); + var firstListener = new NoOpListener(); + var secondListener = new NoOpListener(); - gameEvent.RegisterListener(firstListener); - gameEvent.RegisterListener(secondListener); + gameEvent.Add(firstListener); + gameEvent.Add(secondListener); Assert.AreEqual(2, gameEvent.Listeners.Count()); - gameEvent.UnregisterListener(firstListener); - gameEvent.UnregisterListener(secondListener); + gameEvent.Remove(firstListener); + gameEvent.Remove(secondListener); Assert.AreEqual(0, gameEvent.Listeners.Count()); } } diff --git a/Assets/Tests/Runtime/GameEvents/GameEventTest.cs.meta b/Assets/Tests/Runtime/GameEventTest.cs.meta similarity index 100% rename from Assets/Tests/Runtime/GameEvents/GameEventTest.cs.meta rename to Assets/Tests/Runtime/GameEventTest.cs.meta diff --git a/Assets/Tests/Runtime/GameEvents/GameEventTester.cs b/Assets/Tests/Runtime/GameEventTester.cs similarity index 81% rename from Assets/Tests/Runtime/GameEvents/GameEventTester.cs rename to Assets/Tests/Runtime/GameEventTester.cs index f6fe86a..2e4234d 100644 --- a/Assets/Tests/Runtime/GameEvents/GameEventTester.cs +++ b/Assets/Tests/Runtime/GameEventTester.cs @@ -1,10 +1,9 @@ using System.Collections.Generic; using System.Linq; -using GameEvents.Generic; using UnityEngine; using UnityEngine.Events; -namespace GameEvents +namespace GameEvents.Tests { public class GameEventTester< TGameEventListener, @@ -12,9 +11,9 @@ public class GameEventTester< TUnityEvent, TArgument > - where TGameEvent : ArgumentGameEvent + where TGameEvent : BaseGameEvent where TUnityEvent : UnityEvent, new() - where TGameEventListener : ArgumentGameEventListener< + where TGameEventListener : BaseGameEventListener< TGameEvent, TUnityEvent, TArgument @@ -37,8 +36,10 @@ public GameEventTester() gameEvent = ScriptableObject.CreateInstance(); var listener = gameObject.AddComponent(); - listener.OnGameEvent = onGameEvent; - listener.GameEvent = gameEvent; + + // todo: do we need these in the API as its only for tests atm? + // listener.OnGameEvent = onGameEvent; + // listener.GameEvent = gameEvent; } public int GetEventCount() @@ -63,7 +64,7 @@ public void SetActive(bool value) public void RaiseGameEvent(TArgument argument) { - gameEvent.RaiseGameEvent(argument); + gameEvent.Raise(argument); } private void AddEventValue(TArgument value) diff --git a/Assets/Tests/Runtime/GameEvents/GameEventTester.cs.meta b/Assets/Tests/Runtime/GameEventTester.cs.meta similarity index 100% rename from Assets/Tests/Runtime/GameEvents/GameEventTester.cs.meta rename to Assets/Tests/Runtime/GameEventTester.cs.meta diff --git a/Assets/Tests/Runtime/GameEvents.meta b/Assets/Tests/Runtime/GameEvents.meta deleted file mode 100644 index 6a449ba..0000000 --- a/Assets/Tests/Runtime/GameEvents.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 91621ed158ec436685dbaacc00db55a0 -timeCreated: 1601997578 \ No newline at end of file diff --git a/Assets/Tests/Runtime/GameEvents/NoOpArgumentListener.cs b/Assets/Tests/Runtime/GameEvents/NoOpArgumentListener.cs deleted file mode 100644 index 7b8cb39..0000000 --- a/Assets/Tests/Runtime/GameEvents/NoOpArgumentListener.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GameEvents.Generic; - -namespace GameEvents -{ - public class NoOpArgumentListener : IArgumentGameEventListener - { - public void RaiseGameEvent(TArgument argument) - { - } - } -} diff --git a/Assets/Tests/Runtime/GameEvents/NoOpListener.cs b/Assets/Tests/Runtime/GameEvents/NoOpListener.cs deleted file mode 100644 index ab363ae..0000000 --- a/Assets/Tests/Runtime/GameEvents/NoOpListener.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GameEvents.Generic; - -namespace GameEvents -{ - public class NoOpListener : IGameEventListener - { - public void RaiseGameEvent() - { - } - } -} diff --git a/Assets/Tests/Runtime/GameEvents/NoOpListener.cs.meta b/Assets/Tests/Runtime/GameEvents/NoOpListener.cs.meta deleted file mode 100644 index efe5fae..0000000 --- a/Assets/Tests/Runtime/GameEvents/NoOpListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 22c3c58e7a134791932dd59f07c2cc0b -timeCreated: 1602361321 \ No newline at end of file diff --git a/Assets/Tests/Runtime/NoOpListener.cs b/Assets/Tests/Runtime/NoOpListener.cs new file mode 100644 index 0000000..04b6a59 --- /dev/null +++ b/Assets/Tests/Runtime/NoOpListener.cs @@ -0,0 +1,9 @@ +namespace GameEvents.Tests +{ + public class NoOpListener : IGameEventListener + { + public void OnRaised(TArg arg) + { + } + } +} diff --git a/Assets/Tests/Runtime/GameEvents/NoOpArgumentListener.cs.meta b/Assets/Tests/Runtime/NoOpListener.cs.meta similarity index 100% rename from Assets/Tests/Runtime/GameEvents/NoOpArgumentListener.cs.meta rename to Assets/Tests/Runtime/NoOpListener.cs.meta From a8384254d8e557999c73976cb5fcad49cd6d3d63 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Fri, 22 Jan 2021 13:47:35 +0200 Subject: [PATCH 05/26] Cleanup, rename *GameEvent to *ScriptableEvent --- Assets/CHANGELOG.md.meta | 7 - Assets/Editor/BaseGameEventEditor.cs | 114 -------- Assets/Editor/BaseScriptableEventEditor.cs | 149 ++++++++++ ...meta => BaseScriptableEventEditor.cs.meta} | 0 Assets/Editor/BoolGameEventEditor.cs | 14 - Assets/Editor/BoolScriptableEventEditor.cs | 14 + ...meta => BoolScriptableEventEditor.cs.meta} | 0 Assets/Editor/Chark.GameEvents.Editor.asmdef | 9 - .../Chark.ScriptableEvents.Editor.asmdef | 9 + ...Chark.ScriptableEvents.Editor.asmdef.meta} | 0 Assets/Editor/FloatGameEventEditor.cs | 14 - Assets/Editor/FloatScriptableEventEditor.cs | 14 + ...eta => FloatScriptableEventEditor.cs.meta} | 0 ....cs => GameObjectScriptableEventEditor.cs} | 10 +- ...> GameObjectScriptableEventEditor.cs.meta} | 0 Assets/Editor/IntGameEventEditor.cs | 14 - Assets/Editor/IntScriptableEventEditor.cs | 14 + ....meta => IntScriptableEventEditor.cs.meta} | 0 Assets/Editor/SimpleEventEditor.cs | 15 - Assets/Editor/SimpleScriptableEventEditor.cs | 16 ++ ...ta => SimpleScriptableEventEditor.cs.meta} | 0 Assets/Editor/StringGameEventEditor.cs | 14 - Assets/Editor/StringScriptableEventEditor.cs | 15 + ...ta => StringScriptableEventEditor.cs.meta} | 0 ...r.cs => TransformScriptableEventEditor.cs} | 10 +- ...=> TransformScriptableEventEditor.cs.meta} | 0 Assets/Editor/Vector2GameEventEditor.cs | 16 -- Assets/Editor/Vector2ScriptableEventEditor.cs | 16 ++ ...a => Vector2ScriptableEventEditor.cs.meta} | 0 Assets/Editor/Vector3GameEventEditor.cs | 16 -- Assets/Editor/Vector3ScriptableEventEditor.cs | 16 ++ ...a => Vector3ScriptableEventEditor.cs.meta} | 0 Assets/LICENSE.md | 21 -- Assets/LICENSE.md.meta | 7 - ...aseGameEvent.cs => BaseScriptableEvent.cs} | 33 ++- ...nt.cs.meta => BaseScriptableEvent.cs.meta} | 0 ...ener.cs => BaseScriptableEventListener.cs} | 20 +- ...ta => BaseScriptableEventListener.cs.meta} | 0 Assets/Runtime/Bool/BoolGameEvent.cs | 9 - Assets/Runtime/Bool/BoolGameEventListener.cs | 9 - Assets/Runtime/Bool/BoolScriptableEvent.cs | 12 + ...nt.cs.meta => BoolScriptableEvent.cs.meta} | 0 .../Bool/BoolScriptableEventListener.cs | 10 + ...ta => BoolScriptableEventListener.cs.meta} | 0 Assets/Runtime/Bool/BoolUnityEvent.cs | 2 +- ...s.asmdef => Chark.ScriptableEvents.asmdef} | 2 +- ...eta => Chark.ScriptableEvents.asmdef.meta} | 0 Assets/Runtime/Float/FloatGameEvent.cs | 9 - .../Runtime/Float/FloatGameEventListener.cs | 10 - Assets/Runtime/Float/FloatScriptableEvent.cs | 12 + ...t.cs.meta => FloatScriptableEvent.cs.meta} | 0 .../Float/FloatScriptableEventListener.cs | 10 + ...a => FloatScriptableEventListener.cs.meta} | 0 Assets/Runtime/Float/FloatUnityEvent.cs | 2 +- .../Runtime/GameObject/GameObjectGameEvent.cs | 9 - .../GameObject/GameObjectGameEventListener.cs | 12 +- .../GameObject/GameObjectScriptableEvent.cs | 12 + ...meta => GameObjectScriptableEvent.cs.meta} | 0 .../GameObject/GameObjectUnityEvent.cs | 2 +- Assets/Runtime/IGameEvent.cs | 27 -- Assets/Runtime/IGameEventListener.cs | 10 - Assets/Runtime/IScriptableEvent.cs | 27 ++ ...Event.cs.meta => IScriptableEvent.cs.meta} | 0 Assets/Runtime/IScriptableEventListener.cs | 10 + ....meta => IScriptableEventListener.cs.meta} | 0 Assets/Runtime/Int/IntGameEvent.cs | 9 - Assets/Runtime/Int/IntGameEventListener.cs | 9 - Assets/Runtime/Int/IntScriptableEvent.cs | 12 + ...ent.cs.meta => IntScriptableEvent.cs.meta} | 0 .../Runtime/Int/IntScriptableEventListener.cs | 10 + ...eta => IntScriptableEventListener.cs.meta} | 0 Assets/Runtime/Int/IntUnityEvent.cs | 2 +- Assets/Runtime/Simple/SimpleArg.cs | 2 +- Assets/Runtime/Simple/SimpleGameEvent.cs | 16 -- .../Runtime/Simple/SimpleGameEventListener.cs | 7 - .../Runtime/Simple/SimpleScriptableEvent.cs | 19 ++ ....cs.meta => SimpleScriptableEvent.cs.meta} | 0 .../Simple/SimpleScriptableEventListener.cs | 7 + ... => SimpleScriptableEventListener.cs.meta} | 0 Assets/Runtime/Simple/SimpleUnityEvent.cs | 2 +- Assets/Runtime/String/StringGameEvent.cs | 9 - .../Runtime/String/StringGameEventListener.cs | 10 - .../Runtime/String/StringScriptableEvent.cs | 12 + ....cs.meta => StringScriptableEvent.cs.meta} | 0 .../String/StringScriptableEventListener.cs | 10 + ... => StringScriptableEventListener.cs.meta} | 0 Assets/Runtime/String/StringUnityEvent.cs | 2 +- .../Runtime/Transform/TransformGameEvent.cs | 12 - .../Transform/TransformGameEventListener.cs | 10 - .../Transform/TransformScriptableEvent.cs | 12 + ....meta => TransformScriptableEvent.cs.meta} | 0 .../TransformScriptableEventListener.cs | 14 + ... TransformScriptableEventListener.cs.meta} | 0 .../Runtime/Transform/TransformUnityEvent.cs | 2 +- Assets/Runtime/Vector2/Vector2GameEvent.cs | 9 - .../Vector2/Vector2GameEventListener.cs | 10 - .../Runtime/Vector2/Vector2ScriptableEvent.cs | 12 + ...cs.meta => Vector2ScriptableEvent.cs.meta} | 0 .../Vector2/Vector2ScriptableEventListener.cs | 14 + ...=> Vector2ScriptableEventListener.cs.meta} | 0 Assets/Runtime/Vector2/Vector2UnityEvent.cs | 2 +- Assets/Runtime/Vector3/Vector3GameEvent.cs | 9 - .../Vector3/Vector3GameEventListener.cs | 10 - .../Runtime/Vector3/Vector3ScriptableEvent.cs | 12 + ...cs.meta => Vector3ScriptableEvent.cs.meta} | 0 .../Vector3/Vector3ScriptableEventListener.cs | 14 + ...=> Vector3ScriptableEventListener.cs.meta} | 0 Assets/Runtime/Vector3/VectorUnity3Event.cs | 2 +- ... => Chark.ScriptableEvents.Samples.asmdef} | 6 +- ...hark.ScriptableEvents.Samples.asmdef.meta} | 0 Assets/Samples/Scripts/FloatFadeOutText.cs | 2 +- Assets/Samples/Scripts/Score.cs | 2 +- Assets/Samples/Scripts/Shooter.cs | 8 +- Assets/Samples/Scripts/ShotHandler.cs | 2 +- Assets/Samples/Scripts/Spawner.cs | 2 +- ...ef => Chark.ScriptableEvents.Tests.asmdef} | 4 +- ... Chark.ScriptableEvents.Tests.asmdef.meta} | 0 Assets/Tests/Runtime/GameEventTest.cs | 272 +++++++++--------- Assets/Tests/Runtime/GameEventTester.cs | 34 +-- Assets/Tests/Runtime/NoOpListener.cs | 4 +- Assets/package.json | 6 +- Assets/CHANGELOG.md => CHANGELOG.md | 0 LICENSE.md | 2 +- README.md | 136 +-------- 124 files changed, 737 insertions(+), 818 deletions(-) delete mode 100644 Assets/CHANGELOG.md.meta delete mode 100644 Assets/Editor/BaseGameEventEditor.cs create mode 100644 Assets/Editor/BaseScriptableEventEditor.cs rename Assets/Editor/{BaseGameEventEditor.cs.meta => BaseScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/BoolGameEventEditor.cs create mode 100644 Assets/Editor/BoolScriptableEventEditor.cs rename Assets/Editor/{BoolGameEventEditor.cs.meta => BoolScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/Chark.GameEvents.Editor.asmdef create mode 100644 Assets/Editor/Chark.ScriptableEvents.Editor.asmdef rename Assets/Editor/{Chark.GameEvents.Editor.asmdef.meta => Chark.ScriptableEvents.Editor.asmdef.meta} (100%) delete mode 100644 Assets/Editor/FloatGameEventEditor.cs create mode 100644 Assets/Editor/FloatScriptableEventEditor.cs rename Assets/Editor/{FloatGameEventEditor.cs.meta => FloatScriptableEventEditor.cs.meta} (100%) rename Assets/Editor/{GameObjectGameEventEditor.cs => GameObjectScriptableEventEditor.cs} (55%) rename Assets/Editor/{GameObjectGameEventEditor.cs.meta => GameObjectScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/IntGameEventEditor.cs create mode 100644 Assets/Editor/IntScriptableEventEditor.cs rename Assets/Editor/{IntGameEventEditor.cs.meta => IntScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/SimpleEventEditor.cs create mode 100644 Assets/Editor/SimpleScriptableEventEditor.cs rename Assets/Editor/{SimpleEventEditor.cs.meta => SimpleScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/StringGameEventEditor.cs create mode 100644 Assets/Editor/StringScriptableEventEditor.cs rename Assets/Editor/{StringGameEventEditor.cs.meta => StringScriptableEventEditor.cs.meta} (100%) rename Assets/Editor/{TransformGameEventEditor.cs => TransformScriptableEventEditor.cs} (55%) rename Assets/Editor/{TransformGameEventEditor.cs.meta => TransformScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/Vector2GameEventEditor.cs create mode 100644 Assets/Editor/Vector2ScriptableEventEditor.cs rename Assets/Editor/{Vector2GameEventEditor.cs.meta => Vector2ScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/Editor/Vector3GameEventEditor.cs create mode 100644 Assets/Editor/Vector3ScriptableEventEditor.cs rename Assets/Editor/{Vector3GameEventEditor.cs.meta => Vector3ScriptableEventEditor.cs.meta} (100%) delete mode 100644 Assets/LICENSE.md delete mode 100644 Assets/LICENSE.md.meta rename Assets/Runtime/{BaseGameEvent.cs => BaseScriptableEvent.cs} (64%) rename Assets/Runtime/{BaseGameEvent.cs.meta => BaseScriptableEvent.cs.meta} (100%) rename Assets/Runtime/{BaseGameEventListener.cs => BaseScriptableEventListener.cs} (58%) rename Assets/Runtime/{BaseGameEventListener.cs.meta => BaseScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/Bool/BoolGameEvent.cs delete mode 100644 Assets/Runtime/Bool/BoolGameEventListener.cs create mode 100644 Assets/Runtime/Bool/BoolScriptableEvent.cs rename Assets/Runtime/Bool/{BoolGameEvent.cs.meta => BoolScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Bool/BoolScriptableEventListener.cs rename Assets/Runtime/Bool/{BoolGameEventListener.cs.meta => BoolScriptableEventListener.cs.meta} (100%) rename Assets/Runtime/{Chark.GameEvents.asmdef => Chark.ScriptableEvents.asmdef} (88%) rename Assets/Runtime/{Chark.GameEvents.asmdef.meta => Chark.ScriptableEvents.asmdef.meta} (100%) delete mode 100644 Assets/Runtime/Float/FloatGameEvent.cs delete mode 100644 Assets/Runtime/Float/FloatGameEventListener.cs create mode 100644 Assets/Runtime/Float/FloatScriptableEvent.cs rename Assets/Runtime/Float/{FloatGameEvent.cs.meta => FloatScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Float/FloatScriptableEventListener.cs rename Assets/Runtime/Float/{FloatGameEventListener.cs.meta => FloatScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/GameObject/GameObjectGameEvent.cs create mode 100644 Assets/Runtime/GameObject/GameObjectScriptableEvent.cs rename Assets/Runtime/GameObject/{GameObjectGameEvent.cs.meta => GameObjectScriptableEvent.cs.meta} (100%) delete mode 100644 Assets/Runtime/IGameEvent.cs delete mode 100644 Assets/Runtime/IGameEventListener.cs create mode 100644 Assets/Runtime/IScriptableEvent.cs rename Assets/Runtime/{IGameEvent.cs.meta => IScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/IScriptableEventListener.cs rename Assets/Runtime/{IGameEventListener.cs.meta => IScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/Int/IntGameEvent.cs delete mode 100644 Assets/Runtime/Int/IntGameEventListener.cs create mode 100644 Assets/Runtime/Int/IntScriptableEvent.cs rename Assets/Runtime/Int/{IntGameEvent.cs.meta => IntScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Int/IntScriptableEventListener.cs rename Assets/Runtime/Int/{IntGameEventListener.cs.meta => IntScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/Simple/SimpleGameEvent.cs delete mode 100644 Assets/Runtime/Simple/SimpleGameEventListener.cs create mode 100644 Assets/Runtime/Simple/SimpleScriptableEvent.cs rename Assets/Runtime/Simple/{SimpleGameEvent.cs.meta => SimpleScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Simple/SimpleScriptableEventListener.cs rename Assets/Runtime/Simple/{SimpleGameEventListener.cs.meta => SimpleScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/String/StringGameEvent.cs delete mode 100644 Assets/Runtime/String/StringGameEventListener.cs create mode 100644 Assets/Runtime/String/StringScriptableEvent.cs rename Assets/Runtime/String/{StringGameEvent.cs.meta => StringScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/String/StringScriptableEventListener.cs rename Assets/Runtime/String/{StringGameEventListener.cs.meta => StringScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/Transform/TransformGameEvent.cs delete mode 100644 Assets/Runtime/Transform/TransformGameEventListener.cs create mode 100644 Assets/Runtime/Transform/TransformScriptableEvent.cs rename Assets/Runtime/Transform/{TransformGameEvent.cs.meta => TransformScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Transform/TransformScriptableEventListener.cs rename Assets/Runtime/Transform/{TransformGameEventListener.cs.meta => TransformScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/Vector2/Vector2GameEvent.cs delete mode 100644 Assets/Runtime/Vector2/Vector2GameEventListener.cs create mode 100644 Assets/Runtime/Vector2/Vector2ScriptableEvent.cs rename Assets/Runtime/Vector2/{Vector2GameEvent.cs.meta => Vector2ScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs rename Assets/Runtime/Vector2/{Vector2GameEventListener.cs.meta => Vector2ScriptableEventListener.cs.meta} (100%) delete mode 100644 Assets/Runtime/Vector3/Vector3GameEvent.cs delete mode 100644 Assets/Runtime/Vector3/Vector3GameEventListener.cs create mode 100644 Assets/Runtime/Vector3/Vector3ScriptableEvent.cs rename Assets/Runtime/Vector3/{Vector3GameEvent.cs.meta => Vector3ScriptableEvent.cs.meta} (100%) create mode 100644 Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs rename Assets/Runtime/Vector3/{Vector3GameEventListener.cs.meta => Vector3ScriptableEventListener.cs.meta} (100%) rename Assets/Samples/{Chark.GameEvents.Samples.asmdef => Chark.ScriptableEvents.Samples.asmdef} (71%) rename Assets/Samples/{Chark.GameEvents.Samples.asmdef.meta => Chark.ScriptableEvents.Samples.asmdef.meta} (100%) rename Assets/Tests/Runtime/{Chark.GameEvents.Tests.asmdef => Chark.ScriptableEvents.Tests.asmdef} (83%) rename Assets/Tests/Runtime/{Chark.GameEvents.Tests.asmdef.meta => Chark.ScriptableEvents.Tests.asmdef.meta} (100%) rename Assets/CHANGELOG.md => CHANGELOG.md (100%) diff --git a/Assets/CHANGELOG.md.meta b/Assets/CHANGELOG.md.meta deleted file mode 100644 index 003b42d..0000000 --- a/Assets/CHANGELOG.md.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 50664326471aadf4db8163c4cbf2a1a5 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor/BaseGameEventEditor.cs b/Assets/Editor/BaseGameEventEditor.cs deleted file mode 100644 index 4381247..0000000 --- a/Assets/Editor/BaseGameEventEditor.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEditor; -using UnityEngine; - -namespace GameEvents.Editor -{ - [CanEditMultipleObjects] - public abstract class BaseGameEventEditor - : UnityEditor.Editor - where TGameEvent : class, IGameEvent - { - #region Fields - - private SerializedProperty descriptionField; - private TArg argValue; - - #endregion - - #region Unity Lifecycle - - public void OnEnable() - { - // todo: add locking https://github.com/roboryantron/Unite2017/blob/master/Assets/Code/Variables/Editor/FloatReferenceDrawer.cs - descriptionField = serializedObject.FindProperty("description"); - } - - public override void OnInspectorGUI() - { - base.OnInspectorGUI(); - - if (!(target is TGameEvent gameEvent)) - { - return; - } - - GUI.enabled = Application.isPlaying; - EditorGUILayout.Space(); - - DrawRaise(gameEvent); - - EditorGUILayout.Space(); - DrawReferences(gameEvent); - } - - #endregion - - #region Methods - - private void DrawRaise(TGameEvent gameEvent) - { - DrawPlaymodeLabel("Raise event"); - GUILayout.BeginHorizontal(); - - argValue = DrawArgField(argValue); - if (GUILayout.Button("Raise")) - { - gameEvent.Raise(argValue); - } - - GUILayout.EndHorizontal(); - } - - /// - /// Value that is entered in the game event argument field. - /// - protected abstract TArg DrawArgField(TArg value); - - private static void DrawReferences(IGameEvent gameEvent) - { - DrawListeners(gameEvent.Listeners); - } - - private static void DrawPlaymodeLabel(string text) - { - var labelSuffix = Application.isPlaying ? "" : "(play mode only)"; - GUILayout.Label($"{text} {labelSuffix}"); - } - - private static void DrawListeners(ICollection listeners) - { - DrawPlaymodeLabel("Listeners"); - if (Application.isPlaying) - { - if (listeners.Count == 0) - { - EditorGUILayout.HelpBox( - "There are no listeners listening for this event", - MessageType.Warning - ); - - return; - } - - foreach (var listener in listeners) - { - if (listener is MonoBehaviour behaviour) - { - EditorGUILayout.ObjectField(behaviour, typeof(UnityEngine.Object), true); - } - } - } - else - { - EditorGUILayout.HelpBox( - "Registered listeners will be displayed here", - MessageType.Info - ); - } - } - - #endregion - } -} diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Assets/Editor/BaseScriptableEventEditor.cs new file mode 100644 index 0000000..ec8c8e2 --- /dev/null +++ b/Assets/Editor/BaseScriptableEventEditor.cs @@ -0,0 +1,149 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace ScriptableEvents.Editor +{ + [CanEditMultipleObjects] + public abstract class BaseScriptableEventEditor + : UnityEditor.Editor + where TScriptableEvent : class, IScriptableEvent + { + #region Fields + + private SerializedProperty descriptionProperty; + private SerializedProperty lockDescription; + + + private TArg argValue; + + #endregion + + #region Unity Lifecycle + + public void OnEnable() + { + // todo: add locking https://github.com/roboryantron/Unite2017/blob/master/Assets/Code/Variables/Editor/FloatReferenceDrawer.cs + descriptionProperty = serializedObject.FindProperty("description"); + lockDescription = serializedObject.FindProperty("lockDescription"); + } + + public override void OnInspectorGUI() + { + GUI.enabled = false; + EditorGUILayout.ObjectField("Script", MonoScript.FromScriptableObject(target as ScriptableObject), typeof(TScriptableEvent), false); + GUI.enabled = true; + + EditorGUI.BeginChangeCheck(); + + // Description. + EditorGUILayout.LabelField("Description"); + var descriptionLabelRect = GUILayoutUtility.GetLastRect(); + + var lockStyle = GUI.skin.GetStyle("IN LockButton"); + descriptionLabelRect.x = descriptionLabelRect.xMin + EditorStyles.label.CalcSize(new GUIContent("Description")).x; + descriptionLabelRect.width = lockStyle.fixedWidth; + lockDescription.boolValue = EditorGUI.Toggle(descriptionLabelRect, GUIContent.none, lockDescription.boolValue, lockStyle); + + GUI.enabled = !lockDescription.boolValue; + var style = new GUIStyle(EditorStyles.textArea); + style.richText = true; + descriptionProperty.stringValue = EditorGUILayout.TextArea(descriptionProperty.stringValue, style); + GUI.enabled = true; + + // Description lock. + + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + } + + DrawPropertiesExcluding(serializedObject, descriptionProperty.name, lockDescription.name); + + return; + + base.OnInspectorGUI(); + + if (!(target is TScriptableEvent ScriptableEvent)) + { + return; + } + + GUI.enabled = Application.isPlaying; + EditorGUILayout.Space(); + + DrawRaise(ScriptableEvent); + + EditorGUILayout.Space(); + DrawReferences(ScriptableEvent); + } + + #endregion + + #region Methods + + private void DrawRaise(TScriptableEvent scriptableEvent) + { + DrawPlaymodeLabel("Raise event"); + GUILayout.BeginHorizontal(); + + argValue = DrawArgField(argValue); + if (GUILayout.Button("Raise")) + { + scriptableEvent.Raise(argValue); + } + + GUILayout.EndHorizontal(); + } + + /// + /// Value that is entered in the Scriptable Event argument field. + /// + protected abstract TArg DrawArgField(TArg value); + + private static void DrawReferences(IScriptableEvent scriptableEvent) + { + DrawListeners(scriptableEvent.Listeners); + } + + private static void DrawPlaymodeLabel(string text) + { + var labelSuffix = Application.isPlaying ? "" : "(play mode only)"; + GUILayout.Label($"{text} {labelSuffix}"); + } + + private static void DrawListeners(ICollection listeners) + { + DrawPlaymodeLabel("Listeners"); + if (Application.isPlaying) + { + if (listeners.Count == 0) + { + EditorGUILayout.HelpBox( + "There are no listeners listening for this event", + MessageType.Warning + ); + + return; + } + + foreach (var listener in listeners) + { + if (listener is MonoBehaviour behaviour) + { + EditorGUILayout.ObjectField(behaviour, typeof(Object), true); + } + } + } + else + { + EditorGUILayout.HelpBox( + "Registered listeners will be displayed here", + MessageType.Info + ); + } + } + + #endregion + } +} diff --git a/Assets/Editor/BaseGameEventEditor.cs.meta b/Assets/Editor/BaseScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/BaseGameEventEditor.cs.meta rename to Assets/Editor/BaseScriptableEventEditor.cs.meta diff --git a/Assets/Editor/BoolGameEventEditor.cs b/Assets/Editor/BoolGameEventEditor.cs deleted file mode 100644 index aa12ece..0000000 --- a/Assets/Editor/BoolGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Bool; -using UnityEditor; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(BoolGameEvent))] - public class BoolGameEventEditor : BaseGameEventEditor - { - protected override bool DrawArgField(bool value) - { - return EditorGUILayout.Toggle(value); - } - } -} diff --git a/Assets/Editor/BoolScriptableEventEditor.cs b/Assets/Editor/BoolScriptableEventEditor.cs new file mode 100644 index 0000000..8798473 --- /dev/null +++ b/Assets/Editor/BoolScriptableEventEditor.cs @@ -0,0 +1,14 @@ +using ScriptableEvents.Bool; +using UnityEditor; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(BoolScriptableEvent))] + public class BoolScriptableEventEditor : BaseScriptableEventEditor + { + protected override bool DrawArgField(bool value) + { + return EditorGUILayout.Toggle(value); + } + } +} diff --git a/Assets/Editor/BoolGameEventEditor.cs.meta b/Assets/Editor/BoolScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/BoolGameEventEditor.cs.meta rename to Assets/Editor/BoolScriptableEventEditor.cs.meta diff --git a/Assets/Editor/Chark.GameEvents.Editor.asmdef b/Assets/Editor/Chark.GameEvents.Editor.asmdef deleted file mode 100644 index ded14e8..0000000 --- a/Assets/Editor/Chark.GameEvents.Editor.asmdef +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "Chark.GameEvents.Editor", - "references": [ - "Chark.GameEvents" - ], - "includePlatforms": [ - "Editor" - ] -} diff --git a/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef b/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef new file mode 100644 index 0000000..6734d8f --- /dev/null +++ b/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef @@ -0,0 +1,9 @@ +{ + "name": "Chark.ScriptableEvents.Editor", + "references": [ + "Chark.ScriptableEvents" + ], + "includePlatforms": [ + "Editor" + ] +} diff --git a/Assets/Editor/Chark.GameEvents.Editor.asmdef.meta b/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef.meta similarity index 100% rename from Assets/Editor/Chark.GameEvents.Editor.asmdef.meta rename to Assets/Editor/Chark.ScriptableEvents.Editor.asmdef.meta diff --git a/Assets/Editor/FloatGameEventEditor.cs b/Assets/Editor/FloatGameEventEditor.cs deleted file mode 100644 index 52d47e0..0000000 --- a/Assets/Editor/FloatGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Float; -using UnityEditor; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(FloatGameEvent))] - public class FloatGameEventEditor : BaseGameEventEditor - { - protected override float DrawArgField(float value) - { - return EditorGUILayout.FloatField(value); - } - } -} diff --git a/Assets/Editor/FloatScriptableEventEditor.cs b/Assets/Editor/FloatScriptableEventEditor.cs new file mode 100644 index 0000000..f7ce3e2 --- /dev/null +++ b/Assets/Editor/FloatScriptableEventEditor.cs @@ -0,0 +1,14 @@ +using ScriptableEvents.Float; +using UnityEditor; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(FloatScriptableEvent))] + public class FloatScriptableEventEditor : BaseScriptableEventEditor + { + protected override float DrawArgField(float value) + { + return EditorGUILayout.FloatField(value); + } + } +} diff --git a/Assets/Editor/FloatGameEventEditor.cs.meta b/Assets/Editor/FloatScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/FloatGameEventEditor.cs.meta rename to Assets/Editor/FloatScriptableEventEditor.cs.meta diff --git a/Assets/Editor/GameObjectGameEventEditor.cs b/Assets/Editor/GameObjectScriptableEventEditor.cs similarity index 55% rename from Assets/Editor/GameObjectGameEventEditor.cs rename to Assets/Editor/GameObjectScriptableEventEditor.cs index 376bf47..2c79984 100644 --- a/Assets/Editor/GameObjectGameEventEditor.cs +++ b/Assets/Editor/GameObjectScriptableEventEditor.cs @@ -1,11 +1,11 @@ -using GameEvents.GameObject; +using ScriptableEvents.GameObject; using UnityEditor; -namespace GameEvents.Editor +namespace ScriptableEvents.Editor { - [CustomEditor(typeof(GameObjectGameEvent))] - public class GameObjectGameEventEditor - : BaseGameEventEditor + [CustomEditor(typeof(GameObjectScriptableEvent))] + public class GameObjectScriptableEventEditor + : BaseScriptableEventEditor { protected override UnityEngine.GameObject DrawArgField(UnityEngine.GameObject value) { diff --git a/Assets/Editor/GameObjectGameEventEditor.cs.meta b/Assets/Editor/GameObjectScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameObjectGameEventEditor.cs.meta rename to Assets/Editor/GameObjectScriptableEventEditor.cs.meta diff --git a/Assets/Editor/IntGameEventEditor.cs b/Assets/Editor/IntGameEventEditor.cs deleted file mode 100644 index 4c89eef..0000000 --- a/Assets/Editor/IntGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.Int; -using UnityEditor; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(IntGameEvent))] - public class IntGameEventEditor : BaseGameEventEditor - { - protected override int DrawArgField(int value) - { - return EditorGUILayout.IntField(value); - } - } -} diff --git a/Assets/Editor/IntScriptableEventEditor.cs b/Assets/Editor/IntScriptableEventEditor.cs new file mode 100644 index 0000000..62ba59e --- /dev/null +++ b/Assets/Editor/IntScriptableEventEditor.cs @@ -0,0 +1,14 @@ +using ScriptableEvents.Int; +using UnityEditor; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(IntScriptableEvent))] + public class IntScriptableEventEditor : BaseScriptableEventEditor + { + protected override int DrawArgField(int value) + { + return EditorGUILayout.IntField(value); + } + } +} diff --git a/Assets/Editor/IntGameEventEditor.cs.meta b/Assets/Editor/IntScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/IntGameEventEditor.cs.meta rename to Assets/Editor/IntScriptableEventEditor.cs.meta diff --git a/Assets/Editor/SimpleEventEditor.cs b/Assets/Editor/SimpleEventEditor.cs deleted file mode 100644 index df1f755..0000000 --- a/Assets/Editor/SimpleEventEditor.cs +++ /dev/null @@ -1,15 +0,0 @@ -using GameEvents.Simple; -using UnityEditor; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(SimpleGameEvent))] - public class SimpleEventEditor : BaseGameEventEditor - { - protected override SimpleArg DrawArgField(SimpleArg value) - { - // SimpleGameEvent "doesn't take" an arg. - return value; - } - } -} diff --git a/Assets/Editor/SimpleScriptableEventEditor.cs b/Assets/Editor/SimpleScriptableEventEditor.cs new file mode 100644 index 0000000..e2a6a79 --- /dev/null +++ b/Assets/Editor/SimpleScriptableEventEditor.cs @@ -0,0 +1,16 @@ +using ScriptableEvents.Simple; +using UnityEditor; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(SimpleScriptableEvent))] + public class SimpleScriptableEventEditor + : BaseScriptableEventEditor + { + protected override SimpleArg DrawArgField(SimpleArg value) + { + // SimpleScriptableEvent "doesn't take" an arg. + return value; + } + } +} diff --git a/Assets/Editor/SimpleEventEditor.cs.meta b/Assets/Editor/SimpleScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/SimpleEventEditor.cs.meta rename to Assets/Editor/SimpleScriptableEventEditor.cs.meta diff --git a/Assets/Editor/StringGameEventEditor.cs b/Assets/Editor/StringGameEventEditor.cs deleted file mode 100644 index 3528c44..0000000 --- a/Assets/Editor/StringGameEventEditor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GameEvents.String; -using UnityEditor; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(StringGameEvent))] - public class StringGameEventEditor : BaseGameEventEditor - { - protected override string DrawArgField(string value) - { - return EditorGUILayout.TextField(value); - } - } -} diff --git a/Assets/Editor/StringScriptableEventEditor.cs b/Assets/Editor/StringScriptableEventEditor.cs new file mode 100644 index 0000000..964fb45 --- /dev/null +++ b/Assets/Editor/StringScriptableEventEditor.cs @@ -0,0 +1,15 @@ +using ScriptableEvents.String; +using UnityEditor; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(StringScriptableEvent))] + public class StringScriptableEventEditor + : BaseScriptableEventEditor + { + protected override string DrawArgField(string value) + { + return EditorGUILayout.TextField(value); + } + } +} diff --git a/Assets/Editor/StringGameEventEditor.cs.meta b/Assets/Editor/StringScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/StringGameEventEditor.cs.meta rename to Assets/Editor/StringScriptableEventEditor.cs.meta diff --git a/Assets/Editor/TransformGameEventEditor.cs b/Assets/Editor/TransformScriptableEventEditor.cs similarity index 55% rename from Assets/Editor/TransformGameEventEditor.cs rename to Assets/Editor/TransformScriptableEventEditor.cs index 9cfd0c7..f5aa1e5 100644 --- a/Assets/Editor/TransformGameEventEditor.cs +++ b/Assets/Editor/TransformScriptableEventEditor.cs @@ -1,11 +1,11 @@ -using GameEvents.Transform; +using ScriptableEvents.Transform; using UnityEditor; -namespace GameEvents.Editor +namespace ScriptableEvents.Editor { - [CustomEditor(typeof(TransformGameEvent))] - public class TransformGameEventEditor - : BaseGameEventEditor + [CustomEditor(typeof(TransformScriptableEvent))] + public class TransformScriptableEventEditor + : BaseScriptableEventEditor { protected override UnityEngine.Transform DrawArgField(UnityEngine.Transform value) { diff --git a/Assets/Editor/TransformGameEventEditor.cs.meta b/Assets/Editor/TransformScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/TransformGameEventEditor.cs.meta rename to Assets/Editor/TransformScriptableEventEditor.cs.meta diff --git a/Assets/Editor/Vector2GameEventEditor.cs b/Assets/Editor/Vector2GameEventEditor.cs deleted file mode 100644 index 6597ced..0000000 --- a/Assets/Editor/Vector2GameEventEditor.cs +++ /dev/null @@ -1,16 +0,0 @@ -using GameEvents.Vector2; -using UnityEditor; -using UnityEngine; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(Vector2GameEvent))] - public class Vector2GameEventEditor - : BaseGameEventEditor - { - protected override UnityEngine.Vector2 DrawArgField(UnityEngine.Vector2 value) - { - return EditorGUILayout.Vector2Field(GUIContent.none, value); - } - } -} diff --git a/Assets/Editor/Vector2ScriptableEventEditor.cs b/Assets/Editor/Vector2ScriptableEventEditor.cs new file mode 100644 index 0000000..e7e0b58 --- /dev/null +++ b/Assets/Editor/Vector2ScriptableEventEditor.cs @@ -0,0 +1,16 @@ +using ScriptableEvents.Vector2; +using UnityEditor; +using UnityEngine; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(Vector2ScriptableEvent))] + public class Vector2ScriptableEventEditor + : BaseScriptableEventEditor + { + protected override UnityEngine.Vector2 DrawArgField(UnityEngine.Vector2 value) + { + return EditorGUILayout.Vector2Field(GUIContent.none, value); + } + } +} diff --git a/Assets/Editor/Vector2GameEventEditor.cs.meta b/Assets/Editor/Vector2ScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/Vector2GameEventEditor.cs.meta rename to Assets/Editor/Vector2ScriptableEventEditor.cs.meta diff --git a/Assets/Editor/Vector3GameEventEditor.cs b/Assets/Editor/Vector3GameEventEditor.cs deleted file mode 100644 index d070c1d..0000000 --- a/Assets/Editor/Vector3GameEventEditor.cs +++ /dev/null @@ -1,16 +0,0 @@ -using GameEvents.Vector3; -using UnityEditor; -using UnityEngine; - -namespace GameEvents.Editor -{ - [CustomEditor(typeof(Vector3GameEvent))] - public class Vector3GameEventEditor - : BaseGameEventEditor - { - protected override UnityEngine.Vector3 DrawArgField(UnityEngine.Vector3 value) - { - return EditorGUILayout.Vector3Field(GUIContent.none, value); - } - } -} diff --git a/Assets/Editor/Vector3ScriptableEventEditor.cs b/Assets/Editor/Vector3ScriptableEventEditor.cs new file mode 100644 index 0000000..010db7c --- /dev/null +++ b/Assets/Editor/Vector3ScriptableEventEditor.cs @@ -0,0 +1,16 @@ +using ScriptableEvents.Vector3; +using UnityEditor; +using UnityEngine; + +namespace ScriptableEvents.Editor +{ + [CustomEditor(typeof(Vector3ScriptableEvent))] + public class Vector3ScriptableEventEditor + : BaseScriptableEventEditor + { + protected override UnityEngine.Vector3 DrawArgField(UnityEngine.Vector3 value) + { + return EditorGUILayout.Vector3Field(GUIContent.none, value); + } + } +} diff --git a/Assets/Editor/Vector3GameEventEditor.cs.meta b/Assets/Editor/Vector3ScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/Vector3GameEventEditor.cs.meta rename to Assets/Editor/Vector3ScriptableEventEditor.cs.meta diff --git a/Assets/LICENSE.md b/Assets/LICENSE.md deleted file mode 100644 index 17c3331..0000000 --- a/Assets/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 CHARK - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Assets/LICENSE.md.meta b/Assets/LICENSE.md.meta deleted file mode 100644 index f91af22..0000000 --- a/Assets/LICENSE.md.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 08f66b2194ffc0d46a0aeb2126cf9591 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Runtime/BaseGameEvent.cs b/Assets/Runtime/BaseScriptableEvent.cs similarity index 64% rename from Assets/Runtime/BaseGameEvent.cs rename to Assets/Runtime/BaseScriptableEvent.cs index b3f16c9..136cc87 100644 --- a/Assets/Runtime/BaseGameEvent.cs +++ b/Assets/Runtime/BaseScriptableEvent.cs @@ -3,23 +3,22 @@ using System.Collections.ObjectModel; using UnityEngine; -namespace GameEvents +namespace ScriptableEvents { - public abstract class BaseGameEvent : ScriptableObject, IGameEvent + public abstract class BaseScriptableEvent : ScriptableObject, IScriptableEvent { #region Editor [SerializeField] - [Tooltip("Description of the game event")] private string description; [SerializeField] - [Tooltip("Should exceptions be suppressed and continue the listener chain")] + private bool lockDescription = true; + + [SerializeField] private bool suppressExceptions; - // todo: show yellow warning [SerializeField] - [Tooltip("Should debug messages be logged for this game event")] private bool trace; #endregion @@ -28,16 +27,16 @@ public abstract class BaseGameEvent : ScriptableObject, IGameEvent // ReadOnlyCollection is used here so it wouldn't get modified via Listeners without having // to use Add or Remove. - private readonly ReadOnlyCollection> readOnlyListeners; + private readonly ReadOnlyCollection> readOnlyListeners; - private readonly List> listeners - = new List>(); + private readonly List> listeners + = new List>(); #endregion #region Properties - public ICollection> Listeners => readOnlyListeners; + public ICollection> Listeners => readOnlyListeners; #endregion @@ -52,9 +51,9 @@ private void OnDisable() #region Methods - protected BaseGameEvent() + protected BaseScriptableEvent() { - readOnlyListeners = new ReadOnlyCollection>(listeners); + readOnlyListeners = new ReadOnlyCollection>(listeners); } public void Raise(TArg arg) @@ -79,7 +78,7 @@ public void Raise(TArg arg) } } - public void Add(IGameEventListener listener) + public void Add(IScriptableEventListener listener) { if (listeners.Contains(listener)) { @@ -89,17 +88,17 @@ public void Add(IGameEventListener listener) listeners.Add(listener); } - public void Remove(IGameEventListener listener) + public void Remove(IScriptableEventListener listener) { listeners.Remove(listener); } - private void Trace(IGameEventListener listener, TArg arg) + private void Trace(IScriptableEventListener listener, TArg arg) { Debug.Log($"Raise event: {name}, listener: {listener}, arg: {arg}", this); } - private void OnRaiseSuppressed(IGameEventListener listener, TArg arg) + private void OnRaiseSuppressed(IScriptableEventListener listener, TArg arg) { try { @@ -116,7 +115,7 @@ private void OnRaiseSuppressed(IGameEventListener listener, TArg arg) } } - private static void OnRaise(IGameEventListener listener, TArg arg) + private static void OnRaise(IScriptableEventListener listener, TArg arg) { listener.OnRaised(arg); } diff --git a/Assets/Runtime/BaseGameEvent.cs.meta b/Assets/Runtime/BaseScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/BaseGameEvent.cs.meta rename to Assets/Runtime/BaseScriptableEvent.cs.meta diff --git a/Assets/Runtime/BaseGameEventListener.cs b/Assets/Runtime/BaseScriptableEventListener.cs similarity index 58% rename from Assets/Runtime/BaseGameEventListener.cs rename to Assets/Runtime/BaseScriptableEventListener.cs index 3991bb5..2ab5f8d 100644 --- a/Assets/Runtime/BaseGameEventListener.cs +++ b/Assets/Runtime/BaseScriptableEventListener.cs @@ -1,17 +1,17 @@ using UnityEngine; using UnityEngine.Events; -namespace GameEvents +namespace ScriptableEvents { - public class BaseGameEventListener - : MonoBehaviour, IGameEventListener - where TGameEvent : BaseGameEvent + public class BaseScriptableEventListener + : MonoBehaviour, IScriptableEventListener + where TScriptableEvent : BaseScriptableEvent where TUnityEvent : UnityEvent { #region Editor [SerializeField] - private TGameEvent gameEvent; + private TScriptableEvent scriptableEvent; [Space] [SerializeField] @@ -23,24 +23,24 @@ public class BaseGameEventListener private void OnEnable() { - if (gameEvent == null) + if (scriptableEvent == null) { - Debug.LogError($"{typeof(TGameEvent).Name} is not assigned", this); + Debug.LogError($"{typeof(TScriptableEvent).Name} is not assigned", this); return; } - gameEvent.Add(this); + scriptableEvent.Add(this); } private void OnDisable() { - if (gameEvent == null) + if (scriptableEvent == null) { // Can exit without logging as OnEnable should give enough info. return; } - gameEvent.Remove(this); + scriptableEvent.Remove(this); } #endregion diff --git a/Assets/Runtime/BaseGameEventListener.cs.meta b/Assets/Runtime/BaseScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/BaseGameEventListener.cs.meta rename to Assets/Runtime/BaseScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Bool/BoolGameEvent.cs b/Assets/Runtime/Bool/BoolGameEvent.cs deleted file mode 100644 index 40f521f..0000000 --- a/Assets/Runtime/Bool/BoolGameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Bool -{ - [CreateAssetMenu(fileName = "BoolGameEvent", menuName = "Game Events/Bool Game Event")] - public class BoolGameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/Bool/BoolGameEventListener.cs b/Assets/Runtime/Bool/BoolGameEventListener.cs deleted file mode 100644 index f061725..0000000 --- a/Assets/Runtime/Bool/BoolGameEventListener.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Bool -{ - [AddComponentMenu("Game Events/Bool Game Event Listener")] - public class BoolGameEventListener : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Bool/BoolScriptableEvent.cs b/Assets/Runtime/Bool/BoolScriptableEvent.cs new file mode 100644 index 0000000..be84257 --- /dev/null +++ b/Assets/Runtime/Bool/BoolScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.Bool +{ + [CreateAssetMenu( + fileName = "BoolScriptableEvent", + menuName = "Scriptable Events/Bool Scriptable Event" + )] + public class BoolScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/Bool/BoolGameEvent.cs.meta b/Assets/Runtime/Bool/BoolScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Bool/BoolGameEvent.cs.meta rename to Assets/Runtime/Bool/BoolScriptableEvent.cs.meta diff --git a/Assets/Runtime/Bool/BoolScriptableEventListener.cs b/Assets/Runtime/Bool/BoolScriptableEventListener.cs new file mode 100644 index 0000000..5d02e66 --- /dev/null +++ b/Assets/Runtime/Bool/BoolScriptableEventListener.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace ScriptableEvents.Bool +{ + [AddComponentMenu("Scriptable Events/Bool Scriptable Event Listener")] + public class BoolScriptableEventListener + : BaseScriptableEventListener + { + } +} diff --git a/Assets/Runtime/Bool/BoolGameEventListener.cs.meta b/Assets/Runtime/Bool/BoolScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Bool/BoolGameEventListener.cs.meta rename to Assets/Runtime/Bool/BoolScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Bool/BoolUnityEvent.cs b/Assets/Runtime/Bool/BoolUnityEvent.cs index 676fbe6..0e391aa 100644 --- a/Assets/Runtime/Bool/BoolUnityEvent.cs +++ b/Assets/Runtime/Bool/BoolUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Bool +namespace ScriptableEvents.Bool { [Serializable] public class BoolUnityEvent : UnityEvent diff --git a/Assets/Runtime/Chark.GameEvents.asmdef b/Assets/Runtime/Chark.ScriptableEvents.asmdef similarity index 88% rename from Assets/Runtime/Chark.GameEvents.asmdef rename to Assets/Runtime/Chark.ScriptableEvents.asmdef index cdc21dc..66294d1 100644 --- a/Assets/Runtime/Chark.GameEvents.asmdef +++ b/Assets/Runtime/Chark.ScriptableEvents.asmdef @@ -1,5 +1,5 @@ { - "name": "Chark.GameEvents", + "name": "Chark.ScriptableEvents", "references": [], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Runtime/Chark.GameEvents.asmdef.meta b/Assets/Runtime/Chark.ScriptableEvents.asmdef.meta similarity index 100% rename from Assets/Runtime/Chark.GameEvents.asmdef.meta rename to Assets/Runtime/Chark.ScriptableEvents.asmdef.meta diff --git a/Assets/Runtime/Float/FloatGameEvent.cs b/Assets/Runtime/Float/FloatGameEvent.cs deleted file mode 100644 index 863c2fd..0000000 --- a/Assets/Runtime/Float/FloatGameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Float -{ - [CreateAssetMenu(fileName = "FloatGameEvent", menuName = "Game Events/Float Game Event")] - public class FloatGameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/Float/FloatGameEventListener.cs b/Assets/Runtime/Float/FloatGameEventListener.cs deleted file mode 100644 index 5f269f8..0000000 --- a/Assets/Runtime/Float/FloatGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Float -{ - [AddComponentMenu("Game Events/Float Game Event Listener")] - public class - FloatGameEventListener : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Float/FloatScriptableEvent.cs b/Assets/Runtime/Float/FloatScriptableEvent.cs new file mode 100644 index 0000000..992956c --- /dev/null +++ b/Assets/Runtime/Float/FloatScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.Float +{ + [CreateAssetMenu( + fileName = "FloatScriptableEvent", + menuName = "Scriptable Events/Float Scriptable Event" + )] + public class FloatScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/Float/FloatGameEvent.cs.meta b/Assets/Runtime/Float/FloatScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Float/FloatGameEvent.cs.meta rename to Assets/Runtime/Float/FloatScriptableEvent.cs.meta diff --git a/Assets/Runtime/Float/FloatScriptableEventListener.cs b/Assets/Runtime/Float/FloatScriptableEventListener.cs new file mode 100644 index 0000000..05d8b74 --- /dev/null +++ b/Assets/Runtime/Float/FloatScriptableEventListener.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace ScriptableEvents.Float +{ + [AddComponentMenu("Scriptable Events/Float Scriptable Event Listener")] + public class FloatScriptableEventListener + : BaseScriptableEventListener + { + } +} diff --git a/Assets/Runtime/Float/FloatGameEventListener.cs.meta b/Assets/Runtime/Float/FloatScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Float/FloatGameEventListener.cs.meta rename to Assets/Runtime/Float/FloatScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Float/FloatUnityEvent.cs b/Assets/Runtime/Float/FloatUnityEvent.cs index 6cdc9cc..ef2bd33 100644 --- a/Assets/Runtime/Float/FloatUnityEvent.cs +++ b/Assets/Runtime/Float/FloatUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Float +namespace ScriptableEvents.Float { [Serializable] public class FloatUnityEvent : UnityEvent diff --git a/Assets/Runtime/GameObject/GameObjectGameEvent.cs b/Assets/Runtime/GameObject/GameObjectGameEvent.cs deleted file mode 100644 index 43db958..0000000 --- a/Assets/Runtime/GameObject/GameObjectGameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.GameObject -{ - [CreateAssetMenu(fileName = "GameObjectEvent", menuName = "Game Events/Game Object Event")] - public class GameObjectGameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/GameObject/GameObjectGameEventListener.cs b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs index aa7b932..f54e175 100644 --- a/Assets/Runtime/GameObject/GameObjectGameEventListener.cs +++ b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs @@ -1,10 +1,14 @@ using UnityEngine; -namespace GameEvents.GameObject +namespace ScriptableEvents.GameObject { - [AddComponentMenu("Game Events/Game Object Game Event Listener")] - public class GameObjectGameEventListener - : BaseGameEventListener + [AddComponentMenu("Scriptable Events/Game Object Scriptable Event Listener")] + public class GameObjectScriptableEventListener + : BaseScriptableEventListener< + GameObjectScriptableEvent, + GameObjectUnityEvent, + UnityEngine.GameObject + > { } } diff --git a/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs b/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs new file mode 100644 index 0000000..50e7e44 --- /dev/null +++ b/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.GameObject +{ + [CreateAssetMenu( + fileName = "GameObjectScriptableEvent", + menuName = "Scriptable Events/Game Object Scriptable Event" + )] + public class GameObjectScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/GameObject/GameObjectGameEvent.cs.meta b/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameObject/GameObjectGameEvent.cs.meta rename to Assets/Runtime/GameObject/GameObjectScriptableEvent.cs.meta diff --git a/Assets/Runtime/GameObject/GameObjectUnityEvent.cs b/Assets/Runtime/GameObject/GameObjectUnityEvent.cs index 20b21e9..c73d002 100644 --- a/Assets/Runtime/GameObject/GameObjectUnityEvent.cs +++ b/Assets/Runtime/GameObject/GameObjectUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.GameObject +namespace ScriptableEvents.GameObject { [Serializable] public class GameObjectUnityEvent : UnityEvent diff --git a/Assets/Runtime/IGameEvent.cs b/Assets/Runtime/IGameEvent.cs deleted file mode 100644 index 4b6ed67..0000000 --- a/Assets/Runtime/IGameEvent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; - -namespace GameEvents -{ - public interface IGameEvent - { - /// - /// Registered listeners. - /// - ICollection> Listeners { get; } - - /// - /// Raise this game event with an argument. - /// - void Raise(TArg arg); - - /// - /// Add a listener to this game event. - /// - void Add(IGameEventListener listener); - - /// - /// Remove a listener from this game event. - /// - void Remove(IGameEventListener listener); - } -} diff --git a/Assets/Runtime/IGameEventListener.cs b/Assets/Runtime/IGameEventListener.cs deleted file mode 100644 index e053e38..0000000 --- a/Assets/Runtime/IGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace GameEvents -{ - public interface IGameEventListener - { - /// - /// Handle raised game event by accepting its argument. - /// - void OnRaised(TArg arg); - } -} diff --git a/Assets/Runtime/IScriptableEvent.cs b/Assets/Runtime/IScriptableEvent.cs new file mode 100644 index 0000000..78906e4 --- /dev/null +++ b/Assets/Runtime/IScriptableEvent.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace ScriptableEvents +{ + public interface IScriptableEvent + { + /// + /// Registered listeners. + /// + ICollection> Listeners { get; } + + /// + /// Raise this event with an argument. + /// + void Raise(TArg arg); + + /// + /// Add a listener to this event. + /// + void Add(IScriptableEventListener listener); + + /// + /// Remove a listener from this event. + /// + void Remove(IScriptableEventListener listener); + } +} diff --git a/Assets/Runtime/IGameEvent.cs.meta b/Assets/Runtime/IScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/IGameEvent.cs.meta rename to Assets/Runtime/IScriptableEvent.cs.meta diff --git a/Assets/Runtime/IScriptableEventListener.cs b/Assets/Runtime/IScriptableEventListener.cs new file mode 100644 index 0000000..9000cf4 --- /dev/null +++ b/Assets/Runtime/IScriptableEventListener.cs @@ -0,0 +1,10 @@ +namespace ScriptableEvents +{ + public interface IScriptableEventListener + { + /// + /// Handle raised event by accepting its argument. + /// + void OnRaised(TArg arg); + } +} diff --git a/Assets/Runtime/IGameEventListener.cs.meta b/Assets/Runtime/IScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/IGameEventListener.cs.meta rename to Assets/Runtime/IScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Int/IntGameEvent.cs b/Assets/Runtime/Int/IntGameEvent.cs deleted file mode 100644 index 3804b1e..0000000 --- a/Assets/Runtime/Int/IntGameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Int -{ - [CreateAssetMenu(fileName = "IntGameEvent", menuName = "Game Events/Int Game Event")] - public class IntGameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/Int/IntGameEventListener.cs b/Assets/Runtime/Int/IntGameEventListener.cs deleted file mode 100644 index f2a443c..0000000 --- a/Assets/Runtime/Int/IntGameEventListener.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Int -{ - [AddComponentMenu("Game Events/Int Game Event Listener")] - public class IntGameEventListener : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Int/IntScriptableEvent.cs b/Assets/Runtime/Int/IntScriptableEvent.cs new file mode 100644 index 0000000..5520b66 --- /dev/null +++ b/Assets/Runtime/Int/IntScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.Int +{ + [CreateAssetMenu( + fileName = "IntScriptableEvent", + menuName = "Scriptable Events/Int Scriptable Event" + )] + public class IntScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/Int/IntGameEvent.cs.meta b/Assets/Runtime/Int/IntScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Int/IntGameEvent.cs.meta rename to Assets/Runtime/Int/IntScriptableEvent.cs.meta diff --git a/Assets/Runtime/Int/IntScriptableEventListener.cs b/Assets/Runtime/Int/IntScriptableEventListener.cs new file mode 100644 index 0000000..a71b8ae --- /dev/null +++ b/Assets/Runtime/Int/IntScriptableEventListener.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace ScriptableEvents.Int +{ + [AddComponentMenu("Scriptable Events/Int Scriptable Event Listener")] + public class IntScriptableEventListener + : BaseScriptableEventListener + { + } +} diff --git a/Assets/Runtime/Int/IntGameEventListener.cs.meta b/Assets/Runtime/Int/IntScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Int/IntGameEventListener.cs.meta rename to Assets/Runtime/Int/IntScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Int/IntUnityEvent.cs b/Assets/Runtime/Int/IntUnityEvent.cs index 3b4e1c9..936af16 100644 --- a/Assets/Runtime/Int/IntUnityEvent.cs +++ b/Assets/Runtime/Int/IntUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Int +namespace ScriptableEvents.Int { [Serializable] public class IntUnityEvent : UnityEvent diff --git a/Assets/Runtime/Simple/SimpleArg.cs b/Assets/Runtime/Simple/SimpleArg.cs index 493ee96..d57d6a8 100644 --- a/Assets/Runtime/Simple/SimpleArg.cs +++ b/Assets/Runtime/Simple/SimpleArg.cs @@ -1,4 +1,4 @@ -namespace GameEvents.Simple +namespace ScriptableEvents.Simple { public class SimpleArg { diff --git a/Assets/Runtime/Simple/SimpleGameEvent.cs b/Assets/Runtime/Simple/SimpleGameEvent.cs deleted file mode 100644 index 275e4e6..0000000 --- a/Assets/Runtime/Simple/SimpleGameEvent.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Simple -{ - [CreateAssetMenu(fileName = "SimpleGameEvent", menuName = "Game Events/Simple Game Event")] - public class SimpleGameEvent : BaseGameEvent - { - /// - /// Raise this game event without an argument. - /// - public void Raise() - { - Raise(SimpleArg.Instance); - } - } -} diff --git a/Assets/Runtime/Simple/SimpleGameEventListener.cs b/Assets/Runtime/Simple/SimpleGameEventListener.cs deleted file mode 100644 index 98c343f..0000000 --- a/Assets/Runtime/Simple/SimpleGameEventListener.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace GameEvents.Simple -{ - public class SimpleGameEventListener - : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Simple/SimpleScriptableEvent.cs b/Assets/Runtime/Simple/SimpleScriptableEvent.cs new file mode 100644 index 0000000..6785af5 --- /dev/null +++ b/Assets/Runtime/Simple/SimpleScriptableEvent.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace ScriptableEvents.Simple +{ + [CreateAssetMenu( + fileName = "SimpleScriptableEvent", + menuName = "Scriptable Events/Simple Scriptable Event" + )] + public class SimpleScriptableEvent : BaseScriptableEvent + { + /// + /// Raise this event without an argument. + /// + public void Raise() + { + Raise(SimpleArg.Instance); + } + } +} diff --git a/Assets/Runtime/Simple/SimpleGameEvent.cs.meta b/Assets/Runtime/Simple/SimpleScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Simple/SimpleGameEvent.cs.meta rename to Assets/Runtime/Simple/SimpleScriptableEvent.cs.meta diff --git a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs new file mode 100644 index 0000000..30b6c1f --- /dev/null +++ b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs @@ -0,0 +1,7 @@ +namespace ScriptableEvents.Simple +{ + public class SimpleScriptableEventListener + : BaseScriptableEventListener + { + } +} diff --git a/Assets/Runtime/Simple/SimpleGameEventListener.cs.meta b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Simple/SimpleGameEventListener.cs.meta rename to Assets/Runtime/Simple/SimpleScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Simple/SimpleUnityEvent.cs b/Assets/Runtime/Simple/SimpleUnityEvent.cs index 845d771..f3f7fb9 100644 --- a/Assets/Runtime/Simple/SimpleUnityEvent.cs +++ b/Assets/Runtime/Simple/SimpleUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Simple +namespace ScriptableEvents.Simple { [Serializable] public class SimpleUnityEvent : UnityEvent diff --git a/Assets/Runtime/String/StringGameEvent.cs b/Assets/Runtime/String/StringGameEvent.cs deleted file mode 100644 index 2bfce95..0000000 --- a/Assets/Runtime/String/StringGameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.String -{ - [CreateAssetMenu(fileName = "StringGameEvent", menuName = "Game Events/String Game Event")] - public class StringGameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/String/StringGameEventListener.cs b/Assets/Runtime/String/StringGameEventListener.cs deleted file mode 100644 index 7724b65..0000000 --- a/Assets/Runtime/String/StringGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -namespace GameEvents.String -{ - [AddComponentMenu("Game Events/String Game Event Listener")] - public class StringGameEventListener - : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/String/StringScriptableEvent.cs b/Assets/Runtime/String/StringScriptableEvent.cs new file mode 100644 index 0000000..55e76c1 --- /dev/null +++ b/Assets/Runtime/String/StringScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.String +{ + [CreateAssetMenu( + fileName = "StringScriptableEvent", + menuName = "Scriptable Events/String Scriptable Event" + )] + public class StringScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/String/StringGameEvent.cs.meta b/Assets/Runtime/String/StringScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/String/StringGameEvent.cs.meta rename to Assets/Runtime/String/StringScriptableEvent.cs.meta diff --git a/Assets/Runtime/String/StringScriptableEventListener.cs b/Assets/Runtime/String/StringScriptableEventListener.cs new file mode 100644 index 0000000..28de667 --- /dev/null +++ b/Assets/Runtime/String/StringScriptableEventListener.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace ScriptableEvents.String +{ + [AddComponentMenu("Scriptable Events/String Scriptable Event Listener")] + public class StringScriptableEventListener + : BaseScriptableEventListener + { + } +} diff --git a/Assets/Runtime/String/StringGameEventListener.cs.meta b/Assets/Runtime/String/StringScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/String/StringGameEventListener.cs.meta rename to Assets/Runtime/String/StringScriptableEventListener.cs.meta diff --git a/Assets/Runtime/String/StringUnityEvent.cs b/Assets/Runtime/String/StringUnityEvent.cs index 238192a..90ada13 100644 --- a/Assets/Runtime/String/StringUnityEvent.cs +++ b/Assets/Runtime/String/StringUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.String +namespace ScriptableEvents.String { [Serializable] public class StringUnityEvent : UnityEvent diff --git a/Assets/Runtime/Transform/TransformGameEvent.cs b/Assets/Runtime/Transform/TransformGameEvent.cs deleted file mode 100644 index b5cddac..0000000 --- a/Assets/Runtime/Transform/TransformGameEvent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Transform -{ - [CreateAssetMenu( - fileName = "TransformGameEvent", - menuName = "Game Events/Transform Game Event" - )] - public class TransformGameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/Transform/TransformGameEventListener.cs b/Assets/Runtime/Transform/TransformGameEventListener.cs deleted file mode 100644 index 1d81d1e..0000000 --- a/Assets/Runtime/Transform/TransformGameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Transform -{ - [AddComponentMenu("Game Events/Transform Game Event Listener")] - public class TransformGameEventListener - : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Transform/TransformScriptableEvent.cs b/Assets/Runtime/Transform/TransformScriptableEvent.cs new file mode 100644 index 0000000..9374eda --- /dev/null +++ b/Assets/Runtime/Transform/TransformScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.Transform +{ + [CreateAssetMenu( + fileName = "TransformScriptableEvent", + menuName = "Scriptable Events/Transform Scriptable Event" + )] + public class TransformScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/Transform/TransformGameEvent.cs.meta b/Assets/Runtime/Transform/TransformScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Transform/TransformGameEvent.cs.meta rename to Assets/Runtime/Transform/TransformScriptableEvent.cs.meta diff --git a/Assets/Runtime/Transform/TransformScriptableEventListener.cs b/Assets/Runtime/Transform/TransformScriptableEventListener.cs new file mode 100644 index 0000000..a41b29d --- /dev/null +++ b/Assets/Runtime/Transform/TransformScriptableEventListener.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace ScriptableEvents.Transform +{ + [AddComponentMenu("Scriptable Events/Transform Scriptable Event Listener")] + public class TransformScriptableEventListener + : BaseScriptableEventListener< + TransformScriptableEvent, + TransformUnityEvent, + UnityEngine.Transform + > + { + } +} diff --git a/Assets/Runtime/Transform/TransformGameEventListener.cs.meta b/Assets/Runtime/Transform/TransformScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Transform/TransformGameEventListener.cs.meta rename to Assets/Runtime/Transform/TransformScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Transform/TransformUnityEvent.cs b/Assets/Runtime/Transform/TransformUnityEvent.cs index 2c70b4f..faf3f45 100644 --- a/Assets/Runtime/Transform/TransformUnityEvent.cs +++ b/Assets/Runtime/Transform/TransformUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Transform +namespace ScriptableEvents.Transform { [Serializable] public class TransformUnityEvent : UnityEvent diff --git a/Assets/Runtime/Vector2/Vector2GameEvent.cs b/Assets/Runtime/Vector2/Vector2GameEvent.cs deleted file mode 100644 index a3f9bab..0000000 --- a/Assets/Runtime/Vector2/Vector2GameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Vector2 -{ - [CreateAssetMenu(fileName = "Vector2GameEvent", menuName = "Game Events/Vector2 Game Event")] - public class Vector2GameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/Vector2/Vector2GameEventListener.cs b/Assets/Runtime/Vector2/Vector2GameEventListener.cs deleted file mode 100644 index 66ee57d..0000000 --- a/Assets/Runtime/Vector2/Vector2GameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Vector2 -{ - [AddComponentMenu("Game Events/Vector2 Game Event Listener")] - public class Vector2GameEventListener - : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs b/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs new file mode 100644 index 0000000..ca1223d --- /dev/null +++ b/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.Vector2 +{ + [CreateAssetMenu( + fileName = "Vector2ScriptableEvent", + menuName = "Scriptable Events/Vector2 Scriptable Event" + )] + public class Vector2ScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/Vector2/Vector2GameEvent.cs.meta b/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector2/Vector2GameEvent.cs.meta rename to Assets/Runtime/Vector2/Vector2ScriptableEvent.cs.meta diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs b/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs new file mode 100644 index 0000000..c13127e --- /dev/null +++ b/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace ScriptableEvents.Vector2 +{ + [AddComponentMenu("Scriptable Events/Vector2 Scriptable Event Listener")] + public class Vector2ScriptableEventListener + : BaseScriptableEventListener< + Vector2ScriptableEvent, + Vector2UnityEvent, + UnityEngine.Vector2 + > + { + } +} diff --git a/Assets/Runtime/Vector2/Vector2GameEventListener.cs.meta b/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Vector2/Vector2GameEventListener.cs.meta rename to Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Vector2/Vector2UnityEvent.cs b/Assets/Runtime/Vector2/Vector2UnityEvent.cs index 7d05881..ede3767 100644 --- a/Assets/Runtime/Vector2/Vector2UnityEvent.cs +++ b/Assets/Runtime/Vector2/Vector2UnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Vector2 +namespace ScriptableEvents.Vector2 { [Serializable] public class Vector2UnityEvent : UnityEvent diff --git a/Assets/Runtime/Vector3/Vector3GameEvent.cs b/Assets/Runtime/Vector3/Vector3GameEvent.cs deleted file mode 100644 index c50493d..0000000 --- a/Assets/Runtime/Vector3/Vector3GameEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Vector3 -{ - [CreateAssetMenu(fileName = "Vector3GameEvent", menuName = "Game Events/Vector3 Game Event")] - public class Vector3GameEvent : BaseGameEvent - { - } -} diff --git a/Assets/Runtime/Vector3/Vector3GameEventListener.cs b/Assets/Runtime/Vector3/Vector3GameEventListener.cs deleted file mode 100644 index 079cf94..0000000 --- a/Assets/Runtime/Vector3/Vector3GameEventListener.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -namespace GameEvents.Vector3 -{ - [AddComponentMenu("Game Events/Vector3 Game Event Listener")] - public class Vector3GameEventListener - : BaseGameEventListener - { - } -} diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs b/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs new file mode 100644 index 0000000..4892b5f --- /dev/null +++ b/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.Vector3 +{ + [CreateAssetMenu( + fileName = "Vector3ScriptableEvent", + menuName = "Scriptable Events/Vector3 Scriptable Event" + )] + public class Vector3ScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Runtime/Vector3/Vector3GameEvent.cs.meta b/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector3/Vector3GameEvent.cs.meta rename to Assets/Runtime/Vector3/Vector3ScriptableEvent.cs.meta diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs new file mode 100644 index 0000000..e5f47e7 --- /dev/null +++ b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace ScriptableEvents.Vector3 +{ + [AddComponentMenu("Scriptable Events/Vector3 Scriptable Event Listener")] + public class Vector3ScriptableEventListener + : BaseScriptableEventListener< + Vector3ScriptableEvent, + VectorUnity3Event, + UnityEngine.Vector3 + > + { + } +} diff --git a/Assets/Runtime/Vector3/Vector3GameEventListener.cs.meta b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Vector3/Vector3GameEventListener.cs.meta rename to Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Vector3/VectorUnity3Event.cs b/Assets/Runtime/Vector3/VectorUnity3Event.cs index 225a575..fa8e040 100644 --- a/Assets/Runtime/Vector3/VectorUnity3Event.cs +++ b/Assets/Runtime/Vector3/VectorUnity3Event.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace GameEvents.Vector3 +namespace ScriptableEvents.Vector3 { [Serializable] public class VectorUnity3Event : UnityEvent diff --git a/Assets/Samples/Chark.GameEvents.Samples.asmdef b/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef similarity index 71% rename from Assets/Samples/Chark.GameEvents.Samples.asmdef rename to Assets/Samples/Chark.ScriptableEvents.Samples.asmdef index 6110722..e1009b0 100644 --- a/Assets/Samples/Chark.GameEvents.Samples.asmdef +++ b/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef @@ -1,8 +1,8 @@ { - "name": "Chark.GameEvents.Samples", + "name": "Chark.ScriptableEvents.Samples", "references": [ - "Chark.GameEvents", - "Chark.GameEvents.Editor" + "Chark.ScriptableEvents", + "Chark.ScriptableEvents.Editor" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Samples/Chark.GameEvents.Samples.asmdef.meta b/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef.meta similarity index 100% rename from Assets/Samples/Chark.GameEvents.Samples.asmdef.meta rename to Assets/Samples/Chark.ScriptableEvents.Samples.asmdef.meta diff --git a/Assets/Samples/Scripts/FloatFadeOutText.cs b/Assets/Samples/Scripts/FloatFadeOutText.cs index c37a935..04d8269 100644 --- a/Assets/Samples/Scripts/FloatFadeOutText.cs +++ b/Assets/Samples/Scripts/FloatFadeOutText.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace GameEvents.Smaples +namespace ScriptableEvents.Smaples { [RequireComponent(typeof(Text))] public class FloatFadeOutText : MonoBehaviour diff --git a/Assets/Samples/Scripts/Score.cs b/Assets/Samples/Scripts/Score.cs index a99b935..50b2113 100644 --- a/Assets/Samples/Scripts/Score.cs +++ b/Assets/Samples/Scripts/Score.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace GameEvents.Smaples +namespace ScriptableEvents.Smaples { [RequireComponent(typeof(Text))] public class Score : MonoBehaviour diff --git a/Assets/Samples/Scripts/Shooter.cs b/Assets/Samples/Scripts/Shooter.cs index 58a6c28..f52bc06 100644 --- a/Assets/Samples/Scripts/Shooter.cs +++ b/Assets/Samples/Scripts/Shooter.cs @@ -1,13 +1,13 @@ -using GameEvents.Transform; +using ScriptableEvents.Transform; using UnityEngine; -namespace GameEvents.Samples +namespace ScriptableEvents.Samples { [RequireComponent(typeof(Camera))] public class Shooter : MonoBehaviour { [SerializeField] - private TransformGameEvent shotGameEvent = default; + private TransformScriptableEvent shotScriptableEvent = default; [SerializeField] private string shootButton = "Fire1"; @@ -38,7 +38,7 @@ private void Shoot() if (Physics.Raycast(ray, out var hit)) { - shotGameEvent.Raise(hit.transform); + shotScriptableEvent.Raise(hit.transform); } } } diff --git a/Assets/Samples/Scripts/ShotHandler.cs b/Assets/Samples/Scripts/ShotHandler.cs index 9c279bc..b2a9809 100644 --- a/Assets/Samples/Scripts/ShotHandler.cs +++ b/Assets/Samples/Scripts/ShotHandler.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.Events; -namespace GameEvents.Samples +namespace ScriptableEvents.Samples { public class ShotHandler : MonoBehaviour { diff --git a/Assets/Samples/Scripts/Spawner.cs b/Assets/Samples/Scripts/Spawner.cs index a35adde..f04b0b7 100644 --- a/Assets/Samples/Scripts/Spawner.cs +++ b/Assets/Samples/Scripts/Spawner.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace GameEvents.Samples +namespace ScriptableEvents.Samples { [RequireComponent(typeof(BoxCollider))] public class Spawner : MonoBehaviour diff --git a/Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef similarity index 83% rename from Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef rename to Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef index 32563aa..8263d27 100644 --- a/Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef +++ b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef @@ -1,8 +1,8 @@ { - "name": "Chark.GameEvents.Tests", + "name": "Chark.ScriptableEvents.Tests", "references": [ "UnityEngine.TestRunner", - "Chark.GameEvents" + "Chark.ScriptableEvents" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef.meta b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta similarity index 100% rename from Assets/Tests/Runtime/Chark.GameEvents.Tests.asmdef.meta rename to Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta diff --git a/Assets/Tests/Runtime/GameEventTest.cs b/Assets/Tests/Runtime/GameEventTest.cs index 19a84a5..e0ea086 100644 --- a/Assets/Tests/Runtime/GameEventTest.cs +++ b/Assets/Tests/Runtime/GameEventTest.cs @@ -1,118 +1,118 @@ using System.Linq; -using GameEvents.Bool; -using GameEvents.Float; -using GameEvents.GameObject; -using GameEvents.Int; -using GameEvents.Simple; -using GameEvents.String; -using GameEvents.Transform; -using GameEvents.Vector2; -using GameEvents.Vector3; +using ScriptableEvents.Bool; +using ScriptableEvents.Float; +using ScriptableEvents.GameObject; +using ScriptableEvents.Int; +using ScriptableEvents.Simple; +using ScriptableEvents.String; +using ScriptableEvents.Transform; +using ScriptableEvents.Vector2; +using ScriptableEvents.Vector3; using NUnit.Framework; using UnityEngine; using Assert = UnityEngine.Assertions.Assert; // todo: look over tests, use parametrized -namespace GameEvents.Tests +namespace ScriptableEvents.Tests { - public class GameEventTest + public class ScriptableEventTest { [Test] - public void ShouldRaiseBoolGameEvent() + public void ShouldRaiseBoolScriptableEvent() { - var tester = new GameEventTester< - BoolGameEventListener, - BoolGameEvent, + var tester = new ScriptableEventTester< + BoolScriptableEventListener, + BoolScriptableEvent, BoolUnityEvent, bool >(); tester.SetActive(true); - tester.RaiseGameEvent(true); + tester.RaiseScriptableEvent(true); Assert.AreEqual(true, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(true); + tester.RaiseScriptableEvent(true); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterBoolGameEventListener() + public void ShouldRegisterAndUnregisterBoolScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] - public void ShouldRaiseFloatGameEvent() + public void ShouldRaiseFloatScriptableEvent() { - var tester = new GameEventTester< - FloatGameEventListener, - FloatGameEvent, + var tester = new ScriptableEventTester< + FloatScriptableEventListener, + FloatScriptableEvent, FloatUnityEvent, float >(); tester.SetActive(true); - tester.RaiseGameEvent(10f); + tester.RaiseScriptableEvent(10f); Assert.AreEqual(10f, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(10f); + tester.RaiseScriptableEvent(10f); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterFloatGameEventListener() + public void ShouldRegisterAndUnregisterFloatScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } // [Test] - // public void ShouldRaiseGameEventEvent() + // public void ShouldRaiseScriptableEventEvent() // { // // Given. // var gameObject = new UnityEngine.GameObject(); // gameObject.SetActive(false); // - // var listener = gameObject.AddComponent(); + // var listener = gameObject.AddComponent(); // - // listener.OnGameEvent = new UnityEvent(); - // listener.GameEvent = ScriptableObject.CreateInstance(); + // listener.OnScriptableEvent = new UnityEvent(); + // listener.ScriptableEvent = ScriptableObject.CreateInstance(); // // var count = new int[1]; - // listener.OnGameEvent.AddListener(() => count[0]++); + // listener.OnScriptableEvent.AddListener(() => count[0]++); // // // Then. // gameObject.SetActive(true); - // listener.GameEvent.RaiseGameEvent(); + // listener.ScriptableEvent.RaiseScriptableEvent(); // // Assert.AreEqual(1, count[0]); // count[0] = 0; // // gameObject.SetActive(false); - // listener.GameEvent.RaiseGameEvent(); + // listener.ScriptableEvent.RaiseScriptableEvent(); // // Assert.AreEqual(0, count[0]); // } @@ -125,51 +125,51 @@ public void ShouldRegisterAndUnregisterFloatGameEventListener() // var gameObject = new UnityEngine.GameObject(); // gameObject.SetActive(false); // - // var listenerWithError = gameObject.AddComponent(); - // var listener = gameObject.AddComponent(); + // var listenerWithError = gameObject.AddComponent(); + // var listener = gameObject.AddComponent(); // - // listenerWithError.OnGameEvent = new UnityEvent(); - // listenerWithError.GameEvent = ScriptableObject.CreateInstance(); + // listenerWithError.OnScriptableEvent = new UnityEvent(); + // listenerWithError.ScriptableEvent = ScriptableObject.CreateInstance(); // - // listener.OnGameEvent = new UnityEvent(); - // listener.GameEvent = listenerWithError.GameEvent; + // listener.OnScriptableEvent = new UnityEvent(); + // listener.ScriptableEvent = listenerWithError.ScriptableEvent; // // var count = new int[1]; - // listenerWithError.OnGameEvent.AddListener(() => throw new NullReferenceException()); - // listener.OnGameEvent.AddListener(() => count[0]++); + // listenerWithError.OnScriptableEvent.AddListener(() => throw new NullReferenceException()); + // listener.OnScriptableEvent.AddListener(() => count[0]++); // // // Then. // gameObject.SetActive(true); - // listener.GameEvent.RaiseGameEvent(); + // listener.ScriptableEvent.RaiseScriptableEvent(); // // Assert.AreEqual(1, count[0]); // count[0] = 0; // // gameObject.SetActive(false); - // listener.GameEvent.RaiseGameEvent(); + // listener.ScriptableEvent.RaiseScriptableEvent(); // // Assert.AreEqual(0, count[0]); // } [Test] - public void ShouldRegisterAndUnregisterGameObjectGameEventListener() + public void ShouldRegisterAndUnregisterGameObjectScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] - public void ShouldRaiseGameObjectGameEventListener() + public void ShouldRaiseGameObjectScriptableEventListener() { - var tester = new GameEventTester< - GameObjectGameEventListener, - GameObjectGameEvent, + var tester = new ScriptableEventTester< + GameObjectScriptableEventListener, + GameObjectScriptableEvent, GameObjectUnityEvent, UnityEngine.GameObject >(); @@ -177,109 +177,109 @@ public void ShouldRaiseGameObjectGameEventListener() tester.SetActive(true); var gameObject = new UnityEngine.GameObject(); - tester.RaiseGameEvent(gameObject); + tester.RaiseScriptableEvent(gameObject); Assert.AreEqual(gameObject, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(gameObject); + tester.RaiseScriptableEvent(gameObject); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterGameEventListener() + public void ShouldRegisterAndUnregisterScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] - public void ShouldRaiseIntGameEventListener() + public void ShouldRaiseIntScriptableEventListener() { - var tester = new GameEventTester< - IntGameEventListener, - IntGameEvent, + var tester = new ScriptableEventTester< + IntScriptableEventListener, + IntScriptableEvent, IntUnityEvent, int >(); tester.SetActive(true); - tester.RaiseGameEvent(10); + tester.RaiseScriptableEvent(10); Assert.AreEqual(10, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(10); + tester.RaiseScriptableEvent(10); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterIntGameEventListener() + public void ShouldRegisterAndUnregisterIntScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] - public void ShouldRaiseStringGameEventListener() + public void ShouldRaiseStringScriptableEventListener() { - var tester = new GameEventTester< - StringGameEventListener, - StringGameEvent, + var tester = new ScriptableEventTester< + StringScriptableEventListener, + StringScriptableEvent, StringUnityEvent, string >(); tester.SetActive(true); - tester.RaiseGameEvent("foo"); + tester.RaiseScriptableEvent("foo"); Assert.AreEqual("foo", tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent("foo"); + tester.RaiseScriptableEvent("foo"); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterStringGameEventListener() + public void ShouldRegisterAndUnregisterStringScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] - public void ShouldRaiseTransformGameEventListener() + public void ShouldRaiseTransformScriptableEventListener() { - var tester = new GameEventTester< - TransformGameEventListener, - TransformGameEvent, + var tester = new ScriptableEventTester< + TransformScriptableEventListener, + TransformScriptableEvent, TransformUnityEvent, UnityEngine.Transform >(); @@ -287,117 +287,117 @@ public void ShouldRaiseTransformGameEventListener() tester.SetActive(true); var gameObject = new UnityEngine.GameObject(); - tester.RaiseGameEvent(gameObject.transform); + tester.RaiseScriptableEvent(gameObject.transform); Assert.AreEqual(gameObject.transform, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(gameObject.transform); + tester.RaiseScriptableEvent(gameObject.transform); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterTransformGameEventListener() + public void ShouldRegisterAndUnregisterTransformScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] public void ShouldRaiseVector2EventListener() { - var tester = new GameEventTester< - Vector2GameEventListener, - Vector2GameEvent, + var tester = new ScriptableEventTester< + Vector2ScriptableEventListener, + Vector2ScriptableEvent, Vector2UnityEvent, UnityEngine.Vector2 >(); tester.SetActive(true); - tester.RaiseGameEvent(UnityEngine.Vector2.one); + tester.RaiseScriptableEvent(UnityEngine.Vector2.one); Assert.AreEqual(UnityEngine.Vector2.one, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(UnityEngine.Vector2.one); + tester.RaiseScriptableEvent(UnityEngine.Vector2.one); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterVector2GameEventListener() + public void ShouldRegisterAndUnregisterVector2ScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] public void ShouldRaiseVector3EventListener() { - var tester = new GameEventTester< - Vector3GameEventListener, - Vector3GameEvent, + var tester = new ScriptableEventTester< + Vector3ScriptableEventListener, + Vector3ScriptableEvent, VectorUnity3Event, UnityEngine.Vector3 >(); tester.SetActive(true); - tester.RaiseGameEvent(UnityEngine.Vector3.one); + tester.RaiseScriptableEvent(UnityEngine.Vector3.one); Assert.AreEqual(UnityEngine.Vector3.one, tester.GetLastEventValue()); Assert.AreEqual(1, tester.GetEventCount()); tester.Clear(); tester.SetActive(false); - tester.RaiseGameEvent(UnityEngine.Vector3.one); + tester.RaiseScriptableEvent(UnityEngine.Vector3.one); Assert.AreEqual(0, tester.GetEventCount()); } [Test] - public void ShouldRegisterAndUnregisterVector3GameEventListener() + public void ShouldRegisterAndUnregisterVector3ScriptableEventListener() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var listener = new NoOpListener(); - gameEvent.Add(listener); - Assert.AreEqual(1, gameEvent.Listeners.Count()); + ScriptableEvent.Add(listener); + Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(listener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(listener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } [Test] - public void ShouldRegisterAndUnregisterGameEventMultipleListeners() + public void ShouldRegisterAndUnregisterScriptableEventMultipleListeners() { - var gameEvent = ScriptableObject.CreateInstance(); + var ScriptableEvent = ScriptableObject.CreateInstance(); var firstListener = new NoOpListener(); var secondListener = new NoOpListener(); - gameEvent.Add(firstListener); - gameEvent.Add(secondListener); - Assert.AreEqual(2, gameEvent.Listeners.Count()); + ScriptableEvent.Add(firstListener); + ScriptableEvent.Add(secondListener); + Assert.AreEqual(2, ScriptableEvent.Listeners.Count()); - gameEvent.Remove(firstListener); - gameEvent.Remove(secondListener); - Assert.AreEqual(0, gameEvent.Listeners.Count()); + ScriptableEvent.Remove(firstListener); + ScriptableEvent.Remove(secondListener); + Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); } } } diff --git a/Assets/Tests/Runtime/GameEventTester.cs b/Assets/Tests/Runtime/GameEventTester.cs index 2e4234d..a38df5f 100644 --- a/Assets/Tests/Runtime/GameEventTester.cs +++ b/Assets/Tests/Runtime/GameEventTester.cs @@ -3,43 +3,43 @@ using UnityEngine; using UnityEngine.Events; -namespace GameEvents.Tests +namespace ScriptableEvents.Tests { - public class GameEventTester< - TGameEventListener, - TGameEvent, + public class ScriptableEventTester< + TScriptableEventListener, + TScriptableEvent, TUnityEvent, TArgument > - where TGameEvent : BaseGameEvent + where TScriptableEvent : BaseScriptableEvent where TUnityEvent : UnityEvent, new() - where TGameEventListener : BaseGameEventListener< - TGameEvent, + where TScriptableEventListener : BaseScriptableEventListener< + TScriptableEvent, TUnityEvent, TArgument > { private readonly List eventValues; private readonly UnityEngine.GameObject gameObject; - private readonly TGameEvent gameEvent; + private readonly TScriptableEvent ScriptableEvent; - public GameEventTester() + public ScriptableEventTester() { eventValues = new List(); gameObject = new UnityEngine.GameObject(); gameObject.SetActive(false); - var onGameEvent = new TUnityEvent(); - onGameEvent.AddListener(AddEventValue); + var onScriptableEvent = new TUnityEvent(); + onScriptableEvent.AddListener(AddEventValue); - gameEvent = ScriptableObject.CreateInstance(); + ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = gameObject.AddComponent(); + var listener = gameObject.AddComponent(); // todo: do we need these in the API as its only for tests atm? - // listener.OnGameEvent = onGameEvent; - // listener.GameEvent = gameEvent; + // listener.OnScriptableEvent = onScriptableEvent; + // listener.ScriptableEvent = ScriptableEvent; } public int GetEventCount() @@ -62,9 +62,9 @@ public void SetActive(bool value) gameObject.SetActive(value); } - public void RaiseGameEvent(TArgument argument) + public void RaiseScriptableEvent(TArgument argument) { - gameEvent.Raise(argument); + ScriptableEvent.Raise(argument); } private void AddEventValue(TArgument value) diff --git a/Assets/Tests/Runtime/NoOpListener.cs b/Assets/Tests/Runtime/NoOpListener.cs index 04b6a59..6f105fc 100644 --- a/Assets/Tests/Runtime/NoOpListener.cs +++ b/Assets/Tests/Runtime/NoOpListener.cs @@ -1,6 +1,6 @@ -namespace GameEvents.Tests +namespace ScriptableEvents.Tests { - public class NoOpListener : IGameEventListener + public class NoOpListener : IScriptableEventListener { public void OnRaised(TArg arg) { diff --git a/Assets/package.json b/Assets/package.json index ec0d619..1e5274c 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,11 +1,11 @@ { - "name": "com.chark.game-events", - "displayName": "Game Events", + "name": "com.chark.scriptable-events", + "displayName": "Scriptable Events", "author": { "name": "Chark", "url": "https://chark.io" }, - "version": "1.1.0", + "version": "1.0.0", "unity": "2019.4", "description": "Extensible event system implemented via ScriptableObject", "samples": [ diff --git a/Assets/CHANGELOG.md b/CHANGELOG.md similarity index 100% rename from Assets/CHANGELOG.md rename to CHANGELOG.md diff --git a/LICENSE.md b/LICENSE.md index dd06153..eb92704 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 CHARK +Copyright (c) 2021 CHARK Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2daa55b..f7688e5 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,18 @@ -# Unity Scriptable Objects +# Scriptable Events [![Unity 2019.4+](https://img.shields.io/badge/unity-2019.4%2B-blue.svg)](https://unity3d.com/get-unity/download) -[![Actions Status](https://github.com/chark/unity-scriptable-objects/workflows/CI/badge.svg)](https://github.com/chark/unity-scriptable-objects/actions) +[![Actions Status](https://github.com/chark/scriptable-events/workflows/CI/badge.svg)](https://github.com/chark/scriptable-events/actions) -This package provides utilities for implementing game architecture which is oriented around `ScriptableObject` assets and game events. Most of these ideas are based on [Unite2017](https://github.com/roboryantron/Unite2017). +Provides utilities event based architecture which is oriented around `ScriptableObject` assets. Most of these ideas are based on [Unite2017](https://github.com/roboryantron/Unite2017). ## Features -- Game events - allows transferring of data between scripts using `ScriptableObject` event assets. -- Game event listeners - listener components which allow subscribing to various events. -- Mutable objects - eases up sharing of mutable data via `ScriptableObject` assets. +TODO ## Installation This package can be installed by using the [Unity Package Manager]. To install this package, add the following to `manifest.json`: ```json { "dependencies": { - "com.chark.unity-scriptable-objects": "https://github.com/chark/unity-scriptable-objects.git#upm" + "com.chark.unity-scriptable-objects": "https://github.com/chark/scriptable-events.git#upm" } } ``` @@ -23,128 +21,6 @@ This package can be installed by using the [Unity Package Manager]. To install t Example usage of game events and mutable objects can be found in [Assets/Samples](Assets/Samples) directory. These samples can also be imported via [Unity Package Manager]. ## Documentation - -### Game events -

- Example usage of Game Event assets - Example of a setup Game Event Listener component -

- -Game events are scriptable objects (_Right Click -> Create -> Game Events -> ..._) which can be subscribed to via listener components (_Add Component -> Game Events -> ..._). Events allow to decouple scripts and instead rely on intermediate `ScriptableObject` assets for communication. - -Available game events: -- `GameEvent` - simple event which doesn't accept any arguments. -- `BoolGameEvent` - event with a `bool` argument. -- `IntGameEvent` - event with an `int` argument. -- `FloatGameEvent` - event with a `float` argument. -- `StringGameEvent` - event with a `string` argument. -- `Vector2GameEvent` - event with a `Vector2` argument. -- `Vector3GameEvent` - event with a `Vector3` argument. -- `TransformGameEvent` - event with a `Transform` argument. -- `GameObjectGameEvent` - event with a `GameObject` argument. - -### Mutable objects -Example usage of Mutable Objects - -Mutable objects are used for storing and editing data on `ScriptableObject` assets at runtime. This data can be referenced, observed and used as a bridge by various scripts. Mutable objects are useful in situations where `ScriptableObject` data needs to be reset when the [active scene changes](https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager-activeSceneChanged.html). - -Available mutable objects: -- `MutableBool` - encapsulates a `bool` value. -- `MutableInt` - encapsulates an `int` value. -- `MutableFloat` - encapsulates a `float` value. -- `MutableString` - encapsulates a `string` value. -- `MutableVector2` - encapsulates a `Vector2` value. -- `MutableVector3` - encapsulates a `Vector3` value. - -Each mutable object has a `ResetType` property. This allows specifying when data in the mutable object should be reset. The following modes are available: -- `None` - do not reset (default). -- `ActiveSceneChange` - when the active (focused) scene changes. -- `SceneUnloaded` - when the current scene gets unloaded. -- `SceneLoaded` - when the scene is loaded. - -### Custom game events -In some situations, built-in game events might not suffice. For example if a custom type needs to be passed as an argument to the event. In this case, a custom game event can be created which would carry all the necessary data. - -To create a custom game event, first create a regular `UnityEvent`: -```cs -[Serializable] -public class CustomEvent : UnityEvent -{ -} -``` - -After that is ready, create a game event by extending `GameEvents.Generic.ArgumentGameEvent`: -```cs -[CreateAssetMenu(fileName = "CustomEvent", menuName = "Game Events/Custom Event")] -public class CustomGameEvent : ArgumentGameEvent -{ -} -``` - -Finally, create a game event listener by extending `GameEvents.Generic.ArgumentGameEventListener`: -```cs -[AddComponentMenu("Game Events/Custom Game Event Listener")] -public class CustomGameEventListener : ArgumentGameEventListener -{ -} -``` - -, add a custom editor so that the event could be raised, and the listeners which reference the event get displayed in the inspector. -```cs -[CustomEditor(typeof(CustomGameEvent))] -public class GameObjectGameEventEditor : ArgumentGameEventEditor -{ - protected override Custom DrawArgumentField(Custom value) - { - var fieldValue = EditorGUILayout - .ObjectField(value, typeof(Custom), true); - - return fieldValue as Custom; - } -} -``` - -### Custom mutable objects -In some cases, littering the script code with loads of `MutableObject` references can be inconvenient. To avoid this, a single object can be used which encompasses multiple fields. - -To create a custom mutable object, extend `MutableObjects.Generic.MutableObject` and override `ResetValues()` method, e.g: -```cs -[CreateAssetMenu(fileName = "MutableCustom", menuName = "Mutable Objects/Mutable Custom")] -public class MutableCustom : MutableObject -{ - [SerializeField] - private int health = default; - - [SerializeField] - private int armor = default; - - [SerializeField] - private int xp = default; - - public int Health { get; set; } - - public int Armor { get; set; } - - public int Xp { get; set; } - - // This will set property values when mutable object is enabled or if the values change in the - // inspector. - public override void ResetValues() - { - Health = health; - Armor = armor; - Xp = xp; - } -} -``` +TODO [Unity Package Manager]: https://docs.unity3d.com/Packages/com.unity.package-manager-ui@2.0/manual/index.html From d66a973a1b0266d38802c1e3801dd1c1d9dad9dc Mon Sep 17 00:00:00 2001 From: Edvinas Date: Fri, 22 Jan 2021 14:41:11 +0200 Subject: [PATCH 06/26] Fixup editor a bit --- Assets/Editor/BaseScriptableEventEditor.cs | 79 ++++++++++++++++++---- 1 file changed, 64 insertions(+), 15 deletions(-) diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Assets/Editor/BaseScriptableEventEditor.cs index ec8c8e2..39fff93 100644 --- a/Assets/Editor/BaseScriptableEventEditor.cs +++ b/Assets/Editor/BaseScriptableEventEditor.cs @@ -14,6 +14,12 @@ public abstract class BaseScriptableEventEditor private SerializedProperty descriptionProperty; private SerializedProperty lockDescription; + private MonoScript monoScript; + + // Cached description styles. + private GUIStyle descriptionLockStyle; + private GUIStyle descriptionStyle; + private float descriptionWidth; private TArg argValue; @@ -23,42 +29,85 @@ public abstract class BaseScriptableEventEditor public void OnEnable() { - // todo: add locking https://github.com/roboryantron/Unite2017/blob/master/Assets/Code/Variables/Editor/FloatReferenceDrawer.cs descriptionProperty = serializedObject.FindProperty("description"); lockDescription = serializedObject.FindProperty("lockDescription"); + + monoScript = MonoScript.FromScriptableObject(target as ScriptableObject); } - public override void OnInspectorGUI() + private void DrawMonoScript() { GUI.enabled = false; - EditorGUILayout.ObjectField("Script", MonoScript.FromScriptableObject(target as ScriptableObject), typeof(TScriptableEvent), false); + EditorGUILayout.ObjectField("Script", monoScript, typeof(TScriptableEvent), false); GUI.enabled = true; + } - EditorGUI.BeginChangeCheck(); + private void SetupDescriptionStyles() + { + if (descriptionLockStyle == null) + { + descriptionLockStyle = GUI.skin.GetStyle("IN LockButton"); + } + + if (descriptionStyle == null) + { + descriptionStyle = new GUIStyle(EditorStyles.textArea) + { + richText = true, + wordWrap = true + }; + } - // Description. + if (descriptionWidth <= 0) + { + descriptionWidth = EditorStyles.label.CalcSize(new GUIContent("Description")).x; + } + } + + private void DrawDescription() + { + // Label. EditorGUILayout.LabelField("Description"); - var descriptionLabelRect = GUILayoutUtility.GetLastRect(); - var lockStyle = GUI.skin.GetStyle("IN LockButton"); - descriptionLabelRect.x = descriptionLabelRect.xMin + EditorStyles.label.CalcSize(new GUIContent("Description")).x; - descriptionLabelRect.width = lockStyle.fixedWidth; - lockDescription.boolValue = EditorGUI.Toggle(descriptionLabelRect, GUIContent.none, lockDescription.boolValue, lockStyle); + // Label position. + var position = GUILayoutUtility.GetLastRect(); + position.width = descriptionLockStyle.fixedWidth; + position.x = position.xMin + descriptionWidth; + + // Lock button. + lockDescription.boolValue = EditorGUI.Toggle( + position, + GUIContent.none, + lockDescription.boolValue, + descriptionLockStyle + ); + // Text. GUI.enabled = !lockDescription.boolValue; - var style = new GUIStyle(EditorStyles.textArea); - style.richText = true; - descriptionProperty.stringValue = EditorGUILayout.TextArea(descriptionProperty.stringValue, style); + descriptionProperty.stringValue = EditorGUILayout.TextArea( + descriptionProperty.stringValue, + descriptionStyle + ); + GUI.enabled = true; + } + + public override void OnInspectorGUI() + { + DrawMonoScript(); + + EditorGUI.BeginChangeCheck(); - // Description lock. + SetupDescriptionStyles(); + DrawDescription(); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } - DrawPropertiesExcluding(serializedObject, descriptionProperty.name, lockDescription.name); + DrawPropertiesExcluding(serializedObject, descriptionProperty.name, + lockDescription.name); return; From 677b8c21fc6b14a6cd235f15d980926d356c5343 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Fri, 22 Jan 2021 14:44:06 +0200 Subject: [PATCH 07/26] Remove images and unused csproj files --- Assets/Documentation~/game-events.png | Bin 43669 -> 0 bytes Assets/Documentation~/index.md | 126 +-------------------- Assets/Documentation~/listeners.png | Bin 60942 -> 0 bytes Assets/Documentation~/mutable-objects.png | Bin 75396 -> 0 bytes Chark.GameEvents.Editor.csproj.DotSettings | 2 - Chark.GameEvents.csproj.DotSettings | 2 - ProjectSettings/ProjectSettings.asset | 6 +- ProjectSettings/QualitySettings.asset | 3 +- 8 files changed, 5 insertions(+), 134 deletions(-) delete mode 100644 Assets/Documentation~/game-events.png delete mode 100644 Assets/Documentation~/listeners.png delete mode 100644 Assets/Documentation~/mutable-objects.png delete mode 100644 Chark.GameEvents.Editor.csproj.DotSettings delete mode 100644 Chark.GameEvents.csproj.DotSettings diff --git a/Assets/Documentation~/game-events.png b/Assets/Documentation~/game-events.png deleted file mode 100644 index 1eb1443d82cb21a8dfe76e9a7ad7c9970a3d664b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43669 zcmY(qWk6d^^FADCX$us$wiI_SP@uS5&;$ZE5TK<T1 z1zBBpll?m)@7I$)e77;&4_);4)NC8^i9fscqD%ewfUQ0s(!>R(BoCK(fR!dk~n7~UPmSF2qSA$@qzHW8#CKxGq=TF5fO*~ zdUAVtDY@yjF*pOCncTB+tNVG4BqHnn56cjhA{yZbVWkj*!Cx>%fVW!j- z`BIQ`yR61(L;X5U)OKo6wAN}UOVaCLe#Uuo5H126Mm9Nb8o#;p_gJx|^&83*Oqm+W z(s&plwHzj;)}ceenQvH;B288RK&r`b*&#sDD)^cZ0MPE-;N1R47P|N@r%yLe|j@MiOL#G>9Dv@9w!y08`FvQ0m*%z($^5LH^?N`$i56LT2 z_e<#R3`Z_Zh2EE*9zt#OS^~phPwoB}8BTZ9r4DP6`ZGfQGjBX(k1#V0kkK5qEl1-t z3BVmo3;dp;iSkzxuErC5#Js|6AmfTDB|6S7xp3(;=Bq%p6Tah%8v zZ=-LVH|IE)r&?%-X>rklSt{gFWmO) zZIfeZm~Te67F5I)CJ3U#+|h3aRYb~&AmnA#c)|10*W{G@1#6Ttnima!;#KZa+3(Ne%}k95N)&ju+fuDIAvVhd~B z16NZpx(ckltqO*4aAFB0C43TU;x457#X;MrYgeT@gTlxs0RS)&j|arc1OKuFkU1%G z-KUKf)aVw)K<#6C#4%l8PLC>K+*X5#dpBUGO6dO>H#M~1xIzV_w3hZ%d)P{>WP+VA zicv=3lsM@f1Br=KtF90z3hwoi9+m;E!)O=?mAYb3xEVCZNI0N1FdX=yTRqols@$M< z+xDWo$=PZoQ_$*QUi5ThYjYS^)%1{1U>q94*75h&LgQH>Eu?!wO2QeulGHo_Jh{b~Zz zL%BwAg(!V+GHD;a0Uo`4VqxXa1F<@Q_LP#cvPH7MJHF?td?fBIU;X>sqqT^#U#*rn zHBRPkR8NMMbBpZ`1^40m7h|UKS0^92nbQbIpFfDv@+Ey0t6yuP@Ap}p)iE_i6Vir@ zhhdQoH#`P_`7)HYq!KGUBvk#Z8I%h==?ZFd48!l_mY>P@+beHlpi?;6GX=-?yOUdtu=T{DjT-QJ?iSN4nnW`2X ztJOApn%&FGTlR8Io+k zDSAR};rov55RyEZZ#;Qz&S_?3-!Ml^*3DsSMy> z>E<5l_*Ap0hKrIsY*z*N!z z?WG%aVma^uKn*)PZ(AqEFxMZ1rFm_?+Szqbj&B!*C3p#@iBJV|8lNUwkA2eRY^)hQ z#4S~Xg@wNywp_NNH_~lH0gibnjDfUBCLN#{-VM98e1I)sug#g)Bzh;#5e2Da(W3 z4Fs@zP7WFU)-=zRA%oePlqJUpJ2!H7M_-rcPQ4NmRT&5u)n_lp4IB9qo$J}F4-4OZYOVh9zJ6N$#yWH{>Uq=I|%t zQM)7X@vL+xaV@KpSD&aesMt-I&@C^u%*nDkzUG-;%Yzv0&zz2`2>XBy$007MeLb&t zKM`EcmFZH&8j%-ojASn@E>PqL zaO7x1cE(s`EB`3Qi}CzQN@{2fBiM`XL$^c*+mIS_570r3|9u7NeZ^4 zkNX)q68`z?FW*}Jw+;vIeY`<9U14Pp0#EB=2@jy{E0KPyt&n_1K4%>% zF+<8EFX6=OM5G_b;41KQghP8en8%9u4g7`UPQ;EonJvP)F5^>*YPLXf;hzY(Z{g$F zj>42{-GBc4qa+*NE6d>_`?#ssN^R`nwx6lr67idhWX)8wr_jIs5p~XMg|s=FmQ%9~ z*xK2Q=0Mi>uyVWaBdbLf+@dY@zRY`(YLmgroh4cj4co>gA$9U?ayE(Mzzi#>O2)ML z@gf4z>7L>^6cBk`P=KPVw_VeW{8&GdT%0A4ITDBq3iLc1Qx15_!N?m%pP(BA1bs=% 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 S62zTR*Hn;Ek*<(5dGjAD>WCfy diff --git a/Assets/Documentation~/index.md b/Assets/Documentation~/index.md index 9eba67f..103d3e7 100644 --- a/Assets/Documentation~/index.md +++ b/Assets/Documentation~/index.md @@ -1,126 +1,2 @@ ## Documentation - -### Game events -

- Example usage of Game Event assets - Example of a setup Game Event Listener component -

- -Game events are scriptable objects (_Right Click -> Create -> Game Events -> ..._) which can be subscribed to via listener components (_Add Component -> Game Events -> ..._). Events allow to decouple scripts and instead rely on intermediate `ScriptableObject` assets for communication. - -Available game events: -- `GameEvent` - simple event which doesn't accept any arguments. -- `BoolGameEvent` - event with a `bool` argument. -- `IntGameEvent` - event with an `int` argument. -- `FloatGameEvent` - event with a `float` argument. -- `StringGameEvent` - event with a `string` argument. -- `Vector2GameEvent` - event with a `Vector2` argument. -- `Vector3GameEvent` - event with a `Vector3` argument. -- `TransformGameEvent` - event with a `Transform` argument. -- `GameObjectGameEvent` - event with a `GameObject` argument. - -### Mutable objects -Example usage of Mutable Objects - -Mutable objects are used for storing and editing data on `ScriptableObject` assets at runtime. This data can be referenced, observed and used as a bridge by various scripts. Mutable objects are useful in situations where `ScriptableObject` data needs to be reset when the [active scene changes](https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager-activeSceneChanged.html). - -Available mutable objects: -- `MutableBool` - encapsulates a `bool` value. -- `MutableInt` - encapsulates an `int` value. -- `MutableFloat` - encapsulates a `float` value. -- `MutableString` - encapsulates a `string` value. -- `MutableVector2` - encapsulates a `Vector2` value. -- `MutableVector3` - encapsulates a `Vector3` value. - -Each mutable object has a `ResetType` property. This allows specifying when data in the mutable object should be reset. The following modes are available: -- `None` - do not reset (default). -- `ActiveSceneChange` - when the active (focused) scene changes. -- `SceneUnloaded` - when the current scene gets unloaded. -- `SceneLoaded` - when the scene is loaded. - -### Custom game events -In some situations, built-in game events might not suffice. For example if a custom type needs to be passed as an argument to the event. In this case, a custom game event can be created which would carry all the necessary data. - -To create a custom game event, first create a regular `UnityEvent`: -```cs -[Serializable] -public class CustomEvent : UnityEvent -{ -} -``` - -After that is ready, create a game event by extending `GameEvents.Generic.ArgumentGameEvent`: -```cs -[CreateAssetMenu(fileName = "CustomEvent", menuName = "Game Events/Custom Event")] -public class CustomGameEvent : ArgumentGameEvent -{ -} -``` - -Finally, create a game event listener by extending `GameEvents.Generic.ArgumentGameEventListener`: -```cs -[AddComponentMenu("Game Events/Custom Game Event Listener")] -public class CustomGameEventListener : ArgumentGameEventListener -{ -} -``` - -, add a custom editor so that the event could be raised, and the listeners which reference the event get displayed in the inspector. -```cs -[CustomEditor(typeof(CustomGameEvent))] -public class GameObjectGameEventEditor : ArgumentGameEventEditor -{ - protected override Custom DrawArgumentField(Custom value) - { - var fieldValue = EditorGUILayout - .ObjectField(value, typeof(Custom), true); - - return fieldValue as Custom; - } -} -``` - -### Custom mutable objects -In some cases, littering the script code with loads of `MutableObject` references can be inconvenient. To avoid this, a single object can be used which encompasses multiple fields. - -To create a custom mutable object, extend `MutableObjects.Generic.MutableObject` and override `ResetValues()` method, e.g: -```cs -[CreateAssetMenu(fileName = "MutableCustom", menuName = "Mutable Objects/Mutable Custom")] -public class MutableCustom : MutableObject -{ - [SerializeField] - private int health = default; - - [SerializeField] - private int armor = default; - - [SerializeField] - private int xp = default; - - public int Health { get; set; } - - public int Armor { get; set; } - - public int Xp { get; set; } - - // This will set property values when mutable object is enabled or if the values change in the - // inspector. - public override void ResetValues() - { - Health = health; - Armor = armor; - Xp = xp; - } -} -``` - -[Unity Package Manager]: https://docs.unity3d.com/Packages/com.unity.package-manager-ui@2.0/manual/index.html +TODO diff --git a/Assets/Documentation~/listeners.png b/Assets/Documentation~/listeners.png deleted file mode 100644 index 33e5cc2ed99bd59b6962117377180e023aa628b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60942 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�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 KSt)KB{Qm(I%C#f_ diff --git a/Assets/Documentation~/mutable-objects.png b/Assets/Documentation~/mutable-objects.png deleted file mode 100644 index b11443c465c3a25cbb5830a91ecf98c36207e839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75396 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

^Iz8u(lP{FGv1bc=fRU=l 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 IT}SNy0QpHn@c;k- diff --git a/Chark.GameEvents.Editor.csproj.DotSettings b/Chark.GameEvents.Editor.csproj.DotSettings deleted file mode 100644 index 5ac0881..0000000 --- a/Chark.GameEvents.Editor.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/Chark.GameEvents.csproj.DotSettings b/Chark.GameEvents.csproj.DotSettings deleted file mode 100644 index 46d7629..0000000 --- a/Chark.GameEvents.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 0fa50c3..66a5264 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -12,8 +12,8 @@ PlayerSettings: targetDevice: 2 useOnDemandResources: 0 accelerometerFrequency: 60 - companyName: chark - productName: com.chark.unity-scriptable-objects + companyName: CHARK + productName: com.chark.scriptable-events defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} @@ -124,7 +124,7 @@ PlayerSettings: 16:10: 1 16:9: 1 Others: 1 - bundleVersion: 0.1.0 + bundleVersion: 1.0.0 preloadedAssets: [] metroInputSource: 0 wsaTransparentSwapchain: 0 diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index cab35cc..0600089 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -114,8 +114,7 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 11400000, guid: 19ba41d7c0026c3459d37c2fe90c55a0, - type: 2} + customRenderPipeline: {fileID: 0} excludedTargetPlatforms: [] m_PerPlatformDefaultQuality: Android: 1 From 1cf9643cd786cd1ff10e8484c662f29c42d3f32a Mon Sep 17 00:00:00 2001 From: Edvinas Date: Fri, 22 Jan 2021 14:47:59 +0200 Subject: [PATCH 08/26] Update project settings --- Chark.ScriptableEvents.Editor.csproj.DotSettings | 2 ++ Chark.ScriptableEvents.Samples.csproj.DotSettings | 3 +++ Chark.ScriptableEvents.Tests.csproj.DotSettings | 3 +++ Chark.ScriptableEvents.csproj.DotSettings | 2 ++ game-events.sln.DotSettings | 3 --- 5 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 Chark.ScriptableEvents.Editor.csproj.DotSettings create mode 100644 Chark.ScriptableEvents.Samples.csproj.DotSettings create mode 100644 Chark.ScriptableEvents.Tests.csproj.DotSettings create mode 100644 Chark.ScriptableEvents.csproj.DotSettings delete mode 100644 game-events.sln.DotSettings diff --git a/Chark.ScriptableEvents.Editor.csproj.DotSettings b/Chark.ScriptableEvents.Editor.csproj.DotSettings new file mode 100644 index 0000000..5ac0881 --- /dev/null +++ b/Chark.ScriptableEvents.Editor.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/Chark.ScriptableEvents.Samples.csproj.DotSettings b/Chark.ScriptableEvents.Samples.csproj.DotSettings new file mode 100644 index 0000000..960f274 --- /dev/null +++ b/Chark.ScriptableEvents.Samples.csproj.DotSettings @@ -0,0 +1,3 @@ + + True + True \ No newline at end of file diff --git a/Chark.ScriptableEvents.Tests.csproj.DotSettings b/Chark.ScriptableEvents.Tests.csproj.DotSettings new file mode 100644 index 0000000..216437a --- /dev/null +++ b/Chark.ScriptableEvents.Tests.csproj.DotSettings @@ -0,0 +1,3 @@ + + True + True \ No newline at end of file diff --git a/Chark.ScriptableEvents.csproj.DotSettings b/Chark.ScriptableEvents.csproj.DotSettings new file mode 100644 index 0000000..46d7629 --- /dev/null +++ b/Chark.ScriptableEvents.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/game-events.sln.DotSettings b/game-events.sln.DotSettings deleted file mode 100644 index 542dd4c..0000000 --- a/game-events.sln.DotSettings +++ /dev/null @@ -1,3 +0,0 @@ - - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> \ No newline at end of file From 1de50c5f85f8251058d078c742c8b5d01ad5d7b7 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Fri, 22 Jan 2021 14:48:46 +0200 Subject: [PATCH 09/26] Update namespace --- Assets/Samples/Scripts/FloatFadeOutText.cs | 2 +- Assets/Samples/Scripts/Score.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Samples/Scripts/FloatFadeOutText.cs b/Assets/Samples/Scripts/FloatFadeOutText.cs index 04d8269..8052419 100644 --- a/Assets/Samples/Scripts/FloatFadeOutText.cs +++ b/Assets/Samples/Scripts/FloatFadeOutText.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace ScriptableEvents.Smaples +namespace ScriptableEvents.Samples { [RequireComponent(typeof(Text))] public class FloatFadeOutText : MonoBehaviour diff --git a/Assets/Samples/Scripts/Score.cs b/Assets/Samples/Scripts/Score.cs index 50b2113..b865f3d 100644 --- a/Assets/Samples/Scripts/Score.cs +++ b/Assets/Samples/Scripts/Score.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace ScriptableEvents.Smaples +namespace ScriptableEvents.Samples { [RequireComponent(typeof(Text))] public class Score : MonoBehaviour From 2d1440c38ab93d8a757ab89d6ba1e1038ed314e5 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Fri, 22 Jan 2021 15:46:01 +0200 Subject: [PATCH 10/26] Cleanup DotSettings --- Chark.UnityScriptableObjects.Editor.csproj.DotSettings | 2 -- Chark.UnityScriptableObjects.Samples.csproj.DotSettings | 5 ----- Chark.UnityScriptableObjects.Tests.csproj.DotSettings | 3 --- Chark.UnityScriptableObjects.csproj.DotSettings | 2 -- 4 files changed, 12 deletions(-) delete mode 100644 Chark.UnityScriptableObjects.Editor.csproj.DotSettings delete mode 100644 Chark.UnityScriptableObjects.Samples.csproj.DotSettings delete mode 100644 Chark.UnityScriptableObjects.Tests.csproj.DotSettings delete mode 100644 Chark.UnityScriptableObjects.csproj.DotSettings diff --git a/Chark.UnityScriptableObjects.Editor.csproj.DotSettings b/Chark.UnityScriptableObjects.Editor.csproj.DotSettings deleted file mode 100644 index 5ac0881..0000000 --- a/Chark.UnityScriptableObjects.Editor.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/Chark.UnityScriptableObjects.Samples.csproj.DotSettings b/Chark.UnityScriptableObjects.Samples.csproj.DotSettings deleted file mode 100644 index e7843ae..0000000 --- a/Chark.UnityScriptableObjects.Samples.csproj.DotSettings +++ /dev/null @@ -1,5 +0,0 @@ - - True - True - False - True \ No newline at end of file diff --git a/Chark.UnityScriptableObjects.Tests.csproj.DotSettings b/Chark.UnityScriptableObjects.Tests.csproj.DotSettings deleted file mode 100644 index 216437a..0000000 --- a/Chark.UnityScriptableObjects.Tests.csproj.DotSettings +++ /dev/null @@ -1,3 +0,0 @@ - - True - True \ No newline at end of file diff --git a/Chark.UnityScriptableObjects.csproj.DotSettings b/Chark.UnityScriptableObjects.csproj.DotSettings deleted file mode 100644 index 46d7629..0000000 --- a/Chark.UnityScriptableObjects.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file From 5322ead871efa82e8faa759b838983e8637e3983 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sat, 23 Jan 2021 12:35:24 +0200 Subject: [PATCH 11/26] Update event editor, add package validator --- Assets/Editor/BaseScriptableEventEditor.cs | 217 ++++++++++++--------- Packages/manifest.json | 1 + Packages/packages-lock.json | 25 +++ 3 files changed, 155 insertions(+), 88 deletions(-) diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Assets/Editor/BaseScriptableEventEditor.cs index 39fff93..f8e20c0 100644 --- a/Assets/Editor/BaseScriptableEventEditor.cs +++ b/Assets/Editor/BaseScriptableEventEditor.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using UnityEditor; +using UnityEditor; using UnityEngine; namespace ScriptableEvents.Editor @@ -11,16 +10,50 @@ public abstract class BaseScriptableEventEditor { #region Fields - private SerializedProperty descriptionProperty; - private SerializedProperty lockDescription; - + private TScriptableEvent scriptableEvent; private MonoScript monoScript; - // Cached description styles. + // Cached properties. + private SerializedProperty descriptionProperty; + private SerializedProperty lockDescriptionProperty; + private SerializedProperty suppressExceptionsProperty; + private SerializedProperty traceProperty; + + // Cached styles. private GUIStyle descriptionLockStyle; private GUIStyle descriptionStyle; private float descriptionWidth; + // ReSharper disable once StaticMemberInGenericType + private static readonly GUIContent DescriptionLabelContent = new GUIContent( + "Description", + "Custom description to provide more additional information" + ); + + // ReSharper disable once StaticMemberInGenericType + private static readonly GUIContent SuppressExceptionsLabelContent = new GUIContent( + "Suppress Exceptions", + "Should exceptions not break the listener chain" + ); + + // ReSharper disable once StaticMemberInGenericType + private static readonly GUIContent TraceLabelContent = new GUIContent( + "Trace", + "Should additional trace information be logged" + ); + + // ReSharper disable once StaticMemberInGenericType + private static readonly GUIContent RaiseLabelContent = new GUIContent( + "Raise event", + "Raise event and trigger added listeners (play mode only)" + ); + + // ReSharper disable once StaticMemberInGenericType + private static readonly GUIContent ListenerLabelContent = new GUIContent( + "Added listeners", + "Added listeners to this event (play mode only)" + ); + private TArg argValue; #endregion @@ -29,12 +62,49 @@ public abstract class BaseScriptableEventEditor public void OnEnable() { + scriptableEvent = target as TScriptableEvent; + monoScript = MonoScript.FromScriptableObject(target as ScriptableObject); + descriptionProperty = serializedObject.FindProperty("description"); - lockDescription = serializedObject.FindProperty("lockDescription"); + lockDescriptionProperty = serializedObject.FindProperty("lockDescription"); + suppressExceptionsProperty = serializedObject.FindProperty("suppressExceptions"); + traceProperty = serializedObject.FindProperty("trace"); + } - monoScript = MonoScript.FromScriptableObject(target as ScriptableObject); + public override void OnInspectorGUI() + { + DrawMonoScript(); + + EditorGUI.BeginChangeCheck(); + + SetupStyles(); + DrawDescription(); + + EditorGUILayout.Space(); + DrawSuppressExceptions(); + DrawTrace(); + + EditorGUILayout.Space(); + DrawRaise(); + + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + } + + EditorGUILayout.Space(); + DrawListeners(); } + #endregion + + #region Methods + + /// + /// Value that is entered in the event argument field. + /// + protected abstract TArg DrawArgField(TArg value); + private void DrawMonoScript() { GUI.enabled = false; @@ -42,7 +112,7 @@ private void DrawMonoScript() GUI.enabled = true; } - private void SetupDescriptionStyles() + private void SetupStyles() { if (descriptionLockStyle == null) { @@ -60,14 +130,15 @@ private void SetupDescriptionStyles() if (descriptionWidth <= 0) { - descriptionWidth = EditorStyles.label.CalcSize(new GUIContent("Description")).x; + var descriptionLabelSize = EditorStyles.label.CalcSize(DescriptionLabelContent); + descriptionWidth = descriptionLabelSize.x; } } private void DrawDescription() { // Label. - EditorGUILayout.LabelField("Description"); + EditorGUILayout.LabelField(DescriptionLabelContent); // Label position. var position = GUILayoutUtility.GetLastRect(); @@ -75,15 +146,15 @@ private void DrawDescription() position.x = position.xMin + descriptionWidth; // Lock button. - lockDescription.boolValue = EditorGUI.Toggle( + lockDescriptionProperty.boolValue = EditorGUI.Toggle( position, GUIContent.none, - lockDescription.boolValue, + lockDescriptionProperty.boolValue, descriptionLockStyle ); // Text. - GUI.enabled = !lockDescription.boolValue; + GUI.enabled = !lockDescriptionProperty.boolValue; descriptionProperty.stringValue = EditorGUILayout.TextArea( descriptionProperty.stringValue, descriptionStyle @@ -92,48 +163,29 @@ private void DrawDescription() GUI.enabled = true; } - public override void OnInspectorGUI() + private void DrawSuppressExceptions() { - DrawMonoScript(); - - EditorGUI.BeginChangeCheck(); - - SetupDescriptionStyles(); - DrawDescription(); - - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - } - - DrawPropertiesExcluding(serializedObject, descriptionProperty.name, - lockDescription.name); - - return; - - base.OnInspectorGUI(); - - if (!(target is TScriptableEvent ScriptableEvent)) - { - return; - } - - GUI.enabled = Application.isPlaying; - EditorGUILayout.Space(); - - DrawRaise(ScriptableEvent); - - EditorGUILayout.Space(); - DrawReferences(ScriptableEvent); + suppressExceptionsProperty.boolValue = EditorGUILayout.Toggle( + SuppressExceptionsLabelContent, + suppressExceptionsProperty.boolValue + ); } - #endregion - - #region Methods + private void DrawTrace() + { + traceProperty.boolValue = EditorGUILayout.Toggle( + TraceLabelContent, + traceProperty.boolValue + ); + } - private void DrawRaise(TScriptableEvent scriptableEvent) + private void DrawRaise() { - DrawPlaymodeLabel("Raise event"); + // Label. + EditorGUILayout.LabelField(RaiseLabelContent); + GUI.enabled = Application.isPlaying; + + // Edit mode input. GUILayout.BeginHorizontal(); argValue = DrawArgField(argValue); @@ -143,53 +195,42 @@ private void DrawRaise(TScriptableEvent scriptableEvent) } GUILayout.EndHorizontal(); + GUI.enabled = true; } - /// - /// Value that is entered in the Scriptable Event argument field. - /// - protected abstract TArg DrawArgField(TArg value); - - private static void DrawReferences(IScriptableEvent scriptableEvent) - { - DrawListeners(scriptableEvent.Listeners); - } - - private static void DrawPlaymodeLabel(string text) + private void DrawListeners() { - var labelSuffix = Application.isPlaying ? "" : "(play mode only)"; - GUILayout.Label($"{text} {labelSuffix}"); - } + EditorGUILayout.LabelField(ListenerLabelContent); - private static void DrawListeners(ICollection listeners) - { - DrawPlaymodeLabel("Listeners"); - if (Application.isPlaying) + // Edit mode info. + if (!Application.isPlaying) { - if (listeners.Count == 0) - { - EditorGUILayout.HelpBox( - "There are no listeners listening for this event", - MessageType.Warning - ); - - return; - } + EditorGUILayout.HelpBox( + "Added listeners will be displayed here", + MessageType.Info + ); - foreach (var listener in listeners) - { - if (listener is MonoBehaviour behaviour) - { - EditorGUILayout.ObjectField(behaviour, typeof(Object), true); - } - } + return; } - else + + // Play mode info. + var listeners = scriptableEvent.Listeners; + if (listeners.Count == 0) { EditorGUILayout.HelpBox( - "Registered listeners will be displayed here", - MessageType.Info + "There are no listeners added to this event", + MessageType.Warning ); + + return; + } + + foreach (var listener in listeners) + { + if (listener is MonoBehaviour behaviour) + { + EditorGUILayout.ObjectField(behaviour, typeof(Object), true); + } } } diff --git a/Packages/manifest.json b/Packages/manifest.json index 3819415..e73e2cc 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -2,6 +2,7 @@ "dependencies": { "com.unity.ide.rider": "1.1.4", "com.unity.ide.vscode": "1.2.1", + "com.unity.package-validation-suite": "0.19.2-preview", "com.unity.render-pipelines.universal": "7.3.1", "com.unity.test-framework": "1.1.16", "com.unity.ugui": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index c70904d..298851b 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -23,6 +23,24 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.nuget.mono-cecil": { + "version": "0.1.6-preview.2", + "depth": 1, + "source": "registry", + "dependencies": { + "nuget.mono-cecil": "0.1.6-preview" + }, + "url": "https://packages.unity.com" + }, + "com.unity.package-validation-suite": { + "version": "0.19.2-preview", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.nuget.mono-cecil": "0.1.6-preview.2" + }, + "url": "https://packages.unity.com" + }, "com.unity.render-pipelines.core": { "version": "7.3.1", "depth": 1, @@ -71,6 +89,13 @@ "com.unity.modules.imgui": "1.0.0" } }, + "nuget.mono-cecil": { + "version": "0.1.6-preview", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, "com.unity.modules.animation": { "version": "1.0.0", "depth": 1, From b73dffd3f81a5745a0a25748363a29df457fae89 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sat, 23 Jan 2021 12:38:48 +0200 Subject: [PATCH 12/26] Suppress faulty warnings --- Assets/Runtime/BaseScriptableEvent.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Runtime/BaseScriptableEvent.cs b/Assets/Runtime/BaseScriptableEvent.cs index 136cc87..cd76a13 100644 --- a/Assets/Runtime/BaseScriptableEvent.cs +++ b/Assets/Runtime/BaseScriptableEvent.cs @@ -9,9 +9,11 @@ public abstract class BaseScriptableEvent : ScriptableObject, IScriptableE { #region Editor + // ReSharper disable once NotAccessedField.Local [SerializeField] private string description; + // ReSharper disable once NotAccessedField.Local [SerializeField] private bool lockDescription = true; From d3668fd833fc1a6d6bc1b152bd9b9b82d7727944 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sat, 23 Jan 2021 12:51:13 +0200 Subject: [PATCH 13/26] Simplify assemblies --- Assets/Runtime/Chark.ScriptableEvents.asmdef | 12 +-------- .../Chark.ScriptableEvents.Samples.asmdef | 19 ++++---------- .../Chark.ScriptableEvents.Tests.asmdef | 25 ++++++------------- .../Chark.ScriptableEvents.Tests.asmdef.meta | 10 +++----- Assets/Tests/Runtime/ScriptableEventTest.cs | 7 ++++++ .../Tests/Runtime/ScriptableEventTest.cs.meta | 3 +++ 6 files changed, 26 insertions(+), 50 deletions(-) create mode 100644 Assets/Tests/Runtime/ScriptableEventTest.cs create mode 100644 Assets/Tests/Runtime/ScriptableEventTest.cs.meta diff --git a/Assets/Runtime/Chark.ScriptableEvents.asmdef b/Assets/Runtime/Chark.ScriptableEvents.asmdef index 66294d1..97b15c7 100644 --- a/Assets/Runtime/Chark.ScriptableEvents.asmdef +++ b/Assets/Runtime/Chark.ScriptableEvents.asmdef @@ -1,13 +1,3 @@ { - "name": "Chark.ScriptableEvents", - "references": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false + "name": "Chark.ScriptableEvents" } diff --git a/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef b/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef index e1009b0..526ae06 100644 --- a/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef +++ b/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef @@ -1,16 +1,7 @@ { - "name": "Chark.ScriptableEvents.Samples", - "references": [ - "Chark.ScriptableEvents", - "Chark.ScriptableEvents.Editor" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false + "name": "Chark.ScriptableEvents.Samples", + "references": [ + "Chark.ScriptableEvents", + "Chark.ScriptableEvents.Editor" + ] } diff --git a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef index 8263d27..a14fb0a 100644 --- a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef +++ b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef @@ -1,20 +1,9 @@ { - "name": "Chark.ScriptableEvents.Tests", - "references": [ - "UnityEngine.TestRunner", - "Chark.ScriptableEvents" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "nunit.framework.dll" - ], - "autoReferenced": false, - "defineConstraints": [ - "UNITY_INCLUDE_TESTS" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "Chark.ScriptableEvents.Tests", + "references": [ + "Chark.ScriptableEvents" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ] } diff --git a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta index 075ee7d..ca68477 100644 --- a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta +++ b/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta @@ -1,7 +1,3 @@ -fileFormatVersion: 2 -guid: ce79efc602f25d24d9f8b77d7d3a6fc2 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 81ca8701d7fd4d309754b55f4e13dd62 +timeCreated: 1611398777 \ No newline at end of file diff --git a/Assets/Tests/Runtime/ScriptableEventTest.cs b/Assets/Tests/Runtime/ScriptableEventTest.cs new file mode 100644 index 0000000..37f1a58 --- /dev/null +++ b/Assets/Tests/Runtime/ScriptableEventTest.cs @@ -0,0 +1,7 @@ +namespace ScriptableEvents.Tests +{ + public class ScriptableEventTests + { + + } +} diff --git a/Assets/Tests/Runtime/ScriptableEventTest.cs.meta b/Assets/Tests/Runtime/ScriptableEventTest.cs.meta new file mode 100644 index 0000000..70a10ef --- /dev/null +++ b/Assets/Tests/Runtime/ScriptableEventTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: daa2c11fbd9541b89b5d1cd38e37dfad +timeCreated: 1611399015 \ No newline at end of file From f9448eebdadd629274a63dbedd305579eb90a5be Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sat, 23 Jan 2021 14:56:50 +0200 Subject: [PATCH 14/26] Make API more strict, Clear functionality, overload + and - operators for adding and removing events --- Assets/Editor/BaseScriptableEventEditor.cs | 18 +++++++- Assets/Runtime/BaseScriptableEvent.cs | 42 ++++++++++++------- Assets/Runtime/IScriptableEvent.cs | 10 ++--- ....cs.meta => ScriptableEventTester.cs.meta} | 0 4 files changed, 47 insertions(+), 23 deletions(-) rename Assets/Tests/Runtime/{GameEventTester.cs.meta => ScriptableEventTester.cs.meta} (100%) diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Assets/Editor/BaseScriptableEventEditor.cs index f8e20c0..1cd8e85 100644 --- a/Assets/Editor/BaseScriptableEventEditor.cs +++ b/Assets/Editor/BaseScriptableEventEditor.cs @@ -1,4 +1,7 @@ -using UnityEditor; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; using UnityEngine; namespace ScriptableEvents.Editor @@ -12,6 +15,7 @@ public abstract class BaseScriptableEventEditor private TScriptableEvent scriptableEvent; private MonoScript monoScript; + private List> listeners; // Cached properties. private SerializedProperty descriptionProperty; @@ -64,6 +68,7 @@ public void OnEnable() { scriptableEvent = target as TScriptableEvent; monoScript = MonoScript.FromScriptableObject(target as ScriptableObject); + listeners = FindListeners(); descriptionProperty = serializedObject.FindProperty("description"); lockDescriptionProperty = serializedObject.FindProperty("lockDescription"); @@ -105,6 +110,16 @@ public override void OnInspectorGUI() /// protected abstract TArg DrawArgField(TArg value); + private List> FindListeners() + { + // Using reflection to fetch "listeners" as we don't want it to be exposed in the API. + var listenersField = typeof(BaseScriptableEvent) + .GetFields(BindingFlags.NonPublic | BindingFlags.Instance) + .First(field => field.Name == "listeners"); + + return listenersField.GetValue(target) as List>; + } + private void DrawMonoScript() { GUI.enabled = false; @@ -214,7 +229,6 @@ private void DrawListeners() } // Play mode info. - var listeners = scriptableEvent.Listeners; if (listeners.Count == 0) { EditorGUILayout.HelpBox( diff --git a/Assets/Runtime/BaseScriptableEvent.cs b/Assets/Runtime/BaseScriptableEvent.cs index cd76a13..85450bf 100644 --- a/Assets/Runtime/BaseScriptableEvent.cs +++ b/Assets/Runtime/BaseScriptableEvent.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using UnityEngine; namespace ScriptableEvents @@ -27,21 +26,12 @@ public abstract class BaseScriptableEvent : ScriptableObject, IScriptableE #region Fields - // ReadOnlyCollection is used here so it wouldn't get modified via Listeners without having - // to use Add or Remove. - private readonly ReadOnlyCollection> readOnlyListeners; - + [NonSerialized] private readonly List> listeners = new List>(); #endregion - #region Properties - - public ICollection> Listeners => readOnlyListeners; - - #endregion - #region Unity Lifecycle private void OnDisable() @@ -53,11 +43,6 @@ private void OnDisable() #region Methods - protected BaseScriptableEvent() - { - readOnlyListeners = new ReadOnlyCollection>(listeners); - } - public void Raise(TArg arg) { for (var i = listeners.Count - 1; i >= 0; i--) @@ -95,6 +80,31 @@ public void Remove(IScriptableEventListener listener) listeners.Remove(listener); } + public void Clear() + { + listeners.Clear(); + } + + /// + public static BaseScriptableEvent operator +( + BaseScriptableEvent scriptableEvent, + IScriptableEventListener scriptableEventListener + ) + { + scriptableEvent.Add(scriptableEventListener); + return scriptableEvent; + } + + /// + public static BaseScriptableEvent operator -( + BaseScriptableEvent scriptableEvent, + IScriptableEventListener scriptableEventListener + ) + { + scriptableEvent.Remove(scriptableEventListener); + return scriptableEvent; + } + private void Trace(IScriptableEventListener listener, TArg arg) { Debug.Log($"Raise event: {name}, listener: {listener}, arg: {arg}", this); diff --git a/Assets/Runtime/IScriptableEvent.cs b/Assets/Runtime/IScriptableEvent.cs index 78906e4..454eda4 100644 --- a/Assets/Runtime/IScriptableEvent.cs +++ b/Assets/Runtime/IScriptableEvent.cs @@ -4,11 +4,6 @@ namespace ScriptableEvents { public interface IScriptableEvent { - /// - /// Registered listeners. - /// - ICollection> Listeners { get; } - ///

/// Raise this event with an argument. /// @@ -23,5 +18,10 @@ public interface IScriptableEvent /// Remove a listener from this event. /// void Remove(IScriptableEventListener listener); + + /// + /// Remove all listeners from this event. + /// + void Clear(); } } diff --git a/Assets/Tests/Runtime/GameEventTester.cs.meta b/Assets/Tests/Runtime/ScriptableEventTester.cs.meta similarity index 100% rename from Assets/Tests/Runtime/GameEventTester.cs.meta rename to Assets/Tests/Runtime/ScriptableEventTester.cs.meta From f73ae1a2946437b4d6dc7359c55ae9efbe4e25e3 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sat, 23 Jan 2021 14:57:51 +0200 Subject: [PATCH 15/26] Cleanup imports --- Assets/Runtime/IScriptableEvent.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Assets/Runtime/IScriptableEvent.cs b/Assets/Runtime/IScriptableEvent.cs index 454eda4..f1ccae4 100644 --- a/Assets/Runtime/IScriptableEvent.cs +++ b/Assets/Runtime/IScriptableEvent.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; - -namespace ScriptableEvents +namespace ScriptableEvents { public interface IScriptableEvent { From 00fb067d82d6477b5cd7a11664c97ea1dd1d06ff Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 01:42:36 +0200 Subject: [PATCH 16/26] Add tests for all event and listener implementations and their attributes --- Assets/Editor/BaseScriptableEventEditor.cs | 27 +- Assets/Runtime/BaseScriptableEvent.cs | 24 +- Assets/Runtime/BaseScriptableEventListener.cs | 2 +- Assets/Runtime/IScriptableEvent.cs | 9 +- .../Simple/SimpleScriptableEventListener.cs | 5 +- .../Vector3/Vector3ScriptableEventListener.cs | 2 +- ...torUnity3Event.cs => Vector3UnityEvent.cs} | 2 +- ...vent.cs.meta => Vector3UnityEvent.cs.meta} | 0 Assets/Tests/Editor.meta | 8 + ...Chark.ScriptableEvents.Editor.Tests.asmdef | 13 + ....ScriptableEvents.Editor.Tests.asmdef.meta | 3 + .../Editor/ScriptableEventAttributeTest.cs | 54 +++ .../ScriptableEventAttributeTest.cs.meta | 3 + .../ScriptableEventAttributeTestSource.cs | 119 ++++++ ...criptableEventAttributeTestSource.cs.meta} | 2 +- Assets/Tests/Runtime/GameEventTest.cs | 403 ------------------ Assets/Tests/Runtime/GameEventTester.cs | 75 ---- .../Runtime/MockScriptableEventListener.cs | 14 + .../MockScriptableEventListener.cs.meta | 3 + Assets/Tests/Runtime/NoOpListener.cs | 9 - Assets/Tests/Runtime/NoOpListener.cs.meta | 3 - Assets/Tests/Runtime/ReflectionExtensions.cs | 36 ++ .../Runtime/ReflectionExtensions.cs.meta | 3 + Assets/Tests/Runtime/ScriptableEventTest.cs | 141 +++++- .../Runtime/ScriptableEventTestSource.cs | 95 +++++ .../Runtime/ScriptableEventTestSource.cs.meta | 3 + .../Runtime/ScriptableEventTester.cs.meta | 3 - .../Runtime/SimpleScriptableEventTest.cs | 31 ++ .../Runtime/SimpleScriptableEventTest.cs.meta | 3 + 29 files changed, 555 insertions(+), 540 deletions(-) rename Assets/Runtime/Vector3/{VectorUnity3Event.cs => Vector3UnityEvent.cs} (65%) rename Assets/Runtime/Vector3/{VectorUnity3Event.cs.meta => Vector3UnityEvent.cs.meta} (100%) create mode 100644 Assets/Tests/Editor.meta create mode 100644 Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef create mode 100644 Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta create mode 100644 Assets/Tests/Editor/ScriptableEventAttributeTest.cs create mode 100644 Assets/Tests/Editor/ScriptableEventAttributeTest.cs.meta create mode 100644 Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs rename Assets/Tests/{Runtime/GameEventTest.cs.meta => Editor/ScriptableEventAttributeTestSource.cs.meta} (83%) delete mode 100644 Assets/Tests/Runtime/GameEventTest.cs delete mode 100644 Assets/Tests/Runtime/GameEventTester.cs create mode 100644 Assets/Tests/Runtime/MockScriptableEventListener.cs create mode 100644 Assets/Tests/Runtime/MockScriptableEventListener.cs.meta delete mode 100644 Assets/Tests/Runtime/NoOpListener.cs delete mode 100644 Assets/Tests/Runtime/NoOpListener.cs.meta create mode 100644 Assets/Tests/Runtime/ReflectionExtensions.cs create mode 100644 Assets/Tests/Runtime/ReflectionExtensions.cs.meta create mode 100644 Assets/Tests/Runtime/ScriptableEventTestSource.cs create mode 100644 Assets/Tests/Runtime/ScriptableEventTestSource.cs.meta delete mode 100644 Assets/Tests/Runtime/ScriptableEventTester.cs.meta create mode 100644 Assets/Tests/Runtime/SimpleScriptableEventTest.cs create mode 100644 Assets/Tests/Runtime/SimpleScriptableEventTest.cs.meta diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Assets/Editor/BaseScriptableEventEditor.cs index 1cd8e85..763a8a1 100644 --- a/Assets/Editor/BaseScriptableEventEditor.cs +++ b/Assets/Editor/BaseScriptableEventEditor.cs @@ -1,7 +1,4 @@ -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEditor; +using UnityEditor; using UnityEngine; namespace ScriptableEvents.Editor @@ -9,13 +6,12 @@ namespace ScriptableEvents.Editor [CanEditMultipleObjects] public abstract class BaseScriptableEventEditor : UnityEditor.Editor - where TScriptableEvent : class, IScriptableEvent + where TScriptableEvent : ScriptableObject, IScriptableEvent { #region Fields private TScriptableEvent scriptableEvent; private MonoScript monoScript; - private List> listeners; // Cached properties. private SerializedProperty descriptionProperty; @@ -67,8 +63,7 @@ public abstract class BaseScriptableEventEditor public void OnEnable() { scriptableEvent = target as TScriptableEvent; - monoScript = MonoScript.FromScriptableObject(target as ScriptableObject); - listeners = FindListeners(); + monoScript = MonoScript.FromScriptableObject(scriptableEvent); descriptionProperty = serializedObject.FindProperty("description"); lockDescriptionProperty = serializedObject.FindProperty("lockDescription"); @@ -103,22 +98,16 @@ public override void OnInspectorGUI() #endregion - #region Methods + #region Overrides /// /// Value that is entered in the event argument field. /// protected abstract TArg DrawArgField(TArg value); - private List> FindListeners() - { - // Using reflection to fetch "listeners" as we don't want it to be exposed in the API. - var listenersField = typeof(BaseScriptableEvent) - .GetFields(BindingFlags.NonPublic | BindingFlags.Instance) - .First(field => field.Name == "listeners"); + #endregion - return listenersField.GetValue(target) as List>; - } + #region Methods private void DrawMonoScript() { @@ -229,7 +218,7 @@ private void DrawListeners() } // Play mode info. - if (listeners.Count == 0) + if (scriptableEvent.Listeners.Count == 0) { EditorGUILayout.HelpBox( "There are no listeners added to this event", @@ -239,7 +228,7 @@ private void DrawListeners() return; } - foreach (var listener in listeners) + foreach (var listener in scriptableEvent.Listeners) { if (listener is MonoBehaviour behaviour) { diff --git a/Assets/Runtime/BaseScriptableEvent.cs b/Assets/Runtime/BaseScriptableEvent.cs index 85450bf..2f4ce3e 100644 --- a/Assets/Runtime/BaseScriptableEvent.cs +++ b/Assets/Runtime/BaseScriptableEvent.cs @@ -41,7 +41,9 @@ private void OnDisable() #endregion - #region Methods + #region Overrides + + public IReadOnlyList> Listeners => listeners; public void Raise(TArg arg) { @@ -85,25 +87,9 @@ public void Clear() listeners.Clear(); } - /// - public static BaseScriptableEvent operator +( - BaseScriptableEvent scriptableEvent, - IScriptableEventListener scriptableEventListener - ) - { - scriptableEvent.Add(scriptableEventListener); - return scriptableEvent; - } + #endregion - /// - public static BaseScriptableEvent operator -( - BaseScriptableEvent scriptableEvent, - IScriptableEventListener scriptableEventListener - ) - { - scriptableEvent.Remove(scriptableEventListener); - return scriptableEvent; - } + #region Methods private void Trace(IScriptableEventListener listener, TArg arg) { diff --git a/Assets/Runtime/BaseScriptableEventListener.cs b/Assets/Runtime/BaseScriptableEventListener.cs index 2ab5f8d..65d17b8 100644 --- a/Assets/Runtime/BaseScriptableEventListener.cs +++ b/Assets/Runtime/BaseScriptableEventListener.cs @@ -45,7 +45,7 @@ private void OnDisable() #endregion - #region Methods + #region Overrides public void OnRaised(TArg arg) { diff --git a/Assets/Runtime/IScriptableEvent.cs b/Assets/Runtime/IScriptableEvent.cs index f1ccae4..37dd2c3 100644 --- a/Assets/Runtime/IScriptableEvent.cs +++ b/Assets/Runtime/IScriptableEvent.cs @@ -1,7 +1,14 @@ -namespace ScriptableEvents +using System.Collections.Generic; + +namespace ScriptableEvents { public interface IScriptableEvent { + /// + /// List of listeners added to this event. + /// + IReadOnlyList> Listeners { get; } + /// /// Raise this event with an argument. /// diff --git a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs index 30b6c1f..e842eee 100644 --- a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs +++ b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs @@ -1,5 +1,8 @@ -namespace ScriptableEvents.Simple +using UnityEngine; + +namespace ScriptableEvents.Simple { + [AddComponentMenu("Scriptable Events/Simple Scriptable Event Listener")] public class SimpleScriptableEventListener : BaseScriptableEventListener { diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs index e5f47e7..7a64c1d 100644 --- a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs +++ b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs @@ -6,7 +6,7 @@ namespace ScriptableEvents.Vector3 public class Vector3ScriptableEventListener : BaseScriptableEventListener< Vector3ScriptableEvent, - VectorUnity3Event, + Vector3UnityEvent, UnityEngine.Vector3 > { diff --git a/Assets/Runtime/Vector3/VectorUnity3Event.cs b/Assets/Runtime/Vector3/Vector3UnityEvent.cs similarity index 65% rename from Assets/Runtime/Vector3/VectorUnity3Event.cs rename to Assets/Runtime/Vector3/Vector3UnityEvent.cs index fa8e040..a0c35a4 100644 --- a/Assets/Runtime/Vector3/VectorUnity3Event.cs +++ b/Assets/Runtime/Vector3/Vector3UnityEvent.cs @@ -4,7 +4,7 @@ namespace ScriptableEvents.Vector3 { [Serializable] - public class VectorUnity3Event : UnityEvent + public class Vector3UnityEvent : UnityEvent { } } diff --git a/Assets/Runtime/Vector3/VectorUnity3Event.cs.meta b/Assets/Runtime/Vector3/Vector3UnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector3/VectorUnity3Event.cs.meta rename to Assets/Runtime/Vector3/Vector3UnityEvent.cs.meta diff --git a/Assets/Tests/Editor.meta b/Assets/Tests/Editor.meta new file mode 100644 index 0000000..b0342b2 --- /dev/null +++ b/Assets/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 210cefc4ade5410aa5e1b1bd69ab9117 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef b/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef new file mode 100644 index 0000000..181063a --- /dev/null +++ b/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef @@ -0,0 +1,13 @@ +{ + "name": "Chark.ScriptableEvents.Editor.Tests", + "references": [ + "Chark.ScriptableEvents", + "Chark.ScriptableEvents.Editor" + ], + "includePlatforms": [ + "Editor" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ] +} diff --git a/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta b/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta new file mode 100644 index 0000000..3a93ec1 --- /dev/null +++ b/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 615be4064e9e4487b1de6bca3ddbbb78 +timeCreated: 1611441796 \ No newline at end of file diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTest.cs b/Assets/Tests/Editor/ScriptableEventAttributeTest.cs new file mode 100644 index 0000000..8674a3a --- /dev/null +++ b/Assets/Tests/Editor/ScriptableEventAttributeTest.cs @@ -0,0 +1,54 @@ +using System; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; + +namespace ScriptableEvents.Editor.Tests +{ + [TestFixtureSource(typeof(ScriptableEventAttributeTestSource))] + public class ScriptableEventAttributeTest + { + private readonly Type eventType; + private readonly Type listenerType; + + private readonly string eventFileName; + private readonly string eventMenuName; + private readonly string listenerMenuName; + + public ScriptableEventAttributeTest( + Type eventType, + Type listenerType, + string eventFileName, + string eventMenuName, + string listenerMenuName + ) + { + this.eventType = eventType; + this.listenerType = listenerType; + this.eventFileName = eventFileName; + this.eventMenuName = eventMenuName; + this.listenerMenuName = listenerMenuName; + } + + [Test] + public void ShouldMatchEventAttributeValues() + { + var eventMenuAttribute = GetAttribute(eventType); + Assert.AreEqual(eventFileName, eventMenuAttribute.fileName); + Assert.AreEqual(eventMenuName, eventMenuAttribute.menuName); + } + + [Test] + public void ShouldMatchListenerAttributeValues() + { + var listenerMenuAttribute = GetAttribute(listenerType); + Assert.AreEqual(listenerMenuName, listenerMenuAttribute.componentMenu); + } + + private static TAttribute GetAttribute(MemberInfo type) + where TAttribute : Attribute + { + return (TAttribute) type.GetCustomAttribute(typeof(TAttribute)); + } + } +} diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTest.cs.meta b/Assets/Tests/Editor/ScriptableEventAttributeTest.cs.meta new file mode 100644 index 0000000..4f258c5 --- /dev/null +++ b/Assets/Tests/Editor/ScriptableEventAttributeTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 13e0bf5f226f4e97a5dcaa290ca66394 +timeCreated: 1611441959 \ No newline at end of file diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs b/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs new file mode 100644 index 0000000..0f33b0b --- /dev/null +++ b/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs @@ -0,0 +1,119 @@ +using System.Collections; +using ScriptableEvents.Bool; +using ScriptableEvents.Float; +using ScriptableEvents.GameObject; +using ScriptableEvents.Int; +using ScriptableEvents.Simple; +using ScriptableEvents.String; +using ScriptableEvents.Transform; +using ScriptableEvents.Vector2; +using ScriptableEvents.Vector3; + +namespace ScriptableEvents.Editor.Tests +{ + public class ScriptableEventAttributeTestSource : IEnumerable + { + public IEnumerator GetEnumerator() + { + yield return CreateTestCase< + BoolScriptableEvent, + BoolScriptableEventListener + >( + "BoolScriptableEvent", + "Scriptable Events/Bool Scriptable Event", + "Scriptable Events/Bool Scriptable Event Listener" + ); + + yield return CreateTestCase< + FloatScriptableEvent, + FloatScriptableEventListener + >( + "FloatScriptableEvent", + "Scriptable Events/Float Scriptable Event", + "Scriptable Events/Float Scriptable Event Listener" + ); + + yield return CreateTestCase< + GameObjectScriptableEvent, + GameObjectScriptableEventListener + >( + "GameObjectScriptableEvent", + "Scriptable Events/Game Object Scriptable Event", + "Scriptable Events/Game Object Scriptable Event Listener" + ); + + yield return CreateTestCase< + IntScriptableEvent, + IntScriptableEventListener + >( + "IntScriptableEvent", + "Scriptable Events/Int Scriptable Event", + "Scriptable Events/Int Scriptable Event Listener" + ); + + yield return CreateTestCase< + SimpleScriptableEvent, + SimpleScriptableEventListener + >( + "SimpleScriptableEvent", + "Scriptable Events/Simple Scriptable Event", + "Scriptable Events/Simple Scriptable Event Listener" + ); + + yield return CreateTestCase< + StringScriptableEvent, + StringScriptableEventListener + >( + "StringScriptableEvent", + "Scriptable Events/String Scriptable Event", + "Scriptable Events/String Scriptable Event Listener" + ); + + yield return CreateTestCase< + TransformScriptableEvent, + TransformScriptableEventListener + >( + "TransformScriptableEvent", + "Scriptable Events/Transform Scriptable Event", + "Scriptable Events/Transform Scriptable Event Listener" + ); + + yield return CreateTestCase< + Vector2ScriptableEvent, + Vector2ScriptableEventListener + >( + "Vector2ScriptableEvent", + "Scriptable Events/Vector2 Scriptable Event", + "Scriptable Events/Vector2 Scriptable Event Listener" + ); + + yield return CreateTestCase< + Vector3ScriptableEvent, + Vector3ScriptableEventListener + >( + "Vector3ScriptableEvent", + "Scriptable Events/Vector3 Scriptable Event", + "Scriptable Events/Vector3 Scriptable Event Listener" + ); + } + + private static object[] CreateTestCase< + TScriptableEvent, + TScriptableEventListener + >( + string eventFileName, + string eventMenuName, + string listenerMenuName + ) + { + return new object[] + { + typeof(TScriptableEvent), + typeof(TScriptableEventListener), + eventFileName, + eventMenuName, + listenerMenuName + }; + } + } +} diff --git a/Assets/Tests/Runtime/GameEventTest.cs.meta b/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta similarity index 83% rename from Assets/Tests/Runtime/GameEventTest.cs.meta rename to Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta index eac25f0..e6ad066 100644 --- a/Assets/Tests/Runtime/GameEventTest.cs.meta +++ b/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b06e9491a735a449929c497259358bb +guid: fcdd45780f4445de98bc82ee46433efb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Tests/Runtime/GameEventTest.cs b/Assets/Tests/Runtime/GameEventTest.cs deleted file mode 100644 index e0ea086..0000000 --- a/Assets/Tests/Runtime/GameEventTest.cs +++ /dev/null @@ -1,403 +0,0 @@ -using System.Linq; -using ScriptableEvents.Bool; -using ScriptableEvents.Float; -using ScriptableEvents.GameObject; -using ScriptableEvents.Int; -using ScriptableEvents.Simple; -using ScriptableEvents.String; -using ScriptableEvents.Transform; -using ScriptableEvents.Vector2; -using ScriptableEvents.Vector3; -using NUnit.Framework; -using UnityEngine; -using Assert = UnityEngine.Assertions.Assert; - -// todo: look over tests, use parametrized -namespace ScriptableEvents.Tests -{ - public class ScriptableEventTest - { - [Test] - public void ShouldRaiseBoolScriptableEvent() - { - var tester = new ScriptableEventTester< - BoolScriptableEventListener, - BoolScriptableEvent, - BoolUnityEvent, - bool - >(); - - tester.SetActive(true); - tester.RaiseScriptableEvent(true); - - Assert.AreEqual(true, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(true); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterBoolScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseFloatScriptableEvent() - { - var tester = new ScriptableEventTester< - FloatScriptableEventListener, - FloatScriptableEvent, - FloatUnityEvent, - float - >(); - - tester.SetActive(true); - tester.RaiseScriptableEvent(10f); - - Assert.AreEqual(10f, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(10f); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterFloatScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - // [Test] - // public void ShouldRaiseScriptableEventEvent() - // { - // // Given. - // var gameObject = new UnityEngine.GameObject(); - // gameObject.SetActive(false); - // - // var listener = gameObject.AddComponent(); - // - // listener.OnScriptableEvent = new UnityEvent(); - // listener.ScriptableEvent = ScriptableObject.CreateInstance(); - // - // var count = new int[1]; - // listener.OnScriptableEvent.AddListener(() => count[0]++); - // - // // Then. - // gameObject.SetActive(true); - // listener.ScriptableEvent.RaiseScriptableEvent(); - // - // Assert.AreEqual(1, count[0]); - // count[0] = 0; - // - // gameObject.SetActive(false); - // listener.ScriptableEvent.RaiseScriptableEvent(); - // - // Assert.AreEqual(0, count[0]); - // } - // - // - // [Test] - // public void ShouldNotBreakChainWhenExceptionIsThrown() - // { - // // Given. - // var gameObject = new UnityEngine.GameObject(); - // gameObject.SetActive(false); - // - // var listenerWithError = gameObject.AddComponent(); - // var listener = gameObject.AddComponent(); - // - // listenerWithError.OnScriptableEvent = new UnityEvent(); - // listenerWithError.ScriptableEvent = ScriptableObject.CreateInstance(); - // - // listener.OnScriptableEvent = new UnityEvent(); - // listener.ScriptableEvent = listenerWithError.ScriptableEvent; - // - // var count = new int[1]; - // listenerWithError.OnScriptableEvent.AddListener(() => throw new NullReferenceException()); - // listener.OnScriptableEvent.AddListener(() => count[0]++); - // - // // Then. - // gameObject.SetActive(true); - // listener.ScriptableEvent.RaiseScriptableEvent(); - // - // Assert.AreEqual(1, count[0]); - // count[0] = 0; - // - // gameObject.SetActive(false); - // listener.ScriptableEvent.RaiseScriptableEvent(); - // - // Assert.AreEqual(0, count[0]); - // } - - [Test] - public void ShouldRegisterAndUnregisterGameObjectScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseGameObjectScriptableEventListener() - { - var tester = new ScriptableEventTester< - GameObjectScriptableEventListener, - GameObjectScriptableEvent, - GameObjectUnityEvent, - UnityEngine.GameObject - >(); - - tester.SetActive(true); - - var gameObject = new UnityEngine.GameObject(); - tester.RaiseScriptableEvent(gameObject); - - Assert.AreEqual(gameObject, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(gameObject); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseIntScriptableEventListener() - { - var tester = new ScriptableEventTester< - IntScriptableEventListener, - IntScriptableEvent, - IntUnityEvent, - int - >(); - - tester.SetActive(true); - tester.RaiseScriptableEvent(10); - - Assert.AreEqual(10, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(10); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterIntScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseStringScriptableEventListener() - { - var tester = new ScriptableEventTester< - StringScriptableEventListener, - StringScriptableEvent, - StringUnityEvent, - string - >(); - - tester.SetActive(true); - tester.RaiseScriptableEvent("foo"); - - Assert.AreEqual("foo", tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent("foo"); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterStringScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseTransformScriptableEventListener() - { - var tester = new ScriptableEventTester< - TransformScriptableEventListener, - TransformScriptableEvent, - TransformUnityEvent, - UnityEngine.Transform - >(); - - tester.SetActive(true); - - var gameObject = new UnityEngine.GameObject(); - tester.RaiseScriptableEvent(gameObject.transform); - - Assert.AreEqual(gameObject.transform, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(gameObject.transform); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterTransformScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseVector2EventListener() - { - var tester = new ScriptableEventTester< - Vector2ScriptableEventListener, - Vector2ScriptableEvent, - Vector2UnityEvent, - UnityEngine.Vector2 - >(); - - tester.SetActive(true); - tester.RaiseScriptableEvent(UnityEngine.Vector2.one); - - Assert.AreEqual(UnityEngine.Vector2.one, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(UnityEngine.Vector2.one); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterVector2ScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRaiseVector3EventListener() - { - var tester = new ScriptableEventTester< - Vector3ScriptableEventListener, - Vector3ScriptableEvent, - VectorUnity3Event, - UnityEngine.Vector3 - >(); - - tester.SetActive(true); - tester.RaiseScriptableEvent(UnityEngine.Vector3.one); - - Assert.AreEqual(UnityEngine.Vector3.one, tester.GetLastEventValue()); - Assert.AreEqual(1, tester.GetEventCount()); - tester.Clear(); - - tester.SetActive(false); - tester.RaiseScriptableEvent(UnityEngine.Vector3.one); - - Assert.AreEqual(0, tester.GetEventCount()); - } - - [Test] - public void ShouldRegisterAndUnregisterVector3ScriptableEventListener() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var listener = new NoOpListener(); - - ScriptableEvent.Add(listener); - Assert.AreEqual(1, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(listener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - - [Test] - public void ShouldRegisterAndUnregisterScriptableEventMultipleListeners() - { - var ScriptableEvent = ScriptableObject.CreateInstance(); - var firstListener = new NoOpListener(); - var secondListener = new NoOpListener(); - - ScriptableEvent.Add(firstListener); - ScriptableEvent.Add(secondListener); - Assert.AreEqual(2, ScriptableEvent.Listeners.Count()); - - ScriptableEvent.Remove(firstListener); - ScriptableEvent.Remove(secondListener); - Assert.AreEqual(0, ScriptableEvent.Listeners.Count()); - } - } -} diff --git a/Assets/Tests/Runtime/GameEventTester.cs b/Assets/Tests/Runtime/GameEventTester.cs deleted file mode 100644 index a38df5f..0000000 --- a/Assets/Tests/Runtime/GameEventTester.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.Events; - -namespace ScriptableEvents.Tests -{ - public class ScriptableEventTester< - TScriptableEventListener, - TScriptableEvent, - TUnityEvent, - TArgument - > - where TScriptableEvent : BaseScriptableEvent - where TUnityEvent : UnityEvent, new() - where TScriptableEventListener : BaseScriptableEventListener< - TScriptableEvent, - TUnityEvent, - TArgument - > - { - private readonly List eventValues; - private readonly UnityEngine.GameObject gameObject; - private readonly TScriptableEvent ScriptableEvent; - - public ScriptableEventTester() - { - eventValues = new List(); - - gameObject = new UnityEngine.GameObject(); - gameObject.SetActive(false); - - var onScriptableEvent = new TUnityEvent(); - onScriptableEvent.AddListener(AddEventValue); - - ScriptableEvent = ScriptableObject.CreateInstance(); - - var listener = gameObject.AddComponent(); - - // todo: do we need these in the API as its only for tests atm? - // listener.OnScriptableEvent = onScriptableEvent; - // listener.ScriptableEvent = ScriptableEvent; - } - - public int GetEventCount() - { - return eventValues.Count; - } - - public TArgument GetLastEventValue() - { - return eventValues.Last(); - } - - public void Clear() - { - eventValues.Clear(); - } - - public void SetActive(bool value) - { - gameObject.SetActive(value); - } - - public void RaiseScriptableEvent(TArgument argument) - { - ScriptableEvent.Raise(argument); - } - - private void AddEventValue(TArgument value) - { - eventValues.Add(value); - } - } -} diff --git a/Assets/Tests/Runtime/MockScriptableEventListener.cs b/Assets/Tests/Runtime/MockScriptableEventListener.cs new file mode 100644 index 0000000..ca9f3ca --- /dev/null +++ b/Assets/Tests/Runtime/MockScriptableEventListener.cs @@ -0,0 +1,14 @@ +using System; + +namespace ScriptableEvents.Tests +{ + public class MockScriptableEventListener : IScriptableEventListener + { + public Action Action { get; set; } + + public void OnRaised(TArg arg) + { + Action?.Invoke(arg); + } + } +} diff --git a/Assets/Tests/Runtime/MockScriptableEventListener.cs.meta b/Assets/Tests/Runtime/MockScriptableEventListener.cs.meta new file mode 100644 index 0000000..908082e --- /dev/null +++ b/Assets/Tests/Runtime/MockScriptableEventListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9842077435ff46a898175b8ad3da81df +timeCreated: 1611438003 \ No newline at end of file diff --git a/Assets/Tests/Runtime/NoOpListener.cs b/Assets/Tests/Runtime/NoOpListener.cs deleted file mode 100644 index 6f105fc..0000000 --- a/Assets/Tests/Runtime/NoOpListener.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ScriptableEvents.Tests -{ - public class NoOpListener : IScriptableEventListener - { - public void OnRaised(TArg arg) - { - } - } -} diff --git a/Assets/Tests/Runtime/NoOpListener.cs.meta b/Assets/Tests/Runtime/NoOpListener.cs.meta deleted file mode 100644 index 2094a6f..0000000 --- a/Assets/Tests/Runtime/NoOpListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: da0499c8d9fd4fe5bc285b67c1db4a62 -timeCreated: 1602360947 \ No newline at end of file diff --git a/Assets/Tests/Runtime/ReflectionExtensions.cs b/Assets/Tests/Runtime/ReflectionExtensions.cs new file mode 100644 index 0000000..321332b --- /dev/null +++ b/Assets/Tests/Runtime/ReflectionExtensions.cs @@ -0,0 +1,36 @@ +using System.Reflection; + +namespace ScriptableEvents.Tests +{ + public static class TestExtensions + { + private const BindingFlags Flags = BindingFlags.Instance + | BindingFlags.NonPublic + | BindingFlags.DeclaredOnly; + + /// + /// Set private field value with give name on this object. + /// + public static void SetField(this object obj, string name, object value) + { + var field = obj.GetField(name); + field.SetValue(obj, value); + } + + /// + /// Private field from this this with given name. + /// + public static FieldInfo GetField(this object obj, string name) + { + var type = obj.GetType(); + + FieldInfo info; + do + { + info = type.GetField(name, Flags); + } while (info == null && (type = type.BaseType) != null); + + return info; + } + } +} diff --git a/Assets/Tests/Runtime/ReflectionExtensions.cs.meta b/Assets/Tests/Runtime/ReflectionExtensions.cs.meta new file mode 100644 index 0000000..b77d2bd --- /dev/null +++ b/Assets/Tests/Runtime/ReflectionExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1fe75f7c383b466693b98cef1b66c887 +timeCreated: 1611421081 \ No newline at end of file diff --git a/Assets/Tests/Runtime/ScriptableEventTest.cs b/Assets/Tests/Runtime/ScriptableEventTest.cs index 37f1a58..6fc2d6c 100644 --- a/Assets/Tests/Runtime/ScriptableEventTest.cs +++ b/Assets/Tests/Runtime/ScriptableEventTest.cs @@ -1,7 +1,142 @@ -namespace ScriptableEvents.Tests +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.TestTools; + +namespace ScriptableEvents.Tests { - public class ScriptableEventTests + [TestFixtureSource(typeof(ScriptableEventTestSource))] + public class ScriptableEventTest< + TScriptableEvent, + TScriptableEventListener, + TUnityEvent, + TArg + > + where TScriptableEvent : ScriptableObject, IScriptableEvent + where TScriptableEventListener : Component, IScriptableEventListener + where TUnityEvent : UnityEvent, new() { - + #region Fields + + private readonly TArg arg; + + private List capturedArgs; + private TScriptableEvent scriptableEvent; + private TUnityEvent unityEvent; + private TScriptableEventListener scriptableEventListener; + + #endregion + + #region Methods + + public ScriptableEventTest(TArg arg) + { + this.arg = arg; + } + + [SetUp] + public void SetUp() + { + SetupRaisedArgs(); + SetupScriptableEvent(); + SetupUnityEvent(); + SetupScriptableEventListener(); + } + + [Test] + public void ShouldGetListeners() + { + var listeners = scriptableEvent.Listeners; + + // By default one listener is added in this test. + Assert.AreEqual(1, listeners.Count); + Assert.AreEqual(scriptableEventListener, listeners.First()); + } + + [Test] + public void ShouldRaiseEvent() + { + scriptableEvent.Raise(arg); + + Assert.AreEqual(1, capturedArgs.Count); + Assert.AreEqual(arg, capturedArgs.First()); + } + + [Test] + public void ShouldRaiseEventAndContinueListenerChain() + { + LogAssert.ignoreFailingMessages = true; + + scriptableEvent.SetField("suppressExceptions", true); + scriptableEvent.Add(new MockScriptableEventListener + { + Action = capturedArg => throw new Exception() + }); + + scriptableEvent.Raise(arg); + + Assert.AreEqual(1, capturedArgs.Count); + } + + [Test] + public void ShouldAddListenerTwiceAndRaiseEventOnce() + { + scriptableEvent.Add(scriptableEventListener); + scriptableEvent.Raise(arg); + + Assert.AreEqual(1, capturedArgs.Count); + } + + [Test] + public void ShouldRemoveListenerAndRaiseEvent() + { + scriptableEvent.Remove(scriptableEventListener); + scriptableEvent.Raise(arg); + + Assert.AreEqual(0, capturedArgs.Count); + } + + [Test] + public void ShouldClearAndRaiseEvent() + { + scriptableEvent.Clear(); + scriptableEvent.Raise(arg); + + Assert.AreEqual(0, capturedArgs.Count); + } + + private void SetupRaisedArgs() + { + capturedArgs = new List(); + } + + private void SetupScriptableEvent() + { + scriptableEvent = ScriptableObject.CreateInstance(); + } + + private void SetupUnityEvent() + { + unityEvent = new TUnityEvent(); + unityEvent.AddListener(capturedArgs.Add); + } + + private void SetupScriptableEventListener() + { + var gameObject = new UnityEngine.GameObject(); + gameObject.SetActive(false); + + scriptableEventListener = gameObject.AddComponent(); + scriptableEventListener.SetField("scriptableEvent", scriptableEvent); + scriptableEventListener.SetField("onRaised", unityEvent); + + // Add listener by triggering OnEnabled. + gameObject.SetActive(true); + } + + #endregion } } diff --git a/Assets/Tests/Runtime/ScriptableEventTestSource.cs b/Assets/Tests/Runtime/ScriptableEventTestSource.cs new file mode 100644 index 0000000..e11de2e --- /dev/null +++ b/Assets/Tests/Runtime/ScriptableEventTestSource.cs @@ -0,0 +1,95 @@ +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.Internal; +using ScriptableEvents.Bool; +using ScriptableEvents.Float; +using ScriptableEvents.GameObject; +using ScriptableEvents.Int; +using ScriptableEvents.Simple; +using ScriptableEvents.String; +using ScriptableEvents.Transform; +using ScriptableEvents.Vector2; +using ScriptableEvents.Vector3; + +namespace ScriptableEvents.Tests +{ + public class ScriptableEventTestSource : IEnumerable + { + public IEnumerator GetEnumerator() + { + yield return CreateTestCase< + BoolScriptableEvent, + BoolScriptableEventListener, + BoolUnityEvent + >(true); + + yield return CreateTestCase< + FloatScriptableEvent, + FloatScriptableEventListener, + FloatUnityEvent + >(1.0f); + + yield return CreateTestCase< + GameObjectScriptableEvent, + GameObjectScriptableEventListener, + GameObjectUnityEvent + >(new UnityEngine.GameObject()); + + yield return CreateTestCase< + IntScriptableEvent, + IntScriptableEventListener, + IntUnityEvent + >(1); + + yield return CreateTestCase< + SimpleScriptableEvent, + SimpleScriptableEventListener, + SimpleUnityEvent + >(SimpleArg.Instance); + + yield return CreateTestCase< + StringScriptableEvent, + StringScriptableEventListener, + StringUnityEvent + >("hello"); + + yield return CreateTestCase< + TransformScriptableEvent, + TransformScriptableEventListener, + TransformUnityEvent + >(new UnityEngine.GameObject().transform); + + yield return CreateTestCase< + Vector2ScriptableEvent, + Vector2ScriptableEventListener, + Vector2UnityEvent + >(UnityEngine.Vector2.one); + + yield return CreateTestCase< + Vector3ScriptableEvent, + Vector3ScriptableEventListener, + Vector3UnityEvent + >(UnityEngine.Vector3.one); + } + + private static TestFixtureParameters CreateTestCase< + TScriptableEvent, + TScriptableEventListener, + TUnityEvent + >(object arg) + { + var attribute = new TestFixtureAttribute(arg) + { + TypeArgs = new[] + { + typeof(TScriptableEvent), + typeof(TScriptableEventListener), + typeof(TUnityEvent), + arg.GetType() + } + }; + + return new TestFixtureParameters(attribute); + } + } +} diff --git a/Assets/Tests/Runtime/ScriptableEventTestSource.cs.meta b/Assets/Tests/Runtime/ScriptableEventTestSource.cs.meta new file mode 100644 index 0000000..52c34a1 --- /dev/null +++ b/Assets/Tests/Runtime/ScriptableEventTestSource.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d9d62e2b5a72460483706b5b707a7de4 +timeCreated: 1611419836 \ No newline at end of file diff --git a/Assets/Tests/Runtime/ScriptableEventTester.cs.meta b/Assets/Tests/Runtime/ScriptableEventTester.cs.meta deleted file mode 100644 index e121f8f..0000000 --- a/Assets/Tests/Runtime/ScriptableEventTester.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 44be42e5d31f47c5a3e0073e8f8c13a9 -timeCreated: 1602013695 \ No newline at end of file diff --git a/Assets/Tests/Runtime/SimpleScriptableEventTest.cs b/Assets/Tests/Runtime/SimpleScriptableEventTest.cs new file mode 100644 index 0000000..97a9242 --- /dev/null +++ b/Assets/Tests/Runtime/SimpleScriptableEventTest.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using ScriptableEvents.Simple; +using UnityEngine; + +namespace ScriptableEvents.Tests +{ + [TestFixture] + public class SimpleScriptableEventTest + { + // Requires additional test case as SimpleScriptableEvent introduces a new method. + [Test] + public void ShouldRaiseEventWithoutArgument() + { + var capturedArgs = new List(); + var mockScriptableEventListener = new MockScriptableEventListener + { + Action = capturedArgs.Add + }; + + var simpleScriptableEvent = ScriptableObject.CreateInstance(); + simpleScriptableEvent.Add(mockScriptableEventListener); + + simpleScriptableEvent.Raise(); + + Assert.AreEqual(1, capturedArgs.Count); + Assert.AreEqual(SimpleArg.Instance, capturedArgs.First()); + } + } +} diff --git a/Assets/Tests/Runtime/SimpleScriptableEventTest.cs.meta b/Assets/Tests/Runtime/SimpleScriptableEventTest.cs.meta new file mode 100644 index 0000000..44883dd --- /dev/null +++ b/Assets/Tests/Runtime/SimpleScriptableEventTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0de27fa351484c83ad39fcd1c746e3ce +timeCreated: 1611441400 \ No newline at end of file From d8d4f03a99c75c6d4a900a082f8823b306fe9ea1 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 11:21:50 +0200 Subject: [PATCH 17/26] Update Unity version --- Packages/manifest.json | 4 ++-- Packages/packages-lock.json | 8 ++++---- ProjectSettings/PackageManagerSettings.asset | 4 ++-- ProjectSettings/ProjectVersion.txt | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Packages/manifest.json b/Packages/manifest.json index e73e2cc..527215b 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,10 +1,10 @@ { "dependencies": { "com.unity.ide.rider": "1.1.4", - "com.unity.ide.vscode": "1.2.1", + "com.unity.ide.vscode": "1.2.3", "com.unity.package-validation-suite": "0.19.2-preview", "com.unity.render-pipelines.universal": "7.3.1", - "com.unity.test-framework": "1.1.16", + "com.unity.test-framework": "1.1.20", "com.unity.ugui": "1.0.0", "com.unity.modules.assetbundle": "1.0.0", "com.unity.modules.audio": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 298851b..2b7a697 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,7 +1,7 @@ { "dependencies": { "com.unity.ext.nunit": { - "version": "1.0.0", + "version": "1.0.6", "depth": 1, "source": "registry", "dependencies": {}, @@ -17,7 +17,7 @@ "url": "https://packages.unity.com" }, "com.unity.ide.vscode": { - "version": "1.2.1", + "version": "1.2.3", "depth": 0, "source": "registry", "dependencies": {}, @@ -70,11 +70,11 @@ "url": "https://packages.unity.com" }, "com.unity.test-framework": { - "version": "1.1.16", + "version": "1.1.20", "depth": 0, "source": "registry", "dependencies": { - "com.unity.ext.nunit": "1.0.0", + "com.unity.ext.nunit": "1.0.6", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset index 9418901..6920e3a 100644 --- a/ProjectSettings/PackageManagerSettings.asset +++ b/ProjectSettings/PackageManagerSettings.asset @@ -9,9 +9,9 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 0} + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} m_Name: - m_EditorClassIdentifier: UnityEditor:UnityEditor.PackageManager.UI:PackageManagerProjectSettings + m_EditorClassIdentifier: m_ScopedRegistriesSettingsExpanded: 1 oneTimeWarningShown: 0 m_Registries: diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index ae9c8eb..d8ee6b5 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.4.12f1 -m_EditorVersionWithRevision: 2019.4.12f1 (225e826a680e) +m_EditorVersion: 2019.4.18f1 +m_EditorVersionWithRevision: 2019.4.18f1 (3310a4d4f880) From 9f5301c93c7d57a8b9beb97a1cd86165ff26ef60 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 11:25:00 +0200 Subject: [PATCH 18/26] Remove universal RP --- .../UniversalRenderPipelineAsset.asset | 55 ------------------- .../UniversalRenderPipelineAsset.asset.meta | 8 --- ...niversalRenderPipelineAsset_Renderer.asset | 38 ------------- ...salRenderPipelineAsset_Renderer.asset.meta | 8 --- Packages/manifest.json | 1 - Packages/packages-lock.json | 28 ---------- 6 files changed, 138 deletions(-) delete mode 100644 Assets/Samples/Settings/UniversalRenderPipelineAsset.asset delete mode 100644 Assets/Samples/Settings/UniversalRenderPipelineAsset.asset.meta delete mode 100644 Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset delete mode 100644 Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset.meta diff --git a/Assets/Samples/Settings/UniversalRenderPipelineAsset.asset b/Assets/Samples/Settings/UniversalRenderPipelineAsset.asset deleted file mode 100644 index 69cb92c..0000000 --- a/Assets/Samples/Settings/UniversalRenderPipelineAsset.asset +++ /dev/null @@ -1,55 +0,0 @@ -%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: bf2edee5c58d82540a51f03df9d42094, type: 3} - m_Name: UniversalRenderPipelineAsset - m_EditorClassIdentifier: - k_AssetVersion: 5 - k_AssetPreviousVersion: 5 - m_RendererType: 1 - m_RendererData: {fileID: 0} - m_RendererDataList: - - {fileID: 11400000, guid: 456bfeb11c07b004a81755a6d5eb9b33, type: 2} - m_DefaultRendererIndex: 0 - m_RequireDepthTexture: 0 - m_RequireOpaqueTexture: 0 - m_OpaqueDownsampling: 1 - m_SupportsTerrainHoles: 1 - m_SupportsHDR: 1 - m_MSAA: 8 - m_RenderScale: 1 - m_MainLightRenderingMode: 1 - m_MainLightShadowsSupported: 1 - m_MainLightShadowmapResolution: 2048 - m_AdditionalLightsRenderingMode: 2 - m_AdditionalLightsPerObjectLimit: 4 - m_AdditionalLightShadowsSupported: 0 - m_AdditionalLightsShadowmapResolution: 512 - m_ShadowDistance: 20 - m_ShadowCascades: 0 - m_Cascade2Split: 0.25 - m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} - m_ShadowDepthBias: 1 - m_ShadowNormalBias: 1 - m_SoftShadowsSupported: 1 - m_UseSRPBatcher: 1 - m_SupportsDynamicBatching: 0 - m_MixedLightingSupported: 1 - m_DebugLevel: 0 - m_PostProcessingFeatureSet: 0 - m_ColorGradingMode: 1 - m_ColorGradingLutSize: 32 - m_ShadowType: 1 - m_LocalShadowsSupported: 0 - m_LocalShadowsAtlasResolution: 256 - m_MaxPixelLights: 0 - m_ShadowAtlasResolution: 256 - m_ShaderVariantLogLevel: 0 diff --git a/Assets/Samples/Settings/UniversalRenderPipelineAsset.asset.meta b/Assets/Samples/Settings/UniversalRenderPipelineAsset.asset.meta deleted file mode 100644 index 5010197..0000000 --- a/Assets/Samples/Settings/UniversalRenderPipelineAsset.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4cc95e0ffb4cb5b41a626555d36a9b76 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset b/Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset deleted file mode 100644 index 808b47c..0000000 --- a/Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset +++ /dev/null @@ -1,38 +0,0 @@ -%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: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} - m_Name: UniversalRenderPipelineAsset_Renderer - m_EditorClassIdentifier: - m_RendererFeatures: [] - m_RendererFeatureMap: - postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} - shaders: - blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} - copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} - screenSpaceShadowPS: {fileID: 4800000, guid: 0f854b35a0cf61a429bd5dcfea30eddd, - type: 3} - samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} - fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} - m_OpaqueLayerMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_TransparentLayerMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_DefaultStencilState: - overrideStencilState: 0 - stencilReference: 0 - stencilCompareFunction: 8 - passOperation: 0 - failOperation: 0 - zFailOperation: 0 - m_ShadowTransparentReceive: 1 diff --git a/Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset.meta b/Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset.meta deleted file mode 100644 index db44d0d..0000000 --- a/Assets/Samples/Settings/UniversalRenderPipelineAsset_Renderer.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 456bfeb11c07b004a81755a6d5eb9b33 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 527215b..ddd1fdf 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -3,7 +3,6 @@ "com.unity.ide.rider": "1.1.4", "com.unity.ide.vscode": "1.2.3", "com.unity.package-validation-suite": "0.19.2-preview", - "com.unity.render-pipelines.universal": "7.3.1", "com.unity.test-framework": "1.1.20", "com.unity.ugui": "1.0.0", "com.unity.modules.assetbundle": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 2b7a697..21efacf 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -41,34 +41,6 @@ }, "url": "https://packages.unity.com" }, - "com.unity.render-pipelines.core": { - "version": "7.3.1", - "depth": 1, - "source": "registry", - "dependencies": { - "com.unity.ugui": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.render-pipelines.universal": { - "version": "7.3.1", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.render-pipelines.core": "7.3.1", - "com.unity.shadergraph": "7.3.1" - }, - "url": "https://packages.unity.com" - }, - "com.unity.shadergraph": { - "version": "7.3.1", - "depth": 1, - "source": "registry", - "dependencies": { - "com.unity.render-pipelines.core": "7.3.1" - }, - "url": "https://packages.unity.com" - }, "com.unity.test-framework": { "version": "1.1.20", "depth": 0, From d99654d2a8c05c00c70d30a6af8751361083aead Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 12:01:56 +0200 Subject: [PATCH 19/26] Simplify editor API --- Assets/Editor/BaseScriptableEventEditor.cs | 93 ++++++++++--------- Assets/Editor/BoolScriptableEventEditor.cs | 2 +- Assets/Editor/FloatScriptableEventEditor.cs | 2 +- .../Editor/GameObjectScriptableEventEditor.cs | 3 +- Assets/Editor/IntScriptableEventEditor.cs | 2 +- Assets/Editor/SimpleScriptableEventEditor.cs | 3 +- Assets/Editor/StringScriptableEventEditor.cs | 3 +- .../Editor/TransformScriptableEventEditor.cs | 3 +- Assets/Editor/Vector2ScriptableEventEditor.cs | 3 +- Assets/Editor/Vector3ScriptableEventEditor.cs | 3 +- Assets/Runtime/BaseScriptableEvent.cs | 7 +- Assets/Tests/Runtime/ReflectionExtensions.cs | 7 +- 12 files changed, 67 insertions(+), 64 deletions(-) diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Assets/Editor/BaseScriptableEventEditor.cs index 763a8a1..b9ee7d9 100644 --- a/Assets/Editor/BaseScriptableEventEditor.cs +++ b/Assets/Editor/BaseScriptableEventEditor.cs @@ -1,16 +1,28 @@ -using UnityEditor; +using System.Reflection; +using UnityEditor; using UnityEngine; +using Object = UnityEngine.Object; namespace ScriptableEvents.Editor { [CanEditMultipleObjects] - public abstract class BaseScriptableEventEditor - : UnityEditor.Editor - where TScriptableEvent : ScriptableObject, IScriptableEvent + public abstract class BaseScriptableEventEditor : UnityEditor.Editor { #region Fields - private TScriptableEvent scriptableEvent; + // Reflection. + private const BindingFlags PrivateFieldBindingFlags = + BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; + + // Labels. + private GUIContent descriptionLabelContent; + private GUIContent suppressExceptionsLabelContent; + private GUIContent traceLabelContent; + private GUIContent raiseLabelContent; + private GUIContent listenerLabelContent; + + // Target properties. + private BaseScriptableEvent scriptableEvent; private MonoScript monoScript; // Cached properties. @@ -24,36 +36,6 @@ public abstract class BaseScriptableEventEditor private GUIStyle descriptionStyle; private float descriptionWidth; - // ReSharper disable once StaticMemberInGenericType - private static readonly GUIContent DescriptionLabelContent = new GUIContent( - "Description", - "Custom description to provide more additional information" - ); - - // ReSharper disable once StaticMemberInGenericType - private static readonly GUIContent SuppressExceptionsLabelContent = new GUIContent( - "Suppress Exceptions", - "Should exceptions not break the listener chain" - ); - - // ReSharper disable once StaticMemberInGenericType - private static readonly GUIContent TraceLabelContent = new GUIContent( - "Trace", - "Should additional trace information be logged" - ); - - // ReSharper disable once StaticMemberInGenericType - private static readonly GUIContent RaiseLabelContent = new GUIContent( - "Raise event", - "Raise event and trigger added listeners (play mode only)" - ); - - // ReSharper disable once StaticMemberInGenericType - private static readonly GUIContent ListenerLabelContent = new GUIContent( - "Added listeners", - "Added listeners to this event (play mode only)" - ); - private TArg argValue; #endregion @@ -62,7 +44,19 @@ public abstract class BaseScriptableEventEditor public void OnEnable() { - scriptableEvent = target as TScriptableEvent; + descriptionLabelContent = CreateLabelContent("description"); + suppressExceptionsLabelContent = CreateLabelContent("suppressExceptions"); + traceLabelContent = CreateLabelContent("trace"); + raiseLabelContent = new GUIContent( + "Raise Event", + "Raise event and trigger added listeners (play mode only)" + ); + listenerLabelContent = new GUIContent( + "Added Listeners", + "Added listeners to this event (play mode only)" + ); + + scriptableEvent = target as BaseScriptableEvent; monoScript = MonoScript.FromScriptableObject(scriptableEvent); descriptionProperty = serializedObject.FindProperty("description"); @@ -109,10 +103,23 @@ public override void OnInspectorGUI() #region Methods + private static GUIContent CreateLabelContent(string fieldName) + { + var text = ObjectNames.NicifyVariableName(fieldName); + + // ReSharper disable once AssignNullToNotNullAttribute + var tooltip = typeof(BaseScriptableEvent) + .GetField(fieldName, PrivateFieldBindingFlags) + .GetCustomAttribute() + .tooltip; + + return new GUIContent(text, tooltip); + } + private void DrawMonoScript() { GUI.enabled = false; - EditorGUILayout.ObjectField("Script", monoScript, typeof(TScriptableEvent), false); + EditorGUILayout.ObjectField("Script", monoScript, scriptableEvent.GetType(), false); GUI.enabled = true; } @@ -134,7 +141,7 @@ private void SetupStyles() if (descriptionWidth <= 0) { - var descriptionLabelSize = EditorStyles.label.CalcSize(DescriptionLabelContent); + var descriptionLabelSize = EditorStyles.label.CalcSize(descriptionLabelContent); descriptionWidth = descriptionLabelSize.x; } } @@ -142,7 +149,7 @@ private void SetupStyles() private void DrawDescription() { // Label. - EditorGUILayout.LabelField(DescriptionLabelContent); + EditorGUILayout.LabelField(descriptionLabelContent); // Label position. var position = GUILayoutUtility.GetLastRect(); @@ -170,7 +177,7 @@ private void DrawDescription() private void DrawSuppressExceptions() { suppressExceptionsProperty.boolValue = EditorGUILayout.Toggle( - SuppressExceptionsLabelContent, + suppressExceptionsLabelContent, suppressExceptionsProperty.boolValue ); } @@ -178,7 +185,7 @@ private void DrawSuppressExceptions() private void DrawTrace() { traceProperty.boolValue = EditorGUILayout.Toggle( - TraceLabelContent, + traceLabelContent, traceProperty.boolValue ); } @@ -186,7 +193,7 @@ private void DrawTrace() private void DrawRaise() { // Label. - EditorGUILayout.LabelField(RaiseLabelContent); + EditorGUILayout.LabelField(raiseLabelContent); GUI.enabled = Application.isPlaying; // Edit mode input. @@ -204,7 +211,7 @@ private void DrawRaise() private void DrawListeners() { - EditorGUILayout.LabelField(ListenerLabelContent); + EditorGUILayout.LabelField(listenerLabelContent); // Edit mode info. if (!Application.isPlaying) diff --git a/Assets/Editor/BoolScriptableEventEditor.cs b/Assets/Editor/BoolScriptableEventEditor.cs index 8798473..6a71643 100644 --- a/Assets/Editor/BoolScriptableEventEditor.cs +++ b/Assets/Editor/BoolScriptableEventEditor.cs @@ -4,7 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(BoolScriptableEvent))] - public class BoolScriptableEventEditor : BaseScriptableEventEditor + public class BoolScriptableEventEditor : BaseScriptableEventEditor { protected override bool DrawArgField(bool value) { diff --git a/Assets/Editor/FloatScriptableEventEditor.cs b/Assets/Editor/FloatScriptableEventEditor.cs index f7ce3e2..13ec164 100644 --- a/Assets/Editor/FloatScriptableEventEditor.cs +++ b/Assets/Editor/FloatScriptableEventEditor.cs @@ -4,7 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(FloatScriptableEvent))] - public class FloatScriptableEventEditor : BaseScriptableEventEditor + public class FloatScriptableEventEditor : BaseScriptableEventEditor { protected override float DrawArgField(float value) { diff --git a/Assets/Editor/GameObjectScriptableEventEditor.cs b/Assets/Editor/GameObjectScriptableEventEditor.cs index 2c79984..8aae0e1 100644 --- a/Assets/Editor/GameObjectScriptableEventEditor.cs +++ b/Assets/Editor/GameObjectScriptableEventEditor.cs @@ -4,8 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(GameObjectScriptableEvent))] - public class GameObjectScriptableEventEditor - : BaseScriptableEventEditor + public class GameObjectScriptableEventEditor : BaseScriptableEventEditor { protected override UnityEngine.GameObject DrawArgField(UnityEngine.GameObject value) { diff --git a/Assets/Editor/IntScriptableEventEditor.cs b/Assets/Editor/IntScriptableEventEditor.cs index 62ba59e..bc40657 100644 --- a/Assets/Editor/IntScriptableEventEditor.cs +++ b/Assets/Editor/IntScriptableEventEditor.cs @@ -4,7 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(IntScriptableEvent))] - public class IntScriptableEventEditor : BaseScriptableEventEditor + public class IntScriptableEventEditor : BaseScriptableEventEditor { protected override int DrawArgField(int value) { diff --git a/Assets/Editor/SimpleScriptableEventEditor.cs b/Assets/Editor/SimpleScriptableEventEditor.cs index e2a6a79..eb0d955 100644 --- a/Assets/Editor/SimpleScriptableEventEditor.cs +++ b/Assets/Editor/SimpleScriptableEventEditor.cs @@ -4,8 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(SimpleScriptableEvent))] - public class SimpleScriptableEventEditor - : BaseScriptableEventEditor + public class SimpleScriptableEventEditor : BaseScriptableEventEditor { protected override SimpleArg DrawArgField(SimpleArg value) { diff --git a/Assets/Editor/StringScriptableEventEditor.cs b/Assets/Editor/StringScriptableEventEditor.cs index 964fb45..ca21e67 100644 --- a/Assets/Editor/StringScriptableEventEditor.cs +++ b/Assets/Editor/StringScriptableEventEditor.cs @@ -4,8 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(StringScriptableEvent))] - public class StringScriptableEventEditor - : BaseScriptableEventEditor + public class StringScriptableEventEditor : BaseScriptableEventEditor { protected override string DrawArgField(string value) { diff --git a/Assets/Editor/TransformScriptableEventEditor.cs b/Assets/Editor/TransformScriptableEventEditor.cs index f5aa1e5..00130bb 100644 --- a/Assets/Editor/TransformScriptableEventEditor.cs +++ b/Assets/Editor/TransformScriptableEventEditor.cs @@ -4,8 +4,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(TransformScriptableEvent))] - public class TransformScriptableEventEditor - : BaseScriptableEventEditor + public class TransformScriptableEventEditor : BaseScriptableEventEditor { protected override UnityEngine.Transform DrawArgField(UnityEngine.Transform value) { diff --git a/Assets/Editor/Vector2ScriptableEventEditor.cs b/Assets/Editor/Vector2ScriptableEventEditor.cs index e7e0b58..d3c97e3 100644 --- a/Assets/Editor/Vector2ScriptableEventEditor.cs +++ b/Assets/Editor/Vector2ScriptableEventEditor.cs @@ -5,8 +5,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(Vector2ScriptableEvent))] - public class Vector2ScriptableEventEditor - : BaseScriptableEventEditor + public class Vector2ScriptableEventEditor : BaseScriptableEventEditor { protected override UnityEngine.Vector2 DrawArgField(UnityEngine.Vector2 value) { diff --git a/Assets/Editor/Vector3ScriptableEventEditor.cs b/Assets/Editor/Vector3ScriptableEventEditor.cs index 010db7c..8f46395 100644 --- a/Assets/Editor/Vector3ScriptableEventEditor.cs +++ b/Assets/Editor/Vector3ScriptableEventEditor.cs @@ -5,8 +5,7 @@ namespace ScriptableEvents.Editor { [CustomEditor(typeof(Vector3ScriptableEvent))] - public class Vector3ScriptableEventEditor - : BaseScriptableEventEditor + public class Vector3ScriptableEventEditor : BaseScriptableEventEditor { protected override UnityEngine.Vector3 DrawArgField(UnityEngine.Vector3 value) { diff --git a/Assets/Runtime/BaseScriptableEvent.cs b/Assets/Runtime/BaseScriptableEvent.cs index 2f4ce3e..dfd506e 100644 --- a/Assets/Runtime/BaseScriptableEvent.cs +++ b/Assets/Runtime/BaseScriptableEvent.cs @@ -9,17 +9,20 @@ public abstract class BaseScriptableEvent : ScriptableObject, IScriptableE #region Editor // ReSharper disable once NotAccessedField.Local - [SerializeField] + [SerializeField, TextArea] + [Tooltip("Custom description to provide more additional information")] private string description; // ReSharper disable once NotAccessedField.Local - [SerializeField] + [SerializeField, HideInInspector] private bool lockDescription = true; [SerializeField] + [Tooltip("Should exceptions not break the listener chain")] private bool suppressExceptions; [SerializeField] + [Tooltip("Should additional trace information be logged")] private bool trace; #endregion diff --git a/Assets/Tests/Runtime/ReflectionExtensions.cs b/Assets/Tests/Runtime/ReflectionExtensions.cs index 321332b..8ddd3e7 100644 --- a/Assets/Tests/Runtime/ReflectionExtensions.cs +++ b/Assets/Tests/Runtime/ReflectionExtensions.cs @@ -4,9 +4,8 @@ namespace ScriptableEvents.Tests { public static class TestExtensions { - private const BindingFlags Flags = BindingFlags.Instance - | BindingFlags.NonPublic - | BindingFlags.DeclaredOnly; + private const BindingFlags PrivateFieldBindingFlags = + BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; /// /// Set private field value with give name on this object. @@ -27,7 +26,7 @@ public static FieldInfo GetField(this object obj, string name) FieldInfo info; do { - info = type.GetField(name, Flags); + info = type.GetField(name, PrivateFieldBindingFlags); } while (info == null && (type = type.BaseType) != null); return info; From 3b9211580ad6ccdfa10ccf7776b904e0c74fd5b7 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 12:15:03 +0200 Subject: [PATCH 20/26] Improve UX by ordering events and listeners, update tests --- Assets/Runtime/Bool/BoolScriptableEvent.cs | 3 +- .../Bool/BoolScriptableEventListener.cs | 2 +- Assets/Runtime/Float/FloatScriptableEvent.cs | 3 +- .../Float/FloatScriptableEventListener.cs | 2 +- .../GameObject/GameObjectGameEventListener.cs | 2 +- .../GameObject/GameObjectScriptableEvent.cs | 3 +- Assets/Runtime/Int/IntScriptableEvent.cs | 3 +- .../Runtime/Int/IntScriptableEventListener.cs | 2 +- .../Runtime/Simple/SimpleScriptableEvent.cs | 3 +- .../Simple/SimpleScriptableEventListener.cs | 2 +- .../Runtime/String/StringScriptableEvent.cs | 3 +- .../String/StringScriptableEventListener.cs | 2 +- .../Transform/TransformScriptableEvent.cs | 3 +- .../TransformScriptableEventListener.cs | 2 +- .../Runtime/Vector2/Vector2ScriptableEvent.cs | 3 +- .../Vector2/Vector2ScriptableEventListener.cs | 2 +- .../Runtime/Vector3/Vector3ScriptableEvent.cs | 3 +- .../Vector3/Vector3ScriptableEventListener.cs | 2 +- .../Editor/ScriptableEventAttributeTest.cs | 8 ++++- .../ScriptableEventAttributeTestSource.cs | 33 ++++++++++++------- 20 files changed, 56 insertions(+), 30 deletions(-) diff --git a/Assets/Runtime/Bool/BoolScriptableEvent.cs b/Assets/Runtime/Bool/BoolScriptableEvent.cs index be84257..4686836 100644 --- a/Assets/Runtime/Bool/BoolScriptableEvent.cs +++ b/Assets/Runtime/Bool/BoolScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Bool { [CreateAssetMenu( fileName = "BoolScriptableEvent", - menuName = "Scriptable Events/Bool Scriptable Event" + menuName = "Scriptable Events/Bool Scriptable Event", + order = 1 )] public class BoolScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Bool/BoolScriptableEventListener.cs b/Assets/Runtime/Bool/BoolScriptableEventListener.cs index 5d02e66..f405d67 100644 --- a/Assets/Runtime/Bool/BoolScriptableEventListener.cs +++ b/Assets/Runtime/Bool/BoolScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Bool { - [AddComponentMenu("Scriptable Events/Bool Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Bool Scriptable Event Listener", 1)] public class BoolScriptableEventListener : BaseScriptableEventListener { diff --git a/Assets/Runtime/Float/FloatScriptableEvent.cs b/Assets/Runtime/Float/FloatScriptableEvent.cs index 992956c..30e420d 100644 --- a/Assets/Runtime/Float/FloatScriptableEvent.cs +++ b/Assets/Runtime/Float/FloatScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Float { [CreateAssetMenu( fileName = "FloatScriptableEvent", - menuName = "Scriptable Events/Float Scriptable Event" + menuName = "Scriptable Events/Float Scriptable Event", + order = 2 )] public class FloatScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Float/FloatScriptableEventListener.cs b/Assets/Runtime/Float/FloatScriptableEventListener.cs index 05d8b74..9d1506c 100644 --- a/Assets/Runtime/Float/FloatScriptableEventListener.cs +++ b/Assets/Runtime/Float/FloatScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Float { - [AddComponentMenu("Scriptable Events/Float Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Float Scriptable Event Listener", 2)] public class FloatScriptableEventListener : BaseScriptableEventListener { diff --git a/Assets/Runtime/GameObject/GameObjectGameEventListener.cs b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs index f54e175..95e3fe4 100644 --- a/Assets/Runtime/GameObject/GameObjectGameEventListener.cs +++ b/Assets/Runtime/GameObject/GameObjectGameEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.GameObject { - [AddComponentMenu("Scriptable Events/Game Object Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Game Object Scriptable Event Listener", 3)] public class GameObjectScriptableEventListener : BaseScriptableEventListener< GameObjectScriptableEvent, diff --git a/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs b/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs index 50e7e44..04ef807 100644 --- a/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs +++ b/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.GameObject { [CreateAssetMenu( fileName = "GameObjectScriptableEvent", - menuName = "Scriptable Events/Game Object Scriptable Event" + menuName = "Scriptable Events/Game Object Scriptable Event", + order = 3 )] public class GameObjectScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Int/IntScriptableEvent.cs b/Assets/Runtime/Int/IntScriptableEvent.cs index 5520b66..e1a8b4e 100644 --- a/Assets/Runtime/Int/IntScriptableEvent.cs +++ b/Assets/Runtime/Int/IntScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Int { [CreateAssetMenu( fileName = "IntScriptableEvent", - menuName = "Scriptable Events/Int Scriptable Event" + menuName = "Scriptable Events/Int Scriptable Event", + order = 4 )] public class IntScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Int/IntScriptableEventListener.cs b/Assets/Runtime/Int/IntScriptableEventListener.cs index a71b8ae..0ba00b6 100644 --- a/Assets/Runtime/Int/IntScriptableEventListener.cs +++ b/Assets/Runtime/Int/IntScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Int { - [AddComponentMenu("Scriptable Events/Int Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Int Scriptable Event Listener", 4)] public class IntScriptableEventListener : BaseScriptableEventListener { diff --git a/Assets/Runtime/Simple/SimpleScriptableEvent.cs b/Assets/Runtime/Simple/SimpleScriptableEvent.cs index 6785af5..6cc08c7 100644 --- a/Assets/Runtime/Simple/SimpleScriptableEvent.cs +++ b/Assets/Runtime/Simple/SimpleScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Simple { [CreateAssetMenu( fileName = "SimpleScriptableEvent", - menuName = "Scriptable Events/Simple Scriptable Event" + menuName = "Scriptable Events/Simple Scriptable Event", + order = -10 )] public class SimpleScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs index e842eee..a02c8b7 100644 --- a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs +++ b/Assets/Runtime/Simple/SimpleScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Simple { - [AddComponentMenu("Scriptable Events/Simple Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Simple Scriptable Event Listener", -10)] public class SimpleScriptableEventListener : BaseScriptableEventListener { diff --git a/Assets/Runtime/String/StringScriptableEvent.cs b/Assets/Runtime/String/StringScriptableEvent.cs index 55e76c1..e233148 100644 --- a/Assets/Runtime/String/StringScriptableEvent.cs +++ b/Assets/Runtime/String/StringScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.String { [CreateAssetMenu( fileName = "StringScriptableEvent", - menuName = "Scriptable Events/String Scriptable Event" + menuName = "Scriptable Events/String Scriptable Event", + order = 5 )] public class StringScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/String/StringScriptableEventListener.cs b/Assets/Runtime/String/StringScriptableEventListener.cs index 28de667..215a848 100644 --- a/Assets/Runtime/String/StringScriptableEventListener.cs +++ b/Assets/Runtime/String/StringScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.String { - [AddComponentMenu("Scriptable Events/String Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/String Scriptable Event Listener", 5)] public class StringScriptableEventListener : BaseScriptableEventListener { diff --git a/Assets/Runtime/Transform/TransformScriptableEvent.cs b/Assets/Runtime/Transform/TransformScriptableEvent.cs index 9374eda..572898b 100644 --- a/Assets/Runtime/Transform/TransformScriptableEvent.cs +++ b/Assets/Runtime/Transform/TransformScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Transform { [CreateAssetMenu( fileName = "TransformScriptableEvent", - menuName = "Scriptable Events/Transform Scriptable Event" + menuName = "Scriptable Events/Transform Scriptable Event", + order = 6 )] public class TransformScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Transform/TransformScriptableEventListener.cs b/Assets/Runtime/Transform/TransformScriptableEventListener.cs index a41b29d..c548218 100644 --- a/Assets/Runtime/Transform/TransformScriptableEventListener.cs +++ b/Assets/Runtime/Transform/TransformScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Transform { - [AddComponentMenu("Scriptable Events/Transform Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Transform Scriptable Event Listener", 6)] public class TransformScriptableEventListener : BaseScriptableEventListener< TransformScriptableEvent, diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs b/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs index ca1223d..407177f 100644 --- a/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs +++ b/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Vector2 { [CreateAssetMenu( fileName = "Vector2ScriptableEvent", - menuName = "Scriptable Events/Vector2 Scriptable Event" + menuName = "Scriptable Events/Vector2 Scriptable Event", + order = 7 )] public class Vector2ScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs b/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs index c13127e..a0109a6 100644 --- a/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs +++ b/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Vector2 { - [AddComponentMenu("Scriptable Events/Vector2 Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Vector2 Scriptable Event Listener", 7)] public class Vector2ScriptableEventListener : BaseScriptableEventListener< Vector2ScriptableEvent, diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs b/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs index 4892b5f..5c614f7 100644 --- a/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs +++ b/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs @@ -4,7 +4,8 @@ namespace ScriptableEvents.Vector3 { [CreateAssetMenu( fileName = "Vector3ScriptableEvent", - menuName = "Scriptable Events/Vector3 Scriptable Event" + menuName = "Scriptable Events/Vector3 Scriptable Event", + order = 8 )] public class Vector3ScriptableEvent : BaseScriptableEvent { diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs index 7a64c1d..62b5ee9 100644 --- a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs +++ b/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs @@ -2,7 +2,7 @@ namespace ScriptableEvents.Vector3 { - [AddComponentMenu("Scriptable Events/Vector3 Scriptable Event Listener")] + [AddComponentMenu("Scriptable Events/Vector3 Scriptable Event Listener", 8)] public class Vector3ScriptableEventListener : BaseScriptableEventListener< Vector3ScriptableEvent, diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTest.cs b/Assets/Tests/Editor/ScriptableEventAttributeTest.cs index 8674a3a..509b109 100644 --- a/Assets/Tests/Editor/ScriptableEventAttributeTest.cs +++ b/Assets/Tests/Editor/ScriptableEventAttributeTest.cs @@ -15,12 +15,15 @@ public class ScriptableEventAttributeTest private readonly string eventMenuName; private readonly string listenerMenuName; + private readonly int order; + public ScriptableEventAttributeTest( Type eventType, Type listenerType, string eventFileName, string eventMenuName, - string listenerMenuName + string listenerMenuName, + int order ) { this.eventType = eventType; @@ -28,6 +31,7 @@ string listenerMenuName this.eventFileName = eventFileName; this.eventMenuName = eventMenuName; this.listenerMenuName = listenerMenuName; + this.order = order; } [Test] @@ -36,6 +40,7 @@ public void ShouldMatchEventAttributeValues() var eventMenuAttribute = GetAttribute(eventType); Assert.AreEqual(eventFileName, eventMenuAttribute.fileName); Assert.AreEqual(eventMenuName, eventMenuAttribute.menuName); + Assert.AreEqual(order, eventMenuAttribute.order); } [Test] @@ -43,6 +48,7 @@ public void ShouldMatchListenerAttributeValues() { var listenerMenuAttribute = GetAttribute(listenerType); Assert.AreEqual(listenerMenuName, listenerMenuAttribute.componentMenu); + Assert.AreEqual(order, listenerMenuAttribute.componentOrder); } private static TAttribute GetAttribute(MemberInfo type) diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs b/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs index 0f33b0b..0164f22 100644 --- a/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs +++ b/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs @@ -21,7 +21,8 @@ public IEnumerator GetEnumerator() >( "BoolScriptableEvent", "Scriptable Events/Bool Scriptable Event", - "Scriptable Events/Bool Scriptable Event Listener" + "Scriptable Events/Bool Scriptable Event Listener", + 1 ); yield return CreateTestCase< @@ -30,7 +31,8 @@ public IEnumerator GetEnumerator() >( "FloatScriptableEvent", "Scriptable Events/Float Scriptable Event", - "Scriptable Events/Float Scriptable Event Listener" + "Scriptable Events/Float Scriptable Event Listener", + 2 ); yield return CreateTestCase< @@ -39,7 +41,8 @@ public IEnumerator GetEnumerator() >( "GameObjectScriptableEvent", "Scriptable Events/Game Object Scriptable Event", - "Scriptable Events/Game Object Scriptable Event Listener" + "Scriptable Events/Game Object Scriptable Event Listener", + 3 ); yield return CreateTestCase< @@ -48,7 +51,8 @@ public IEnumerator GetEnumerator() >( "IntScriptableEvent", "Scriptable Events/Int Scriptable Event", - "Scriptable Events/Int Scriptable Event Listener" + "Scriptable Events/Int Scriptable Event Listener", + 4 ); yield return CreateTestCase< @@ -57,7 +61,8 @@ public IEnumerator GetEnumerator() >( "SimpleScriptableEvent", "Scriptable Events/Simple Scriptable Event", - "Scriptable Events/Simple Scriptable Event Listener" + "Scriptable Events/Simple Scriptable Event Listener", + -10 ); yield return CreateTestCase< @@ -66,7 +71,8 @@ public IEnumerator GetEnumerator() >( "StringScriptableEvent", "Scriptable Events/String Scriptable Event", - "Scriptable Events/String Scriptable Event Listener" + "Scriptable Events/String Scriptable Event Listener", + 5 ); yield return CreateTestCase< @@ -75,7 +81,8 @@ public IEnumerator GetEnumerator() >( "TransformScriptableEvent", "Scriptable Events/Transform Scriptable Event", - "Scriptable Events/Transform Scriptable Event Listener" + "Scriptable Events/Transform Scriptable Event Listener", + 6 ); yield return CreateTestCase< @@ -84,7 +91,8 @@ public IEnumerator GetEnumerator() >( "Vector2ScriptableEvent", "Scriptable Events/Vector2 Scriptable Event", - "Scriptable Events/Vector2 Scriptable Event Listener" + "Scriptable Events/Vector2 Scriptable Event Listener", + 7 ); yield return CreateTestCase< @@ -93,7 +101,8 @@ public IEnumerator GetEnumerator() >( "Vector3ScriptableEvent", "Scriptable Events/Vector3 Scriptable Event", - "Scriptable Events/Vector3 Scriptable Event Listener" + "Scriptable Events/Vector3 Scriptable Event Listener", + 8 ); } @@ -103,7 +112,8 @@ private static object[] CreateTestCase< >( string eventFileName, string eventMenuName, - string listenerMenuName + string listenerMenuName, + int order ) { return new object[] @@ -112,7 +122,8 @@ string listenerMenuName typeof(TScriptableEventListener), eventFileName, eventMenuName, - listenerMenuName + listenerMenuName, + order }; } } From 536e93204127aa30a52335af43806a74b083194d Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 12:38:10 +0200 Subject: [PATCH 21/26] Remove old samples, add samples showing how to use simple & arg events --- ...{Scripts.meta => EventsWithArguments.meta} | 2 +- .../EventsWithArgumentsScene.unity | 1103 +++++++++++++++++ .../EventsWithArgumentsScene.unity.meta | 7 + .../MaterialColorChanger.cs | 23 + .../MaterialColorChanger.cs.meta} | 2 +- Assets/Samples/Scripts/FloatFadeOutText.cs | 56 - Assets/Samples/Scripts/Score.cs | 56 - Assets/Samples/Scripts/Score.cs.meta | 3 - Assets/Samples/Scripts/Shooter.cs | 45 - Assets/Samples/Scripts/ShotHandler.cs | 17 - Assets/Samples/Scripts/ShotHandler.cs.meta | 11 - Assets/Samples/Scripts/Spawner.cs | 94 -- Assets/Samples/Scripts/Spawner.cs.meta | 3 - .../{Settings.meta => SimpleEvents.meta} | 2 +- .../SimpleEvents/ChangeColorEvent.asset | 18 + .../SimpleEvents/ChangeColorEvent.asset.meta | 8 + .../SimpleEvents/MaterialColorChanger.cs | 24 + .../MaterialColorChanger.cs.meta} | 2 +- .../SimpleEvents/SimpleEventsScene.unity | 917 ++++++++++++++ .../SimpleEvents/SimpleEventsScene.unity.meta | 7 + ProjectSettings/GraphicsSettings.asset | 3 +- 21 files changed, 2112 insertions(+), 291 deletions(-) rename Assets/Samples/{Scripts.meta => EventsWithArguments.meta} (77%) create mode 100644 Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity create mode 100644 Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta create mode 100644 Assets/Samples/EventsWithArguments/MaterialColorChanger.cs rename Assets/Samples/{Scripts/Shooter.cs.meta => EventsWithArguments/MaterialColorChanger.cs.meta} (83%) delete mode 100644 Assets/Samples/Scripts/FloatFadeOutText.cs delete mode 100644 Assets/Samples/Scripts/Score.cs delete mode 100644 Assets/Samples/Scripts/Score.cs.meta delete mode 100644 Assets/Samples/Scripts/Shooter.cs delete mode 100644 Assets/Samples/Scripts/ShotHandler.cs delete mode 100644 Assets/Samples/Scripts/ShotHandler.cs.meta delete mode 100644 Assets/Samples/Scripts/Spawner.cs delete mode 100644 Assets/Samples/Scripts/Spawner.cs.meta rename Assets/Samples/{Settings.meta => SimpleEvents.meta} (77%) create mode 100644 Assets/Samples/SimpleEvents/ChangeColorEvent.asset create mode 100644 Assets/Samples/SimpleEvents/ChangeColorEvent.asset.meta create mode 100644 Assets/Samples/SimpleEvents/MaterialColorChanger.cs rename Assets/Samples/{Scripts/FloatFadeOutText.cs.meta => SimpleEvents/MaterialColorChanger.cs.meta} (83%) create mode 100644 Assets/Samples/SimpleEvents/SimpleEventsScene.unity create mode 100644 Assets/Samples/SimpleEvents/SimpleEventsScene.unity.meta diff --git a/Assets/Samples/Scripts.meta b/Assets/Samples/EventsWithArguments.meta similarity index 77% rename from Assets/Samples/Scripts.meta rename to Assets/Samples/EventsWithArguments.meta index ed046ca..2d15ef0 100644 --- a/Assets/Samples/Scripts.meta +++ b/Assets/Samples/EventsWithArguments.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2444134179ac1a748a92c6773a593e16 +guid: 869f4106911d8f84a849ce02bdb392c7 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity new file mode 100644 index 0000000..365a4fe --- /dev/null +++ b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity @@ -0,0 +1,1103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &579522505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 579522507} + - component: {fileID: 579522506} + m_Layer: 0 + m_Name: DirectionalLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &579522506 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579522505} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &579522507 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579522505} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1560495123} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &996868308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 996868309} + - component: {fileID: 996868311} + - component: {fileID: 996868310} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &996868309 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996868308} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2091594018} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &996868310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996868308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &996868311 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996868308} + m_CullTransparentMesh: 0 +--- !u!1 &1194471405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1194471408} + - component: {fileID: 1194471407} + - component: {fileID: 1194471406} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1194471406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1194471407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1194471408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1711634209} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1315013218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1315013221} + - component: {fileID: 1315013220} + - component: {fileID: 1315013219} + m_Layer: 0 + m_Name: MainCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1315013219 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_Enabled: 1 +--- !u!20 &1315013220 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1315013221 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1560495123} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1355824719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1355824720} + - component: {fileID: 1355824722} + - component: {fileID: 1355824721} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1355824720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355824719} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2133235091} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1355824721 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355824719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1355824722 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355824719} + m_CullTransparentMesh: 0 +--- !u!1 &1560495122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1560495123} + m_Layer: 0 + m_Name: Setup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1560495123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560495122} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1315013221} + - {fileID: 579522507} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1711634208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1711634209} + m_Layer: 0 + m_Name: UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1711634209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711634208} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1815001690} + - {fileID: 1194471408} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1815001686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1815001690} + - component: {fileID: 1815001689} + - component: {fileID: 1815001688} + - component: {fileID: 1815001687} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1815001687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1815001688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1815001689 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1815001690 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 2091594018} + m_Father: {fileID: 1711634209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1901124777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1901124778} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1901124778 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901124777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1935845758} + m_Father: {fileID: 2091594018} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1935845757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1935845758} + - component: {fileID: 1935845760} + - component: {fileID: 1935845759} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1935845758 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935845757} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1901124778} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1935845759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935845757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1935845760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935845757} + m_CullTransparentMesh: 0 +--- !u!1 &1972673856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1972673860} + - component: {fileID: 1972673859} + - component: {fileID: 1972673858} + - component: {fileID: 1972673857} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1972673857 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e3e861e18fd61714b8259b6e6b81974b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!23 &1972673858 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1972673859 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1972673860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 3, y: 3, z: 3} + m_Children: [] + m_Father: {fileID: 2081766997} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2081766996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2081766997} + m_Layer: 0 + m_Name: Sample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2081766997 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081766996} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1972673860} + - {fileID: 2085729137} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2085729135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2085729137} + - component: {fileID: 2085729136} + m_Layer: 0 + m_Name: ChangeColorEventListener + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2085729136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085729135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 46c9e0aa5c1e487e884cfba5886e0d41, type: 3} + m_Name: + m_EditorClassIdentifier: + scriptableEvent: {fileID: 11400000, guid: 42d9aaec5884bc746b5e0ca61b22d5d5, type: 2} + onRaised: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1972673857} + m_MethodName: ChangeColor + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!4 &2085729137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085729135} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 419.5, y: 291.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2081766997} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2091594017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2091594018} + - component: {fileID: 2091594019} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2091594018 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091594017} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 996868309} + - {fileID: 1901124778} + - {fileID: 2133235091} + m_Father: {fileID: 1815001690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 32} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2091594019 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091594017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1355824721} + m_FillRect: {fileID: 1935845758} + m_HandleRect: {fileID: 1355824720} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 1 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11400000, guid: 42d9aaec5884bc746b5e0ca61b22d5d5, type: 2} + m_MethodName: Raise + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2133235090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2133235091} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2133235091 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133235090} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1355824720} + m_Father: {fileID: 2091594018} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta new file mode 100644 index 0000000..acdc037 --- /dev/null +++ b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 027fa4519f13431488691c6d2bb732f5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs b/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs new file mode 100644 index 0000000..b9fba45 --- /dev/null +++ b/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace ScriptableEvents.EventsWithArguments +{ + [RequireComponent(typeof(MeshRenderer))] + public class MaterialColorChanger : MonoBehaviour + { + private Material material; + + private void Awake() + { + material = GetComponent().material; + } + + public void ToggleColor() + { + var color = material.color; + material.color = color == Color.black + ? Color.white + : Color.black; + } + } +} diff --git a/Assets/Samples/Scripts/Shooter.cs.meta b/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs.meta similarity index 83% rename from Assets/Samples/Scripts/Shooter.cs.meta rename to Assets/Samples/EventsWithArguments/MaterialColorChanger.cs.meta index 59a4141..35d0059 100644 --- a/Assets/Samples/Scripts/Shooter.cs.meta +++ b/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f5322d0809e6c094c9f48718decf34db +guid: 88668e2b47742a14e88066f960d2f331 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Samples/Scripts/FloatFadeOutText.cs b/Assets/Samples/Scripts/FloatFadeOutText.cs deleted file mode 100644 index 8052419..0000000 --- a/Assets/Samples/Scripts/FloatFadeOutText.cs +++ /dev/null @@ -1,56 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace ScriptableEvents.Samples -{ - [RequireComponent(typeof(Text))] - public class FloatFadeOutText : MonoBehaviour - { - [SerializeField] - private UnityEngine.Vector3 floatDirection = UnityEngine.Vector2.up; - - [SerializeField] - private Color fadeOutColor = Color.clear; - - [SerializeField] - private float floatSpeed = 15f; - - [SerializeField] - private float floatDuration = 3f; - - private float floatProgress; - private Text floatText; - private Color originalColor; - - private void Awake() - { - floatText = GetComponent(); - originalColor = floatText.color; - } - - private void Update() - { - floatText.rectTransform.position = GetTextPosition(); - floatText.color = GetTextColor(); - - if (floatProgress > 1f) Destroy(gameObject); - - floatProgress = GetProgress(); - } - - private UnityEngine.Vector3 GetTextPosition() - { - return floatText.rectTransform.position + floatDirection * (floatSpeed * Time.deltaTime); - } - - private Color GetTextColor() - { - return Color.LerpUnclamped(originalColor, fadeOutColor, floatProgress); - } - - private float GetProgress() - { - return floatProgress + Time.deltaTime / floatDuration; - } - } -} diff --git a/Assets/Samples/Scripts/Score.cs b/Assets/Samples/Scripts/Score.cs deleted file mode 100644 index b865f3d..0000000 --- a/Assets/Samples/Scripts/Score.cs +++ /dev/null @@ -1,56 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace ScriptableEvents.Samples -{ - [RequireComponent(typeof(Text))] - public class Score : MonoBehaviour - { - [Min(0)] - [SerializeField] - private int scoreIncrease = 100; - - [SerializeField] - private float scoreEffectYOffset = 10f; - - [SerializeField] - private FloatFadeOutText scoreEffectPrefab = default; - - private int currentScore; - private Text text; - - private void Awake() - { - text = GetComponent(); - } - - public void IncreaseScore() - { - currentScore += scoreIncrease; - text.text = currentScore.ToString(); - - InstantiateEffect($"+{scoreIncrease.ToString()}"); - } - - private void InstantiateEffect(string effectText) - { - var scoreTransform = transform; - var scorePosition = scoreTransform.position; - - scorePosition.y += scoreEffectYOffset; - - var floatEffect = Instantiate( - scoreEffectPrefab, - scorePosition, - Quaternion.identity, - scoreTransform - ); - - var floatText = floatEffect.GetComponent(); - if (floatText != null) - { - floatText.text = effectText; - } - } - } -} diff --git a/Assets/Samples/Scripts/Score.cs.meta b/Assets/Samples/Scripts/Score.cs.meta deleted file mode 100644 index ae8317d..0000000 --- a/Assets/Samples/Scripts/Score.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 66ebf31fba15413096990cd356aa98e6 -timeCreated: 1601679745 \ No newline at end of file diff --git a/Assets/Samples/Scripts/Shooter.cs b/Assets/Samples/Scripts/Shooter.cs deleted file mode 100644 index f52bc06..0000000 --- a/Assets/Samples/Scripts/Shooter.cs +++ /dev/null @@ -1,45 +0,0 @@ -using ScriptableEvents.Transform; -using UnityEngine; - -namespace ScriptableEvents.Samples -{ - [RequireComponent(typeof(Camera))] - public class Shooter : MonoBehaviour - { - [SerializeField] - private TransformScriptableEvent shotScriptableEvent = default; - - [SerializeField] - private string shootButton = "Fire1"; - - private new Camera camera; - - private void Awake() - { - camera = GetComponent(); - } - - private void Update() - { - if (IsShoot()) - { - Shoot(); - } - } - - private bool IsShoot() - { - return Input.GetButtonDown(shootButton); - } - - private void Shoot() - { - var ray = camera.ScreenPointToRay(Input.mousePosition); - - if (Physics.Raycast(ray, out var hit)) - { - shotScriptableEvent.Raise(hit.transform); - } - } - } -} diff --git a/Assets/Samples/Scripts/ShotHandler.cs b/Assets/Samples/Scripts/ShotHandler.cs deleted file mode 100644 index b2a9809..0000000 --- a/Assets/Samples/Scripts/ShotHandler.cs +++ /dev/null @@ -1,17 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -namespace ScriptableEvents.Samples -{ - public class ShotHandler : MonoBehaviour - { - [SerializeField] - private UnityEvent onShot = default; - - public void HandleShot(UnityEngine.Transform shot) - { - Destroy(shot.parent.gameObject); - onShot.Invoke(); - } - } -} diff --git a/Assets/Samples/Scripts/ShotHandler.cs.meta b/Assets/Samples/Scripts/ShotHandler.cs.meta deleted file mode 100644 index 923c81c..0000000 --- a/Assets/Samples/Scripts/ShotHandler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1080b2340bee3cb4fa67da041bf81815 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Samples/Scripts/Spawner.cs b/Assets/Samples/Scripts/Spawner.cs deleted file mode 100644 index f04b0b7..0000000 --- a/Assets/Samples/Scripts/Spawner.cs +++ /dev/null @@ -1,94 +0,0 @@ -using UnityEngine; - -namespace ScriptableEvents.Samples -{ - [RequireComponent(typeof(BoxCollider))] - public class Spawner : MonoBehaviour - { - [Min(0)] - [SerializeField] - private int spawnedLimit = 10; - - [SerializeField] - private UnityEngine.GameObject spawnPrefab = default; - - [Min(1f)] - [SerializeField] - private UnityEngine.Vector3 maxRandomScale = - new UnityEngine.Vector3(1f, 2f, 1f); - - private new BoxCollider collider; - private int spawned; - - private void Awake() - { - collider = GetComponent(); - } - - private void Update() - { - if (IsSpawn()) Spawn(); - } - - private bool IsSpawn() - { - return spawned < spawnedLimit; - } - - private void Spawn() - { - var instance = Instantiate( - spawnPrefab, - GetSpawnPosition(), - GetSpawnRotation(), - transform - ); - - instance.transform.localScale = GetSpawnScale(); - - spawned++; - } - - private UnityEngine.Vector3 GetSpawnPosition() - { - var colliderBounds = collider.bounds; - var position = new UnityEngine.Vector3( - Random.Range(colliderBounds.min.x, colliderBounds.max.x), - Random.Range(colliderBounds.min.y, colliderBounds.max.y), - Random.Range(colliderBounds.min.z, colliderBounds.max.z) - ); - - return colliderBounds.ClosestPoint(position); - } - - private static Quaternion GetSpawnRotation() - { - var angles = new UnityEngine.Vector3( - 0f, - GetRandomAngle(), - 0f - ); - - return Quaternion.Euler(angles); - } - - private static float GetRandomAngle() - { - return Random.Range(0f, 360f); - } - - private UnityEngine.Vector3 GetSpawnScale() - { - return new UnityEngine.Vector3( - Random.Range(1f, maxRandomScale.x), - Random.Range(1f, maxRandomScale.y), - Random.Range(1f, maxRandomScale.z) - ); - } - - public void DecreaseSpawned() - { - spawned--; - } - } -} diff --git a/Assets/Samples/Scripts/Spawner.cs.meta b/Assets/Samples/Scripts/Spawner.cs.meta deleted file mode 100644 index bdf0416..0000000 --- a/Assets/Samples/Scripts/Spawner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5916e7e0178a40ba8209ec5b7ac1d1a7 -timeCreated: 1601678133 \ No newline at end of file diff --git a/Assets/Samples/Settings.meta b/Assets/Samples/SimpleEvents.meta similarity index 77% rename from Assets/Samples/Settings.meta rename to Assets/Samples/SimpleEvents.meta index c5b2ef2..39e0090 100644 --- a/Assets/Samples/Settings.meta +++ b/Assets/Samples/SimpleEvents.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b8114d0c340d5ff4b83bdd3cea280c00 +guid: 0c484137f5ba5334eb616d7bb5f5d4e9 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Samples/SimpleEvents/ChangeColorEvent.asset b/Assets/Samples/SimpleEvents/ChangeColorEvent.asset new file mode 100644 index 0000000..d959a1c --- /dev/null +++ b/Assets/Samples/SimpleEvents/ChangeColorEvent.asset @@ -0,0 +1,18 @@ +%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: ff6c51af645c42938d2b5a26ee3e6238, type: 3} + m_Name: ChangeColorEvent + m_EditorClassIdentifier: + description: + lockDescription: 1 + suppressExceptions: 0 + trace: 0 diff --git a/Assets/Samples/SimpleEvents/ChangeColorEvent.asset.meta b/Assets/Samples/SimpleEvents/ChangeColorEvent.asset.meta new file mode 100644 index 0000000..d69233c --- /dev/null +++ b/Assets/Samples/SimpleEvents/ChangeColorEvent.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42d9aaec5884bc746b5e0ca61b22d5d5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/SimpleEvents/MaterialColorChanger.cs b/Assets/Samples/SimpleEvents/MaterialColorChanger.cs new file mode 100644 index 0000000..76c776f --- /dev/null +++ b/Assets/Samples/SimpleEvents/MaterialColorChanger.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace ScriptableEvents.SimpleEvents +{ + [RequireComponent(typeof(MeshRenderer))] + public class MaterialColorChanger : MonoBehaviour + { + private Material material; + + private void Awake() + { + material = GetComponent().material; + } + + public void ChangeColor(float value) + { + var color = material.color; + color.r = value; + color.g = value; + color.b = value; + material.color = color; + } + } +} diff --git a/Assets/Samples/Scripts/FloatFadeOutText.cs.meta b/Assets/Samples/SimpleEvents/MaterialColorChanger.cs.meta similarity index 83% rename from Assets/Samples/Scripts/FloatFadeOutText.cs.meta rename to Assets/Samples/SimpleEvents/MaterialColorChanger.cs.meta index b0cb724..0cd13fd 100644 --- a/Assets/Samples/Scripts/FloatFadeOutText.cs.meta +++ b/Assets/Samples/SimpleEvents/MaterialColorChanger.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 04272e1dd140b4647a81945fd79860d0 +guid: e3e861e18fd61714b8259b6e6b81974b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity new file mode 100644 index 0000000..7f261a9 --- /dev/null +++ b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity @@ -0,0 +1,917 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &579522505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 579522507} + - component: {fileID: 579522506} + m_Layer: 0 + m_Name: DirectionalLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &579522506 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579522505} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &579522507 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579522505} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1560495123} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1194471405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1194471408} + - component: {fileID: 1194471407} + - component: {fileID: 1194471406} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1194471406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1194471407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1194471408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1711634209} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1230328349 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1230328350} + - component: {fileID: 1230328352} + - component: {fileID: 1230328351} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1230328350 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230328349} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1467385995} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1230328351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230328349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Toggle color +--- !u!222 &1230328352 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230328349} + m_CullTransparentMesh: 0 +--- !u!1 &1315013218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1315013221} + - component: {fileID: 1315013220} + - component: {fileID: 1315013219} + m_Layer: 0 + m_Name: MainCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1315013219 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_Enabled: 1 +--- !u!20 &1315013220 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1315013221 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1560495123} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1467385994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1467385995} + - component: {fileID: 1467385998} + - component: {fileID: 1467385997} + - component: {fileID: 1467385996} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1467385995 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467385994} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1230328350} + m_Father: {fileID: 1815001690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 32} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1467385996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467385994} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1467385997} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11400000, guid: 42d9aaec5884bc746b5e0ca61b22d5d5, type: 2} + m_MethodName: Raise + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1467385997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467385994} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1467385998 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467385994} + m_CullTransparentMesh: 0 +--- !u!1 &1560495122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1560495123} + m_Layer: 0 + m_Name: Setup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1560495123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560495122} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1315013221} + - {fileID: 579522507} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1711634208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1711634209} + m_Layer: 0 + m_Name: UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1711634209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711634208} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1815001690} + - {fileID: 1194471408} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1815001686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1815001690} + - component: {fileID: 1815001689} + - component: {fileID: 1815001688} + - component: {fileID: 1815001687} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1815001687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1815001688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1815001689 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1815001690 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1467385995} + m_Father: {fileID: 1711634209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1972673856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1972673860} + - component: {fileID: 1972673859} + - component: {fileID: 1972673858} + - component: {fileID: 1972673857} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1972673857 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e3e861e18fd61714b8259b6e6b81974b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!23 &1972673858 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1972673859 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1972673860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 3, y: 3, z: 3} + m_Children: [] + m_Father: {fileID: 2081766997} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2081766996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2081766997} + m_Layer: 0 + m_Name: Sample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2081766997 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081766996} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1972673860} + - {fileID: 2085729137} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2085729135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2085729137} + - component: {fileID: 2085729136} + m_Layer: 0 + m_Name: ToggleColorEventListener + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2085729136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085729135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2300d56ac22446e59de6de2fb87235d1, type: 3} + m_Name: + m_EditorClassIdentifier: + scriptableEvent: {fileID: 11400000, guid: 42d9aaec5884bc746b5e0ca61b22d5d5, type: 2} + onRaised: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1972673857} + m_MethodName: ToggleColor + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!4 &2085729137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085729135} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 419.5, y: 291.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2081766997} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity.meta b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity.meta new file mode 100644 index 0000000..f7a19a4 --- /dev/null +++ b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9ab50225cf365ce499a69d7011561174 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index 841a23c..7b627d9 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/ProjectSettings/GraphicsSettings.asset @@ -42,8 +42,7 @@ GraphicsSettings: m_PreloadedShaders: [] m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} - m_CustomRenderPipeline: {fileID: 11400000, guid: 4cc95e0ffb4cb5b41a626555d36a9b76, - type: 2} + m_CustomRenderPipeline: {fileID: 0} m_TransparencySortMode: 0 m_TransparencySortAxis: {x: 0, y: 0, z: 1} m_DefaultRenderingPath: 1 From 328a0bc3e4601d920c57caa930f7f20c214dca7c Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 12:44:21 +0200 Subject: [PATCH 22/26] Rename sample scripts --- .../ChangeColorEvent.asset | 0 .../ChangeColorEvent.asset.meta | 0 .../EventsWithArgumentsScene.unity | 2 +- .../MaterialColorChanger.cs | 9 +++++---- ...lColorChanger.cs => MaterialColorToggle.cs} | 11 +++++------ ...ger.cs.meta => MaterialColorToggle.cs.meta} | 0 .../SimpleEvents/SimpleEventsScene.unity | 4 ++-- .../SimpleEvents/ToggleColorEvent.asset | 18 ++++++++++++++++++ .../SimpleEvents/ToggleColorEvent.asset.meta | 8 ++++++++ 9 files changed, 39 insertions(+), 13 deletions(-) rename Assets/Samples/{SimpleEvents => EventsWithArguments}/ChangeColorEvent.asset (100%) rename Assets/Samples/{SimpleEvents => EventsWithArguments}/ChangeColorEvent.asset.meta (100%) rename Assets/Samples/SimpleEvents/{MaterialColorChanger.cs => MaterialColorToggle.cs} (59%) rename Assets/Samples/SimpleEvents/{MaterialColorChanger.cs.meta => MaterialColorToggle.cs.meta} (100%) create mode 100644 Assets/Samples/SimpleEvents/ToggleColorEvent.asset create mode 100644 Assets/Samples/SimpleEvents/ToggleColorEvent.asset.meta diff --git a/Assets/Samples/SimpleEvents/ChangeColorEvent.asset b/Assets/Samples/EventsWithArguments/ChangeColorEvent.asset similarity index 100% rename from Assets/Samples/SimpleEvents/ChangeColorEvent.asset rename to Assets/Samples/EventsWithArguments/ChangeColorEvent.asset diff --git a/Assets/Samples/SimpleEvents/ChangeColorEvent.asset.meta b/Assets/Samples/EventsWithArguments/ChangeColorEvent.asset.meta similarity index 100% rename from Assets/Samples/SimpleEvents/ChangeColorEvent.asset.meta rename to Assets/Samples/EventsWithArguments/ChangeColorEvent.asset.meta diff --git a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity index 365a4fe..be98ee5 100644 --- a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity +++ b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity @@ -811,7 +811,7 @@ MonoBehaviour: m_GameObject: {fileID: 1972673856} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e3e861e18fd61714b8259b6e6b81974b, type: 3} + m_Script: {fileID: 11500000, guid: 88668e2b47742a14e88066f960d2f331, type: 3} m_Name: m_EditorClassIdentifier: --- !u!23 &1972673858 diff --git a/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs b/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs index b9fba45..fcdc6be 100644 --- a/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs +++ b/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs @@ -12,12 +12,13 @@ private void Awake() material = GetComponent().material; } - public void ToggleColor() + public void ChangeColor(float value) { var color = material.color; - material.color = color == Color.black - ? Color.white - : Color.black; + color.r = value; + color.g = value; + color.b = value; + material.color = color; } } } diff --git a/Assets/Samples/SimpleEvents/MaterialColorChanger.cs b/Assets/Samples/SimpleEvents/MaterialColorToggle.cs similarity index 59% rename from Assets/Samples/SimpleEvents/MaterialColorChanger.cs rename to Assets/Samples/SimpleEvents/MaterialColorToggle.cs index 76c776f..5f93f33 100644 --- a/Assets/Samples/SimpleEvents/MaterialColorChanger.cs +++ b/Assets/Samples/SimpleEvents/MaterialColorToggle.cs @@ -3,7 +3,7 @@ namespace ScriptableEvents.SimpleEvents { [RequireComponent(typeof(MeshRenderer))] - public class MaterialColorChanger : MonoBehaviour + public class MaterialColorToggle : MonoBehaviour { private Material material; @@ -12,13 +12,12 @@ private void Awake() material = GetComponent().material; } - public void ChangeColor(float value) + public void ToggleColor() { var color = material.color; - color.r = value; - color.g = value; - color.b = value; - material.color = color; + material.color = color == Color.black + ? Color.white + : Color.black; } } } diff --git a/Assets/Samples/SimpleEvents/MaterialColorChanger.cs.meta b/Assets/Samples/SimpleEvents/MaterialColorToggle.cs.meta similarity index 100% rename from Assets/Samples/SimpleEvents/MaterialColorChanger.cs.meta rename to Assets/Samples/SimpleEvents/MaterialColorToggle.cs.meta diff --git a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity index 7f261a9..f2e88fe 100644 --- a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity +++ b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity @@ -522,7 +522,7 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 11400000, guid: 42d9aaec5884bc746b5e0ca61b22d5d5, type: 2} + - m_Target: {fileID: 11400000, guid: d00456c7b79fe934e94fc3ea78469b7a, type: 2} m_MethodName: Raise m_Mode: 1 m_Arguments: @@ -886,7 +886,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2300d56ac22446e59de6de2fb87235d1, type: 3} m_Name: m_EditorClassIdentifier: - scriptableEvent: {fileID: 11400000, guid: 42d9aaec5884bc746b5e0ca61b22d5d5, type: 2} + scriptableEvent: {fileID: 11400000, guid: d00456c7b79fe934e94fc3ea78469b7a, type: 2} onRaised: m_PersistentCalls: m_Calls: diff --git a/Assets/Samples/SimpleEvents/ToggleColorEvent.asset b/Assets/Samples/SimpleEvents/ToggleColorEvent.asset new file mode 100644 index 0000000..f176c23 --- /dev/null +++ b/Assets/Samples/SimpleEvents/ToggleColorEvent.asset @@ -0,0 +1,18 @@ +%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: 3ca9d72c0f5043e9b9ed7e25d63422f5, type: 3} + m_Name: ToggleColorEvent + m_EditorClassIdentifier: + description: + lockDescription: 1 + suppressExceptions: 0 + trace: 0 diff --git a/Assets/Samples/SimpleEvents/ToggleColorEvent.asset.meta b/Assets/Samples/SimpleEvents/ToggleColorEvent.asset.meta new file mode 100644 index 0000000..a062008 --- /dev/null +++ b/Assets/Samples/SimpleEvents/ToggleColorEvent.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d00456c7b79fe934e94fc3ea78469b7a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: From c8c555995af60d80fc7ddb7d42689f02d03904b3 Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 14:03:14 +0200 Subject: [PATCH 23/26] Add custom event example --- Assets/Samples/CustomEvents.meta | 8 + .../CustomEvents/CustomEventsScene.unity | 2210 +++++++++++++++++ .../CustomEvents/CustomEventsScene.unity.meta | 7 + Assets/Samples/CustomEvents/Editor.meta | 8 + .../MaterialDataScriptableEventEditor.cs | 25 + .../MaterialDataScriptableEventEditor.cs.meta | 11 + .../Samples/CustomEvents/MaterialChanger.cs | 21 + .../CustomEvents/MaterialChanger.cs.meta | 3 + Assets/Samples/CustomEvents/MaterialData.cs | 17 + .../Samples/CustomEvents/MaterialData.cs.meta | 3 + .../MaterialDataChangeEvent.asset | 18 + .../MaterialDataChangeEvent.asset.meta | 8 + .../MaterialDataScriptableEvent.cs | 12 + .../MaterialDataScriptableEvent.cs.meta | 3 + .../MaterialDataScriptableEventListener.cs | 14 + ...aterialDataScriptableEventListener.cs.meta | 3 + .../CustomEvents/MaterialDataUnityEvent.cs | 10 + .../MaterialDataUnityEvent.cs.meta | 3 + .../CustomEvents/MaterialOptionsHandler.cs | 48 + .../MaterialOptionsHandler.cs.meta | 11 + 20 files changed, 2443 insertions(+) create mode 100644 Assets/Samples/CustomEvents.meta create mode 100644 Assets/Samples/CustomEvents/CustomEventsScene.unity create mode 100644 Assets/Samples/CustomEvents/CustomEventsScene.unity.meta create mode 100644 Assets/Samples/CustomEvents/Editor.meta create mode 100644 Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs create mode 100644 Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta create mode 100644 Assets/Samples/CustomEvents/MaterialChanger.cs create mode 100644 Assets/Samples/CustomEvents/MaterialChanger.cs.meta create mode 100644 Assets/Samples/CustomEvents/MaterialData.cs create mode 100644 Assets/Samples/CustomEvents/MaterialData.cs.meta create mode 100644 Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset create mode 100644 Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta create mode 100644 Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs create mode 100644 Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta create mode 100644 Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs create mode 100644 Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta create mode 100644 Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs create mode 100644 Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta create mode 100644 Assets/Samples/CustomEvents/MaterialOptionsHandler.cs create mode 100644 Assets/Samples/CustomEvents/MaterialOptionsHandler.cs.meta diff --git a/Assets/Samples/CustomEvents.meta b/Assets/Samples/CustomEvents.meta new file mode 100644 index 0000000..02f97e6 --- /dev/null +++ b/Assets/Samples/CustomEvents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 669c792519f2e9b4996215c7db31d5ec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/CustomEvents/CustomEventsScene.unity b/Assets/Samples/CustomEvents/CustomEventsScene.unity new file mode 100644 index 0000000..fd46d4f --- /dev/null +++ b/Assets/Samples/CustomEvents/CustomEventsScene.unity @@ -0,0 +1,2210 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &77099691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 77099692} + - component: {fileID: 77099695} + - component: {fileID: 77099694} + - component: {fileID: 77099693} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &77099692 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77099691} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 717997524} + m_Father: {fileID: 1354972338} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &77099693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77099691} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &77099694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77099691} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &77099695 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77099691} + m_CullTransparentMesh: 0 +--- !u!1 &141972452 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 141972453} + - component: {fileID: 141972455} + - component: {fileID: 141972454} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &141972453 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 141972452} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 505419880} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &141972454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 141972452} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: White +--- !u!222 &141972455 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 141972452} + m_CullTransparentMesh: 0 +--- !u!1 &476993018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 476993019} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &476993019 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476993018} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 576385275} + m_Father: {fileID: 1144044471} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &505419879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 505419880} + - component: {fileID: 505419883} + - component: {fileID: 505419882} + - component: {fileID: 505419881} + m_Layer: 5 + m_Name: Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &505419880 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505419879} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 141972453} + - {fileID: 1904093297} + - {fileID: 1354972338} + m_Father: {fileID: 1815001690} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 32} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &505419881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505419879} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d0b652f32a2cc243917e4028fa0f046, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 505419882} + m_Template: {fileID: 1354972338} + m_CaptionText: {fileID: 141972454} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 1595682152} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: White + m_Image: {fileID: 0} + - m_Text: Red + m_Image: {fileID: 0} + - m_Text: Green + m_Image: {fileID: 0} + - m_Text: Blue + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1815001691} + m_MethodName: OnChangeColor + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_AlphaFadeSpeed: 0.15 +--- !u!114 &505419882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505419879} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &505419883 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505419879} + m_CullTransparentMesh: 0 +--- !u!1 &576385274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 576385275} + - component: {fileID: 576385277} + - component: {fileID: 576385276} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &576385275 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576385274} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 476993019} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.2} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &576385276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576385274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &576385277 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576385274} + m_CullTransparentMesh: 0 +--- !u!1 &579522505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 579522507} + - component: {fileID: 579522506} + m_Layer: 0 + m_Name: DirectionalLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &579522506 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579522505} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &579522507 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579522505} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1560495123} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &717997523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 717997524} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &717997524 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717997523} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1600359325} + m_Father: {fileID: 77099692} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &996868308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 996868309} + - component: {fileID: 996868311} + - component: {fileID: 996868310} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &996868309 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996868308} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2091594018} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &996868310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996868308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &996868311 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996868308} + m_CullTransparentMesh: 0 +--- !u!1 &1144044470 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1144044471} + - component: {fileID: 1144044474} + - component: {fileID: 1144044473} + - component: {fileID: 1144044472} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1144044471 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144044470} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 476993019} + m_Father: {fileID: 1354972338} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1144044472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144044470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 576385276} + m_HandleRect: {fileID: 576385275} + m_Direction: 2 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1144044473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144044470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1144044474 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144044470} + m_CullTransparentMesh: 0 +--- !u!1 &1194471405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1194471408} + - component: {fileID: 1194471407} + - component: {fileID: 1194471406} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1194471406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1194471407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1194471408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1194471405} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1711634209} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1315013218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1315013221} + - component: {fileID: 1315013220} + - component: {fileID: 1315013219} + m_Layer: 0 + m_Name: MainCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1315013219 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_Enabled: 1 +--- !u!20 &1315013220 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1315013221 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315013218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1560495123} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1354972337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1354972338} + - component: {fileID: 1354972341} + - component: {fileID: 1354972340} + - component: {fileID: 1354972339} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1354972338 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1354972337} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 77099692} + - {fileID: 1144044471} + m_Father: {fileID: 505419880} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1354972339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1354972337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 717997524} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 77099692} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1144044472} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1354972340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1354972337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1354972341 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1354972337} + m_CullTransparentMesh: 0 +--- !u!1 &1355824719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1355824720} + - component: {fileID: 1355824722} + - component: {fileID: 1355824721} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1355824720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355824719} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2133235091} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1355824721 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355824719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1355824722 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355824719} + m_CullTransparentMesh: 0 +--- !u!1 &1560495122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1560495123} + m_Layer: 0 + m_Name: Setup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1560495123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560495122} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1315013221} + - {fileID: 579522507} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1595682150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1595682151} + - component: {fileID: 1595682153} + - component: {fileID: 1595682152} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1595682151 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595682150} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1600359325} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1595682152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595682150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &1595682153 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595682150} + m_CullTransparentMesh: 0 +--- !u!1 &1600359324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1600359325} + - component: {fileID: 1600359326} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1600359325 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600359324} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2037437775} + - {fileID: 1842968514} + - {fileID: 1595682151} + m_Father: {fileID: 717997524} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1600359326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600359324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2037437776} + toggleTransition: 1 + graphic: {fileID: 1842968515} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &1711634208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1711634209} + m_Layer: 0 + m_Name: UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1711634209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711634208} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1815001690} + - {fileID: 1194471408} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1815001686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1815001690} + - component: {fileID: 1815001689} + - component: {fileID: 1815001688} + - component: {fileID: 1815001687} + - component: {fileID: 1815001691} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1815001687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1815001688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1815001689 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1815001690 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 2091594018} + - {fileID: 505419880} + m_Father: {fileID: 1711634209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1815001691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1815001686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ea7d8baaa3cec734e94b4adf9dcd73fc, type: 3} + m_Name: + m_EditorClassIdentifier: + onMaterialChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11400000, guid: 4101eb954e9cc7b4f94add4909259cf5, type: 2} + m_MethodName: Raise + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1842968513 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1842968514} + - component: {fileID: 1842968516} + - component: {fileID: 1842968515} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1842968514 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842968513} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1600359325} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1842968515 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842968513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1842968516 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842968513} + m_CullTransparentMesh: 0 +--- !u!1 &1901124777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1901124778} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1901124778 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901124777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1935845758} + m_Father: {fileID: 2091594018} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1904093296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904093297} + - component: {fileID: 1904093299} + - component: {fileID: 1904093298} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1904093297 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904093296} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 505419880} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1904093298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904093296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1904093299 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904093296} + m_CullTransparentMesh: 0 +--- !u!1 &1935845757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1935845758} + - component: {fileID: 1935845760} + - component: {fileID: 1935845759} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1935845758 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935845757} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1901124778} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1935845759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935845757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1935845760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935845757} + m_CullTransparentMesh: 0 +--- !u!1 &1972673856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1972673860} + - component: {fileID: 1972673859} + - component: {fileID: 1972673858} + - component: {fileID: 1972673857} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1972673857 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f39f6e9127645ad87fb98c084cd9965, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!23 &1972673858 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1972673859 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1972673860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972673856} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 3, y: 3, z: 3} + m_Children: [] + m_Father: {fileID: 2081766997} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2037437774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2037437775} + - component: {fileID: 2037437777} + - component: {fileID: 2037437776} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2037437775 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037437774} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1600359325} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2037437776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037437774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2037437777 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037437774} + m_CullTransparentMesh: 0 +--- !u!1 &2081766996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2081766997} + m_Layer: 0 + m_Name: Sample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2081766997 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081766996} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1972673860} + - {fileID: 2085729137} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2085729135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2085729137} + - component: {fileID: 2085729136} + m_Layer: 0 + m_Name: MaterialDataChangeEvent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2085729136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085729135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f129bceb33ca40bebd7a270e22fbacd9, type: 3} + m_Name: + m_EditorClassIdentifier: + scriptableEvent: {fileID: 11400000, guid: 4101eb954e9cc7b4f94add4909259cf5, type: 2} + onRaised: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1972673857} + m_MethodName: ChangeMaterial + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!4 &2085729137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085729135} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2081766997} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2091594017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2091594018} + - component: {fileID: 2091594019} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2091594018 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091594017} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 996868309} + - {fileID: 1901124778} + - {fileID: 2133235091} + m_Father: {fileID: 1815001690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 64} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2091594019 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091594017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1355824721} + m_FillRect: {fileID: 1935845758} + m_HandleRect: {fileID: 1355824720} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1815001691} + m_MethodName: OnChangeMetallic + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2133235090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2133235091} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2133235091 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133235090} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1355824720} + m_Father: {fileID: 2091594018} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Samples/CustomEvents/CustomEventsScene.unity.meta b/Assets/Samples/CustomEvents/CustomEventsScene.unity.meta new file mode 100644 index 0000000..3d3ab6f --- /dev/null +++ b/Assets/Samples/CustomEvents/CustomEventsScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cb809b3c415029840a2bad5c079dd504 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/CustomEvents/Editor.meta b/Assets/Samples/CustomEvents/Editor.meta new file mode 100644 index 0000000..c42d3ba --- /dev/null +++ b/Assets/Samples/CustomEvents/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f676735a9240e5438bc8ce5764eee93 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs b/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs new file mode 100644 index 0000000..74b7b56 --- /dev/null +++ b/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs @@ -0,0 +1,25 @@ +using ScriptableEvents.Editor; +using UnityEditor; +using UnityEngine; + +namespace ScriptableEvents.CustomEvents.Editor +{ + [CustomEditor(typeof(MaterialDataScriptableEvent))] + public class MaterialDataScriptableEventEditor : BaseScriptableEventEditor + { + protected override MaterialData DrawArgField(MaterialData value) + { + if (value == null) + { + return new MaterialData(0f, Color.white); + } + + EditorGUILayout.BeginVertical(); + var metallic = EditorGUILayout.Slider("Metallic", value.Metallic, 0f, 1f); + var color = EditorGUILayout.ColorField("Color", value.Color); + EditorGUILayout.EndVertical(); + + return new MaterialData(metallic, color); + } + } +} diff --git a/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta b/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta new file mode 100644 index 0000000..e90ddca --- /dev/null +++ b/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd23b8159f166c543a3a3433e29ae1a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/CustomEvents/MaterialChanger.cs b/Assets/Samples/CustomEvents/MaterialChanger.cs new file mode 100644 index 0000000..4d2a690 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialChanger.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace ScriptableEvents.CustomEvents +{ + public class MaterialChanger : MonoBehaviour + { + private static readonly int Metallic = Shader.PropertyToID("_Metallic"); + private Material material; + + private void Awake() + { + material = GetComponent().material; + } + + public void ChangeMaterial(MaterialData data) + { + material.color = data.Color; + material.SetFloat(Metallic, data.Metallic); + } + } +} diff --git a/Assets/Samples/CustomEvents/MaterialChanger.cs.meta b/Assets/Samples/CustomEvents/MaterialChanger.cs.meta new file mode 100644 index 0000000..4724413 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialChanger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1f39f6e9127645ad87fb98c084cd9965 +timeCreated: 1611488611 \ No newline at end of file diff --git a/Assets/Samples/CustomEvents/MaterialData.cs b/Assets/Samples/CustomEvents/MaterialData.cs new file mode 100644 index 0000000..6546843 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialData.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace ScriptableEvents.CustomEvents +{ + public class MaterialData + { + public float Metallic { get; } + + public Color Color { get; } + + public MaterialData(float metallic, Color color) + { + Metallic = metallic; + Color = color; + } + } +} diff --git a/Assets/Samples/CustomEvents/MaterialData.cs.meta b/Assets/Samples/CustomEvents/MaterialData.cs.meta new file mode 100644 index 0000000..9a54dc8 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b17a93b78ca44f78a7d5438bcf3bcebb +timeCreated: 1611488469 \ No newline at end of file diff --git a/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset b/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset new file mode 100644 index 0000000..4a8a8a3 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset @@ -0,0 +1,18 @@ +%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: 3ecea89908c4413b8a1c24d87c376e74, type: 3} + m_Name: MaterialDataChangeEvent + m_EditorClassIdentifier: + description: + lockDescription: 1 + suppressExceptions: 0 + trace: 0 diff --git a/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta b/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta new file mode 100644 index 0000000..99888d3 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4101eb954e9cc7b4f94add4909259cf5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs b/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs new file mode 100644 index 0000000..3aac5b7 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ScriptableEvents.CustomEvents +{ + [CreateAssetMenu( + fileName = "MaterialDataScriptableEvent", + menuName = "Custom Scriptable Events/Material Data Scriptable Event" + )] + public class MaterialDataScriptableEvent : BaseScriptableEvent + { + } +} diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta b/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta new file mode 100644 index 0000000..fa3615f --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3ecea89908c4413b8a1c24d87c376e74 +timeCreated: 1611488685 \ No newline at end of file diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs b/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs new file mode 100644 index 0000000..b65e8de --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace ScriptableEvents.CustomEvents +{ + [AddComponentMenu("Custom Scriptable Events/Material Data Event Listener")] + public class MaterialDataScriptableEventListener + : BaseScriptableEventListener< + MaterialDataScriptableEvent, + MaterialDataUnityEvent, + MaterialData + > + { + } +} diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta b/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta new file mode 100644 index 0000000..525d588 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f129bceb33ca40bebd7a270e22fbacd9 +timeCreated: 1611488763 \ No newline at end of file diff --git a/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs b/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs new file mode 100644 index 0000000..0dcc8bc --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs @@ -0,0 +1,10 @@ +using System; +using UnityEngine.Events; + +namespace ScriptableEvents.CustomEvents +{ + [Serializable] + public class MaterialDataUnityEvent : UnityEvent + { + } +} diff --git a/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta b/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta new file mode 100644 index 0000000..8096ac0 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 89412734c6b84b038eb55c96ae664811 +timeCreated: 1611488545 \ No newline at end of file diff --git a/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs b/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs new file mode 100644 index 0000000..d31962b --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs @@ -0,0 +1,48 @@ +using UnityEngine; + +namespace ScriptableEvents.CustomEvents +{ + public class MaterialOptionsHandler : MonoBehaviour + { + [SerializeField] + private MaterialDataUnityEvent onMaterialChanged; + + private float metallic; + private Color color = Color.white; + + public void OnChangeMetallic(float newMetallic) + { + metallic = newMetallic; + InvokeEvent(); + } + + public void OnChangeColor(int colorIndex) + { + switch (colorIndex) + { + case 0: + color = Color.white; + break; + case 1: + color = Color.red; + break; + case 2: + color = Color.green; + break; + case 3: + color = Color.blue; + break; + default: + color = Color.black; + break; + } + + InvokeEvent(); + } + + private void InvokeEvent() + { + onMaterialChanged.Invoke(new MaterialData(metallic, color)); + } + } +} diff --git a/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs.meta b/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs.meta new file mode 100644 index 0000000..da8d820 --- /dev/null +++ b/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea7d8baaa3cec734e94b4adf9dcd73fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From f30f0205fe6f7b9b6b7e86b8c55b6fcc91075ffe Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 14:05:57 +0200 Subject: [PATCH 24/26] Cleanup sample scenes --- Assets/Samples/CustomEvents/CustomEventsScene.unity | 6 +++--- .../EventsWithArguments/EventsWithArgumentsScene.unity | 6 +++--- Assets/Samples/SimpleEvents/SimpleEventsScene.unity | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Assets/Samples/CustomEvents/CustomEventsScene.unity b/Assets/Samples/CustomEvents/CustomEventsScene.unity index fd46d4f..a3bd611 100644 --- a/Assets/Samples/CustomEvents/CustomEventsScene.unity +++ b/Assets/Samples/CustomEvents/CustomEventsScene.unity @@ -337,7 +337,7 @@ GameObject: - component: {fileID: 505419882} - component: {fileID: 505419881} m_Layer: 5 - m_Name: Dropdown + m_Name: ColorDropdown m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -2025,7 +2025,7 @@ GameObject: - component: {fileID: 2085729137} - component: {fileID: 2085729136} m_Layer: 0 - m_Name: MaterialDataChangeEvent + m_Name: MaterialDataChangeEventListener m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -2083,7 +2083,7 @@ GameObject: - component: {fileID: 2091594018} - component: {fileID: 2091594019} m_Layer: 5 - m_Name: Slider + m_Name: MetallicSlider m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity index be98ee5..8d19af7 100644 --- a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity +++ b/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity @@ -958,8 +958,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2085729135} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 419.5, y: 291.5, z: 0} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2081766997} @@ -976,7 +976,7 @@ GameObject: - component: {fileID: 2091594018} - component: {fileID: 2091594019} m_Layer: 5 - m_Name: Slider + m_Name: ColorSlider m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity index f2e88fe..f3b2da4 100644 --- a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity +++ b/Assets/Samples/SimpleEvents/SimpleEventsScene.unity @@ -453,7 +453,7 @@ GameObject: - component: {fileID: 1467385997} - component: {fileID: 1467385996} m_Layer: 5 - m_Name: Button + m_Name: ToggleColorButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -908,8 +908,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2085729135} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 419.5, y: 291.5, z: 0} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2081766997} From f37c4543f3a8236da68632c3f767c93524413afb Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 15:06:57 +0200 Subject: [PATCH 25/26] Move library assets to Packages/com.chark.scriptable-events --- Assets/Runtime/Chark.ScriptableEvents.asmdef | 3 - Assets/Scenes.meta | 8 + Assets/Scenes/TestScene.unity | 298 ++++++++++++++++++ Assets/Scenes/TestScene.unity.meta | 7 + Assets/package.json | 23 -- .../Documentation~/index.md | 0 .../com.chark.scriptable-events}/Editor.meta | 0 .../Editor/BaseScriptableEventEditor.cs | 0 .../Editor/BaseScriptableEventEditor.cs.meta | 0 .../Editor/BoolScriptableEventEditor.cs | 0 .../Editor/BoolScriptableEventEditor.cs.meta | 0 .../Chark.ScriptableEvents.Editor.asmdef | 1 + .../Chark.ScriptableEvents.Editor.asmdef.meta | 0 .../Editor/FloatScriptableEventEditor.cs | 0 .../Editor/FloatScriptableEventEditor.cs.meta | 0 .../Editor/GameObjectScriptableEventEditor.cs | 0 .../GameObjectScriptableEventEditor.cs.meta | 0 .../Editor/IntScriptableEventEditor.cs | 0 .../Editor/IntScriptableEventEditor.cs.meta | 0 .../Editor/SimpleScriptableEventEditor.cs | 0 .../SimpleScriptableEventEditor.cs.meta | 0 .../Editor/StringScriptableEventEditor.cs | 0 .../StringScriptableEventEditor.cs.meta | 0 .../Editor/TransformScriptableEventEditor.cs | 0 .../TransformScriptableEventEditor.cs.meta | 0 .../Editor/Vector2ScriptableEventEditor.cs | 0 .../Vector2ScriptableEventEditor.cs.meta | 0 .../Editor/Vector3ScriptableEventEditor.cs | 0 .../Vector3ScriptableEventEditor.cs.meta | 0 .../com.chark.scriptable-events}/Runtime.meta | 0 .../Runtime/BaseScriptableEvent.cs | 0 .../Runtime/BaseScriptableEvent.cs.meta | 0 .../Runtime/BaseScriptableEventListener.cs | 0 .../BaseScriptableEventListener.cs.meta | 0 .../Runtime/Bool.meta | 0 .../Runtime/Bool/BoolScriptableEvent.cs | 0 .../Runtime/Bool/BoolScriptableEvent.cs.meta | 0 .../Bool/BoolScriptableEventListener.cs | 0 .../Bool/BoolScriptableEventListener.cs.meta | 0 .../Runtime/Bool/BoolUnityEvent.cs | 0 .../Runtime/Bool/BoolUnityEvent.cs.meta | 0 .../Runtime/Chark.ScriptableEvents.asmdef | 4 + .../Chark.ScriptableEvents.asmdef.meta | 0 .../Runtime/Float.meta | 0 .../Runtime/Float/FloatScriptableEvent.cs | 0 .../Float/FloatScriptableEvent.cs.meta | 0 .../Float/FloatScriptableEventListener.cs | 0 .../FloatScriptableEventListener.cs.meta | 0 .../Runtime/Float/FloatUnityEvent.cs | 0 .../Runtime/Float/FloatUnityEvent.cs.meta | 0 .../Runtime/GameObject.meta | 0 .../GameObject/GameObjectGameEventListener.cs | 0 .../GameObjectGameEventListener.cs.meta | 0 .../GameObject/GameObjectScriptableEvent.cs | 0 .../GameObjectScriptableEvent.cs.meta | 0 .../GameObject/GameObjectUnityEvent.cs | 0 .../GameObject/GameObjectUnityEvent.cs.meta | 0 .../Runtime/IScriptableEvent.cs | 0 .../Runtime/IScriptableEvent.cs.meta | 0 .../Runtime/IScriptableEventListener.cs | 0 .../Runtime/IScriptableEventListener.cs.meta | 0 .../Runtime/Int.meta | 0 .../Runtime/Int/IntScriptableEvent.cs | 0 .../Runtime/Int/IntScriptableEvent.cs.meta | 0 .../Runtime/Int/IntScriptableEventListener.cs | 0 .../Int/IntScriptableEventListener.cs.meta | 0 .../Runtime/Int/IntUnityEvent.cs | 0 .../Runtime/Int/IntUnityEvent.cs.meta | 0 .../Runtime/Simple.meta | 0 .../Runtime/Simple/SimpleArg.cs | 0 .../Runtime/Simple/SimpleArg.cs.meta | 0 .../Runtime/Simple/SimpleScriptableEvent.cs | 0 .../Simple/SimpleScriptableEvent.cs.meta | 0 .../Simple/SimpleScriptableEventListener.cs | 0 .../SimpleScriptableEventListener.cs.meta | 0 .../Runtime/Simple/SimpleUnityEvent.cs | 0 .../Runtime/Simple/SimpleUnityEvent.cs.meta | 0 .../Runtime/String.meta | 0 .../Runtime/String/StringScriptableEvent.cs | 0 .../String/StringScriptableEvent.cs.meta | 0 .../String/StringScriptableEventListener.cs | 0 .../StringScriptableEventListener.cs.meta | 0 .../Runtime/String/StringUnityEvent.cs | 0 .../Runtime/String/StringUnityEvent.cs.meta | 0 .../Runtime/Transform.meta | 0 .../Transform/TransformScriptableEvent.cs | 0 .../TransformScriptableEvent.cs.meta | 0 .../TransformScriptableEventListener.cs | 0 .../TransformScriptableEventListener.cs.meta | 0 .../Runtime/Transform/TransformUnityEvent.cs | 0 .../Transform/TransformUnityEvent.cs.meta | 0 .../Runtime/Vector2.meta | 0 .../Runtime/Vector2/Vector2ScriptableEvent.cs | 0 .../Vector2/Vector2ScriptableEvent.cs.meta | 0 .../Vector2/Vector2ScriptableEventListener.cs | 0 .../Vector2ScriptableEventListener.cs.meta | 0 .../Runtime/Vector2/Vector2UnityEvent.cs | 0 .../Runtime/Vector2/Vector2UnityEvent.cs.meta | 0 .../Runtime/Vector3.meta | 0 .../Runtime/Vector3/Vector3ScriptableEvent.cs | 0 .../Vector3/Vector3ScriptableEvent.cs.meta | 0 .../Vector3/Vector3ScriptableEventListener.cs | 0 .../Vector3ScriptableEventListener.cs.meta | 0 .../Runtime/Vector3/Vector3UnityEvent.cs | 0 .../Runtime/Vector3/Vector3UnityEvent.cs.meta | 0 .../com.chark.scriptable-events}/Samples.meta | 0 .../Chark.ScriptableEvents.Samples.asmdef | 1 + ...Chark.ScriptableEvents.Samples.asmdef.meta | 0 .../Samples/CustomEvents.meta | 0 .../CustomEvents/CustomEventsScene.unity | 0 .../CustomEvents/CustomEventsScene.unity.meta | 0 .../Samples/CustomEvents/Editor.meta | 0 .../MaterialDataScriptableEventEditor.cs | 2 +- .../MaterialDataScriptableEventEditor.cs.meta | 0 .../Samples/CustomEvents/MaterialChanger.cs | 2 +- .../CustomEvents/MaterialChanger.cs.meta | 0 .../Samples/CustomEvents/MaterialData.cs | 2 +- .../Samples/CustomEvents/MaterialData.cs.meta | 0 .../MaterialDataChangeEvent.asset | 5 +- .../MaterialDataChangeEvent.asset.meta | 0 .../MaterialDataScriptableEvent.cs | 2 +- .../MaterialDataScriptableEvent.cs.meta | 0 .../MaterialDataScriptableEventListener.cs | 2 +- ...aterialDataScriptableEventListener.cs.meta | 0 .../CustomEvents/MaterialDataUnityEvent.cs | 2 +- .../MaterialDataUnityEvent.cs.meta | 0 .../CustomEvents/MaterialOptionsHandler.cs | 2 +- .../MaterialOptionsHandler.cs.meta | 0 .../Samples/EventsWithArguments.meta | 0 .../ChangeColorEvent.asset | 5 +- .../ChangeColorEvent.asset.meta | 0 .../EventsWithArgumentsScene.unity | 0 .../EventsWithArgumentsScene.unity.meta | 0 .../MaterialColorChanger.cs | 0 .../MaterialColorChanger.cs.meta | 0 .../Samples/SimpleEvents.meta | 0 .../SimpleEvents/MaterialColorToggle.cs | 0 .../SimpleEvents/MaterialColorToggle.cs.meta | 0 .../SimpleEvents/SimpleEventsScene.unity | 0 .../SimpleEvents/SimpleEventsScene.unity.meta | 0 .../SimpleEvents/ToggleColorEvent.asset | 5 +- .../SimpleEvents/ToggleColorEvent.asset.meta | 0 .../com.chark.scriptable-events}/Tests.meta | 0 .../Tests/Editor.meta | 0 ...Chark.ScriptableEvents.Editor.Tests.asmdef | 1 + ....ScriptableEvents.Editor.Tests.asmdef.meta | 0 .../Editor/ScriptableEventAttributeTest.cs | 0 .../ScriptableEventAttributeTest.cs.meta | 0 .../ScriptableEventAttributeTestSource.cs | 0 ...ScriptableEventAttributeTestSource.cs.meta | 0 .../Tests/Runtime.meta | 0 .../Chark.ScriptableEvents.Tests.asmdef | 1 + .../Chark.ScriptableEvents.Tests.asmdef.meta | 0 .../Runtime/MockScriptableEventListener.cs | 0 .../MockScriptableEventListener.cs.meta | 0 .../Tests/Runtime/ReflectionExtensions.cs | 0 .../Runtime/ReflectionExtensions.cs.meta | 0 .../Tests/Runtime/ScriptableEventTest.cs | 0 .../Tests/Runtime/ScriptableEventTest.cs.meta | 0 .../Runtime/ScriptableEventTestSource.cs | 0 .../Runtime/ScriptableEventTestSource.cs.meta | 0 .../Runtime/SimpleScriptableEventTest.cs | 0 .../Runtime/SimpleScriptableEventTest.cs.meta | 0 .../com.chark.scriptable-events/package.json | 28 ++ .../package.json.meta | 0 Packages/packages-lock.json | 6 + 166 files changed, 374 insertions(+), 36 deletions(-) delete mode 100644 Assets/Runtime/Chark.ScriptableEvents.asmdef create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/TestScene.unity create mode 100644 Assets/Scenes/TestScene.unity.meta delete mode 100644 Assets/package.json rename {Assets => Packages/com.chark.scriptable-events}/Documentation~/index.md (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/BaseScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/BaseScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/BoolScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/BoolScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/Chark.ScriptableEvents.Editor.asmdef (75%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/Chark.ScriptableEvents.Editor.asmdef.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/FloatScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/FloatScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/GameObjectScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/GameObjectScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/IntScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/IntScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/SimpleScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/SimpleScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/StringScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/StringScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/TransformScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/TransformScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/Vector2ScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/Vector2ScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/Vector3ScriptableEventEditor.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Editor/Vector3ScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/BaseScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/BaseScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/BaseScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/BaseScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool/BoolScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool/BoolScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool/BoolScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool/BoolScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool/BoolUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Bool/BoolUnityEvent.cs.meta (100%) create mode 100644 Packages/com.chark.scriptable-events/Runtime/Chark.ScriptableEvents.asmdef rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Chark.ScriptableEvents.asmdef.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float/FloatScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float/FloatScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float/FloatScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float/FloatScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float/FloatUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Float/FloatUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject/GameObjectGameEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject/GameObjectGameEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject/GameObjectScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject/GameObjectScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject/GameObjectUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/GameObject/GameObjectUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/IScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/IScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/IScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/IScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int/IntScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int/IntScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int/IntScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int/IntScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int/IntUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Int/IntUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleArg.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleArg.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Simple/SimpleUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String/StringScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String/StringScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String/StringScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String/StringScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String/StringUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/String/StringUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform/TransformScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform/TransformScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform/TransformScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform/TransformScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform/TransformUnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Transform/TransformUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2/Vector2ScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2/Vector2ScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2/Vector2ScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2/Vector2UnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector2/Vector2UnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3/Vector3ScriptableEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3/Vector3ScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3/Vector3ScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3/Vector3UnityEvent.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Runtime/Vector3/Vector3UnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/Chark.ScriptableEvents.Samples.asmdef (74%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/Chark.ScriptableEvents.Samples.asmdef.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/CustomEventsScene.unity (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/CustomEventsScene.unity.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/Editor.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs (93%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialChanger.cs (91%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialChanger.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialData.cs (85%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialData.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataChangeEvent.asset (79%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataScriptableEvent.cs (85%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataScriptableEventListener.cs (87%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataUnityEvent.cs (75%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialOptionsHandler.cs (95%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/CustomEvents/MaterialOptionsHandler.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments/ChangeColorEvent.asset (81%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments/ChangeColorEvent.asset.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments/EventsWithArgumentsScene.unity (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments/MaterialColorChanger.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/EventsWithArguments/MaterialColorChanger.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents/MaterialColorToggle.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents/MaterialColorToggle.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents/SimpleEventsScene.unity (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents/SimpleEventsScene.unity.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents/ToggleColorEvent.asset (81%) rename {Assets => Packages/com.chark.scriptable-events}/Samples/SimpleEvents/ToggleColorEvent.asset.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef (82%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor/ScriptableEventAttributeTest.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor/ScriptableEventAttributeTest.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor/ScriptableEventAttributeTestSource.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef (77%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/MockScriptableEventListener.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/MockScriptableEventListener.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/ReflectionExtensions.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/ReflectionExtensions.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/ScriptableEventTest.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/ScriptableEventTest.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/ScriptableEventTestSource.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/ScriptableEventTestSource.cs.meta (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/SimpleScriptableEventTest.cs (100%) rename {Assets => Packages/com.chark.scriptable-events}/Tests/Runtime/SimpleScriptableEventTest.cs.meta (100%) create mode 100644 Packages/com.chark.scriptable-events/package.json rename {Assets => Packages/com.chark.scriptable-events}/package.json.meta (100%) diff --git a/Assets/Runtime/Chark.ScriptableEvents.asmdef b/Assets/Runtime/Chark.ScriptableEvents.asmdef deleted file mode 100644 index 97b15c7..0000000 --- a/Assets/Runtime/Chark.ScriptableEvents.asmdef +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "Chark.ScriptableEvents" -} diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..92c984a --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b4bb1d52a52c284cb16662ae1cfdbda +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity new file mode 100644 index 0000000..e894b54 --- /dev/null +++ b/Assets/Scenes/TestScene.unity @@ -0,0 +1,298 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &583905900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 583905903} + - component: {fileID: 583905902} + - component: {fileID: 583905901} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &583905901 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 583905900} + m_Enabled: 1 +--- !u!20 &583905902 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 583905900} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &583905903 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 583905900} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &778170384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 778170386} + - component: {fileID: 778170385} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &778170385 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778170384} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &778170386 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778170384} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/Assets/Scenes/TestScene.unity.meta b/Assets/Scenes/TestScene.unity.meta new file mode 100644 index 0000000..3392e20 --- /dev/null +++ b/Assets/Scenes/TestScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cb0fbeaa842ae914ca34ab5335d680e2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/package.json b/Assets/package.json deleted file mode 100644 index 1e5274c..0000000 --- a/Assets/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "com.chark.scriptable-events", - "displayName": "Scriptable Events", - "author": { - "name": "Chark", - "url": "https://chark.io" - }, - "version": "1.0.0", - "unity": "2019.4", - "description": "Extensible event system implemented via ScriptableObject", - "samples": [ - { - "displayName": "Game Events", - "description": "Shows how to use game events and listeners with individual prefabs.", - "path": "Samples/GameEvents" - }, - { - "displayName": "Mutable Objects", - "description": "Shows how to use mutable objects.", - "path": "Samples/MutableObjects" - } - ] -} diff --git a/Assets/Documentation~/index.md b/Packages/com.chark.scriptable-events/Documentation~/index.md similarity index 100% rename from Assets/Documentation~/index.md rename to Packages/com.chark.scriptable-events/Documentation~/index.md diff --git a/Assets/Editor.meta b/Packages/com.chark.scriptable-events/Editor.meta similarity index 100% rename from Assets/Editor.meta rename to Packages/com.chark.scriptable-events/Editor.meta diff --git a/Assets/Editor/BaseScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/BaseScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/BaseScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/BaseScriptableEventEditor.cs diff --git a/Assets/Editor/BaseScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/BaseScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/BaseScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/BaseScriptableEventEditor.cs.meta diff --git a/Assets/Editor/BoolScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/BoolScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/BoolScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/BoolScriptableEventEditor.cs diff --git a/Assets/Editor/BoolScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/BoolScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/BoolScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/BoolScriptableEventEditor.cs.meta diff --git a/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef b/Packages/com.chark.scriptable-events/Editor/Chark.ScriptableEvents.Editor.asmdef similarity index 75% rename from Assets/Editor/Chark.ScriptableEvents.Editor.asmdef rename to Packages/com.chark.scriptable-events/Editor/Chark.ScriptableEvents.Editor.asmdef index 6734d8f..9b57c3a 100644 --- a/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef +++ b/Packages/com.chark.scriptable-events/Editor/Chark.ScriptableEvents.Editor.asmdef @@ -1,5 +1,6 @@ { "name": "Chark.ScriptableEvents.Editor", + "rootNamespace": "ScriptableEvents.Editor", "references": [ "Chark.ScriptableEvents" ], diff --git a/Assets/Editor/Chark.ScriptableEvents.Editor.asmdef.meta b/Packages/com.chark.scriptable-events/Editor/Chark.ScriptableEvents.Editor.asmdef.meta similarity index 100% rename from Assets/Editor/Chark.ScriptableEvents.Editor.asmdef.meta rename to Packages/com.chark.scriptable-events/Editor/Chark.ScriptableEvents.Editor.asmdef.meta diff --git a/Assets/Editor/FloatScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/FloatScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/FloatScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/FloatScriptableEventEditor.cs diff --git a/Assets/Editor/FloatScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/FloatScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/FloatScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/FloatScriptableEventEditor.cs.meta diff --git a/Assets/Editor/GameObjectScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/GameObjectScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/GameObjectScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/GameObjectScriptableEventEditor.cs diff --git a/Assets/Editor/GameObjectScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/GameObjectScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/GameObjectScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/GameObjectScriptableEventEditor.cs.meta diff --git a/Assets/Editor/IntScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/IntScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/IntScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/IntScriptableEventEditor.cs diff --git a/Assets/Editor/IntScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/IntScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/IntScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/IntScriptableEventEditor.cs.meta diff --git a/Assets/Editor/SimpleScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/SimpleScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/SimpleScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/SimpleScriptableEventEditor.cs diff --git a/Assets/Editor/SimpleScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/SimpleScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/SimpleScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/SimpleScriptableEventEditor.cs.meta diff --git a/Assets/Editor/StringScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/StringScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/StringScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/StringScriptableEventEditor.cs diff --git a/Assets/Editor/StringScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/StringScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/StringScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/StringScriptableEventEditor.cs.meta diff --git a/Assets/Editor/TransformScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/TransformScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/TransformScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/TransformScriptableEventEditor.cs diff --git a/Assets/Editor/TransformScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/TransformScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/TransformScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/TransformScriptableEventEditor.cs.meta diff --git a/Assets/Editor/Vector2ScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/Vector2ScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/Vector2ScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/Vector2ScriptableEventEditor.cs diff --git a/Assets/Editor/Vector2ScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/Vector2ScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/Vector2ScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/Vector2ScriptableEventEditor.cs.meta diff --git a/Assets/Editor/Vector3ScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Editor/Vector3ScriptableEventEditor.cs similarity index 100% rename from Assets/Editor/Vector3ScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Editor/Vector3ScriptableEventEditor.cs diff --git a/Assets/Editor/Vector3ScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Editor/Vector3ScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Editor/Vector3ScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Editor/Vector3ScriptableEventEditor.cs.meta diff --git a/Assets/Runtime.meta b/Packages/com.chark.scriptable-events/Runtime.meta similarity index 100% rename from Assets/Runtime.meta rename to Packages/com.chark.scriptable-events/Runtime.meta diff --git a/Assets/Runtime/BaseScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/BaseScriptableEvent.cs similarity index 100% rename from Assets/Runtime/BaseScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/BaseScriptableEvent.cs diff --git a/Assets/Runtime/BaseScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/BaseScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/BaseScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/BaseScriptableEvent.cs.meta diff --git a/Assets/Runtime/BaseScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/BaseScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/BaseScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/BaseScriptableEventListener.cs diff --git a/Assets/Runtime/BaseScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/BaseScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/BaseScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/BaseScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Bool.meta b/Packages/com.chark.scriptable-events/Runtime/Bool.meta similarity index 100% rename from Assets/Runtime/Bool.meta rename to Packages/com.chark.scriptable-events/Runtime/Bool.meta diff --git a/Assets/Runtime/Bool/BoolScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Bool/BoolScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEvent.cs diff --git a/Assets/Runtime/Bool/BoolScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Bool/BoolScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEvent.cs.meta diff --git a/Assets/Runtime/Bool/BoolScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Bool/BoolScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEventListener.cs diff --git a/Assets/Runtime/Bool/BoolScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Bool/BoolScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Bool/BoolScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Bool/BoolUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Bool/BoolUnityEvent.cs similarity index 100% rename from Assets/Runtime/Bool/BoolUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Bool/BoolUnityEvent.cs diff --git a/Assets/Runtime/Bool/BoolUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Bool/BoolUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Bool/BoolUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Bool/BoolUnityEvent.cs.meta diff --git a/Packages/com.chark.scriptable-events/Runtime/Chark.ScriptableEvents.asmdef b/Packages/com.chark.scriptable-events/Runtime/Chark.ScriptableEvents.asmdef new file mode 100644 index 0000000..efffc5c --- /dev/null +++ b/Packages/com.chark.scriptable-events/Runtime/Chark.ScriptableEvents.asmdef @@ -0,0 +1,4 @@ +{ + "name": "Chark.ScriptableEvents", + "rootNamespace": "ScriptableEvents" +} diff --git a/Assets/Runtime/Chark.ScriptableEvents.asmdef.meta b/Packages/com.chark.scriptable-events/Runtime/Chark.ScriptableEvents.asmdef.meta similarity index 100% rename from Assets/Runtime/Chark.ScriptableEvents.asmdef.meta rename to Packages/com.chark.scriptable-events/Runtime/Chark.ScriptableEvents.asmdef.meta diff --git a/Assets/Runtime/Float.meta b/Packages/com.chark.scriptable-events/Runtime/Float.meta similarity index 100% rename from Assets/Runtime/Float.meta rename to Packages/com.chark.scriptable-events/Runtime/Float.meta diff --git a/Assets/Runtime/Float/FloatScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Float/FloatScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEvent.cs diff --git a/Assets/Runtime/Float/FloatScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Float/FloatScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEvent.cs.meta diff --git a/Assets/Runtime/Float/FloatScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Float/FloatScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEventListener.cs diff --git a/Assets/Runtime/Float/FloatScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Float/FloatScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Float/FloatScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Float/FloatUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Float/FloatUnityEvent.cs similarity index 100% rename from Assets/Runtime/Float/FloatUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Float/FloatUnityEvent.cs diff --git a/Assets/Runtime/Float/FloatUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Float/FloatUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Float/FloatUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Float/FloatUnityEvent.cs.meta diff --git a/Assets/Runtime/GameObject.meta b/Packages/com.chark.scriptable-events/Runtime/GameObject.meta similarity index 100% rename from Assets/Runtime/GameObject.meta rename to Packages/com.chark.scriptable-events/Runtime/GameObject.meta diff --git a/Assets/Runtime/GameObject/GameObjectGameEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectGameEventListener.cs similarity index 100% rename from Assets/Runtime/GameObject/GameObjectGameEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectGameEventListener.cs diff --git a/Assets/Runtime/GameObject/GameObjectGameEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectGameEventListener.cs.meta similarity index 100% rename from Assets/Runtime/GameObject/GameObjectGameEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectGameEventListener.cs.meta diff --git a/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectScriptableEvent.cs similarity index 100% rename from Assets/Runtime/GameObject/GameObjectScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectScriptableEvent.cs diff --git a/Assets/Runtime/GameObject/GameObjectScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameObject/GameObjectScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectScriptableEvent.cs.meta diff --git a/Assets/Runtime/GameObject/GameObjectUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectUnityEvent.cs similarity index 100% rename from Assets/Runtime/GameObject/GameObjectUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectUnityEvent.cs diff --git a/Assets/Runtime/GameObject/GameObjectUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/GameObject/GameObjectUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/GameObject/GameObjectUnityEvent.cs.meta diff --git a/Assets/Runtime/IScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/IScriptableEvent.cs similarity index 100% rename from Assets/Runtime/IScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/IScriptableEvent.cs diff --git a/Assets/Runtime/IScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/IScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/IScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/IScriptableEvent.cs.meta diff --git a/Assets/Runtime/IScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/IScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/IScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/IScriptableEventListener.cs diff --git a/Assets/Runtime/IScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/IScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/IScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/IScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Int.meta b/Packages/com.chark.scriptable-events/Runtime/Int.meta similarity index 100% rename from Assets/Runtime/Int.meta rename to Packages/com.chark.scriptable-events/Runtime/Int.meta diff --git a/Assets/Runtime/Int/IntScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Int/IntScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEvent.cs diff --git a/Assets/Runtime/Int/IntScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Int/IntScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEvent.cs.meta diff --git a/Assets/Runtime/Int/IntScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Int/IntScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEventListener.cs diff --git a/Assets/Runtime/Int/IntScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Int/IntScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Int/IntScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Int/IntUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Int/IntUnityEvent.cs similarity index 100% rename from Assets/Runtime/Int/IntUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Int/IntUnityEvent.cs diff --git a/Assets/Runtime/Int/IntUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Int/IntUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Int/IntUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Int/IntUnityEvent.cs.meta diff --git a/Assets/Runtime/Simple.meta b/Packages/com.chark.scriptable-events/Runtime/Simple.meta similarity index 100% rename from Assets/Runtime/Simple.meta rename to Packages/com.chark.scriptable-events/Runtime/Simple.meta diff --git a/Assets/Runtime/Simple/SimpleArg.cs b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleArg.cs similarity index 100% rename from Assets/Runtime/Simple/SimpleArg.cs rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleArg.cs diff --git a/Assets/Runtime/Simple/SimpleArg.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleArg.cs.meta similarity index 100% rename from Assets/Runtime/Simple/SimpleArg.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleArg.cs.meta diff --git a/Assets/Runtime/Simple/SimpleScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Simple/SimpleScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEvent.cs diff --git a/Assets/Runtime/Simple/SimpleScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Simple/SimpleScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEvent.cs.meta diff --git a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Simple/SimpleScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEventListener.cs diff --git a/Assets/Runtime/Simple/SimpleScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Simple/SimpleScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Simple/SimpleUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleUnityEvent.cs similarity index 100% rename from Assets/Runtime/Simple/SimpleUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleUnityEvent.cs diff --git a/Assets/Runtime/Simple/SimpleUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Simple/SimpleUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Simple/SimpleUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Simple/SimpleUnityEvent.cs.meta diff --git a/Assets/Runtime/String.meta b/Packages/com.chark.scriptable-events/Runtime/String.meta similarity index 100% rename from Assets/Runtime/String.meta rename to Packages/com.chark.scriptable-events/Runtime/String.meta diff --git a/Assets/Runtime/String/StringScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEvent.cs similarity index 100% rename from Assets/Runtime/String/StringScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEvent.cs diff --git a/Assets/Runtime/String/StringScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/String/StringScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEvent.cs.meta diff --git a/Assets/Runtime/String/StringScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/String/StringScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEventListener.cs diff --git a/Assets/Runtime/String/StringScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/String/StringScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/String/StringScriptableEventListener.cs.meta diff --git a/Assets/Runtime/String/StringUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/String/StringUnityEvent.cs similarity index 100% rename from Assets/Runtime/String/StringUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/String/StringUnityEvent.cs diff --git a/Assets/Runtime/String/StringUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/String/StringUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/String/StringUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/String/StringUnityEvent.cs.meta diff --git a/Assets/Runtime/Transform.meta b/Packages/com.chark.scriptable-events/Runtime/Transform.meta similarity index 100% rename from Assets/Runtime/Transform.meta rename to Packages/com.chark.scriptable-events/Runtime/Transform.meta diff --git a/Assets/Runtime/Transform/TransformScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Transform/TransformScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEvent.cs diff --git a/Assets/Runtime/Transform/TransformScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Transform/TransformScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEvent.cs.meta diff --git a/Assets/Runtime/Transform/TransformScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Transform/TransformScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEventListener.cs diff --git a/Assets/Runtime/Transform/TransformScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Transform/TransformScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Transform/TransformScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Transform/TransformUnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Transform/TransformUnityEvent.cs similarity index 100% rename from Assets/Runtime/Transform/TransformUnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Transform/TransformUnityEvent.cs diff --git a/Assets/Runtime/Transform/TransformUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Transform/TransformUnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Transform/TransformUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Transform/TransformUnityEvent.cs.meta diff --git a/Assets/Runtime/Vector2.meta b/Packages/com.chark.scriptable-events/Runtime/Vector2.meta similarity index 100% rename from Assets/Runtime/Vector2.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector2.meta diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Vector2/Vector2ScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEvent.cs diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector2/Vector2ScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEvent.cs.meta diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEventListener.cs diff --git a/Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2ScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Vector2/Vector2UnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2UnityEvent.cs similarity index 100% rename from Assets/Runtime/Vector2/Vector2UnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2UnityEvent.cs diff --git a/Assets/Runtime/Vector2/Vector2UnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2UnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector2/Vector2UnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector2/Vector2UnityEvent.cs.meta diff --git a/Assets/Runtime/Vector3.meta b/Packages/com.chark.scriptable-events/Runtime/Vector3.meta similarity index 100% rename from Assets/Runtime/Vector3.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector3.meta diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEvent.cs similarity index 100% rename from Assets/Runtime/Vector3/Vector3ScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEvent.cs diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector3/Vector3ScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEvent.cs.meta diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEventListener.cs similarity index 100% rename from Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEventListener.cs diff --git a/Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta similarity index 100% rename from Assets/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3ScriptableEventListener.cs.meta diff --git a/Assets/Runtime/Vector3/Vector3UnityEvent.cs b/Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3UnityEvent.cs similarity index 100% rename from Assets/Runtime/Vector3/Vector3UnityEvent.cs rename to Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3UnityEvent.cs diff --git a/Assets/Runtime/Vector3/Vector3UnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3UnityEvent.cs.meta similarity index 100% rename from Assets/Runtime/Vector3/Vector3UnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Runtime/Vector3/Vector3UnityEvent.cs.meta diff --git a/Assets/Samples.meta b/Packages/com.chark.scriptable-events/Samples.meta similarity index 100% rename from Assets/Samples.meta rename to Packages/com.chark.scriptable-events/Samples.meta diff --git a/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef b/Packages/com.chark.scriptable-events/Samples/Chark.ScriptableEvents.Samples.asmdef similarity index 74% rename from Assets/Samples/Chark.ScriptableEvents.Samples.asmdef rename to Packages/com.chark.scriptable-events/Samples/Chark.ScriptableEvents.Samples.asmdef index 526ae06..48b9d5d 100644 --- a/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef +++ b/Packages/com.chark.scriptable-events/Samples/Chark.ScriptableEvents.Samples.asmdef @@ -1,5 +1,6 @@ { "name": "Chark.ScriptableEvents.Samples", + "rootNamespace": "ScriptableEvents.Samples", "references": [ "Chark.ScriptableEvents", "Chark.ScriptableEvents.Editor" diff --git a/Assets/Samples/Chark.ScriptableEvents.Samples.asmdef.meta b/Packages/com.chark.scriptable-events/Samples/Chark.ScriptableEvents.Samples.asmdef.meta similarity index 100% rename from Assets/Samples/Chark.ScriptableEvents.Samples.asmdef.meta rename to Packages/com.chark.scriptable-events/Samples/Chark.ScriptableEvents.Samples.asmdef.meta diff --git a/Assets/Samples/CustomEvents.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents.meta similarity index 100% rename from Assets/Samples/CustomEvents.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents.meta diff --git a/Assets/Samples/CustomEvents/CustomEventsScene.unity b/Packages/com.chark.scriptable-events/Samples/CustomEvents/CustomEventsScene.unity similarity index 100% rename from Assets/Samples/CustomEvents/CustomEventsScene.unity rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/CustomEventsScene.unity diff --git a/Assets/Samples/CustomEvents/CustomEventsScene.unity.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/CustomEventsScene.unity.meta similarity index 100% rename from Assets/Samples/CustomEvents/CustomEventsScene.unity.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/CustomEventsScene.unity.meta diff --git a/Assets/Samples/CustomEvents/Editor.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor.meta similarity index 100% rename from Assets/Samples/CustomEvents/Editor.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor.meta diff --git a/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs similarity index 93% rename from Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs index 74b7b56..d71fedd 100644 --- a/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs @@ -2,7 +2,7 @@ using UnityEditor; using UnityEngine; -namespace ScriptableEvents.CustomEvents.Editor +namespace ScriptableEvents.Samples.CustomEvents.Editor { [CustomEditor(typeof(MaterialDataScriptableEvent))] public class MaterialDataScriptableEventEditor : BaseScriptableEventEditor diff --git a/Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta diff --git a/Assets/Samples/CustomEvents/MaterialChanger.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialChanger.cs similarity index 91% rename from Assets/Samples/CustomEvents/MaterialChanger.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialChanger.cs index 4d2a690..3ed8030 100644 --- a/Assets/Samples/CustomEvents/MaterialChanger.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialChanger.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace ScriptableEvents.CustomEvents +namespace ScriptableEvents.Samples.CustomEvents { public class MaterialChanger : MonoBehaviour { diff --git a/Assets/Samples/CustomEvents/MaterialChanger.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialChanger.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialChanger.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialChanger.cs.meta diff --git a/Assets/Samples/CustomEvents/MaterialData.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialData.cs similarity index 85% rename from Assets/Samples/CustomEvents/MaterialData.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialData.cs index 6546843..41e1ca1 100644 --- a/Assets/Samples/CustomEvents/MaterialData.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialData.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace ScriptableEvents.CustomEvents +namespace ScriptableEvents.Samples.CustomEvents { public class MaterialData { diff --git a/Assets/Samples/CustomEvents/MaterialData.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialData.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialData.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialData.cs.meta diff --git a/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataChangeEvent.asset similarity index 79% rename from Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataChangeEvent.asset index 4a8a8a3..b207900 100644 --- a/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataChangeEvent.asset @@ -12,7 +12,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3ecea89908c4413b8a1c24d87c376e74, type: 3} m_Name: MaterialDataChangeEvent m_EditorClassIdentifier: - description: + description: 'Changes color and metalic property of the material. Raised when slider + or dropdown value changes. + +' lockDescription: 1 suppressExceptions: 0 trace: 0 diff --git a/Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataChangeEvent.asset.meta diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEvent.cs similarity index 85% rename from Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEvent.cs index 3aac5b7..28c7a01 100644 --- a/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEvent.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace ScriptableEvents.CustomEvents +namespace ScriptableEvents.Samples.CustomEvents { [CreateAssetMenu( fileName = "MaterialDataScriptableEvent", diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEvent.cs.meta diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEventListener.cs similarity index 87% rename from Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEventListener.cs index b65e8de..b5893eb 100644 --- a/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEventListener.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace ScriptableEvents.CustomEvents +namespace ScriptableEvents.Samples.CustomEvents { [AddComponentMenu("Custom Scriptable Events/Material Data Event Listener")] public class MaterialDataScriptableEventListener diff --git a/Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataScriptableEventListener.cs.meta diff --git a/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataUnityEvent.cs similarity index 75% rename from Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataUnityEvent.cs index 0dcc8bc..ffbfe76 100644 --- a/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataUnityEvent.cs @@ -1,7 +1,7 @@ using System; using UnityEngine.Events; -namespace ScriptableEvents.CustomEvents +namespace ScriptableEvents.Samples.CustomEvents { [Serializable] public class MaterialDataUnityEvent : UnityEvent diff --git a/Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialDataUnityEvent.cs.meta diff --git a/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialOptionsHandler.cs similarity index 95% rename from Assets/Samples/CustomEvents/MaterialOptionsHandler.cs rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialOptionsHandler.cs index d31962b..f82275d 100644 --- a/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs +++ b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialOptionsHandler.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace ScriptableEvents.CustomEvents +namespace ScriptableEvents.Samples.CustomEvents { public class MaterialOptionsHandler : MonoBehaviour { diff --git a/Assets/Samples/CustomEvents/MaterialOptionsHandler.cs.meta b/Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialOptionsHandler.cs.meta similarity index 100% rename from Assets/Samples/CustomEvents/MaterialOptionsHandler.cs.meta rename to Packages/com.chark.scriptable-events/Samples/CustomEvents/MaterialOptionsHandler.cs.meta diff --git a/Assets/Samples/EventsWithArguments.meta b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments.meta similarity index 100% rename from Assets/Samples/EventsWithArguments.meta rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments.meta diff --git a/Assets/Samples/EventsWithArguments/ChangeColorEvent.asset b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/ChangeColorEvent.asset similarity index 81% rename from Assets/Samples/EventsWithArguments/ChangeColorEvent.asset rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments/ChangeColorEvent.asset index d959a1c..40f8259 100644 --- a/Assets/Samples/EventsWithArguments/ChangeColorEvent.asset +++ b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/ChangeColorEvent.asset @@ -12,7 +12,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ff6c51af645c42938d2b5a26ee3e6238, type: 3} m_Name: ChangeColorEvent m_EditorClassIdentifier: - description: + description: 'Changes red, green, and blue color components. Raised when slider + value changes. + +' lockDescription: 1 suppressExceptions: 0 trace: 0 diff --git a/Assets/Samples/EventsWithArguments/ChangeColorEvent.asset.meta b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/ChangeColorEvent.asset.meta similarity index 100% rename from Assets/Samples/EventsWithArguments/ChangeColorEvent.asset.meta rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments/ChangeColorEvent.asset.meta diff --git a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/EventsWithArgumentsScene.unity similarity index 100% rename from Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments/EventsWithArgumentsScene.unity diff --git a/Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta similarity index 100% rename from Assets/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments/EventsWithArgumentsScene.unity.meta diff --git a/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/MaterialColorChanger.cs similarity index 100% rename from Assets/Samples/EventsWithArguments/MaterialColorChanger.cs rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments/MaterialColorChanger.cs diff --git a/Assets/Samples/EventsWithArguments/MaterialColorChanger.cs.meta b/Packages/com.chark.scriptable-events/Samples/EventsWithArguments/MaterialColorChanger.cs.meta similarity index 100% rename from Assets/Samples/EventsWithArguments/MaterialColorChanger.cs.meta rename to Packages/com.chark.scriptable-events/Samples/EventsWithArguments/MaterialColorChanger.cs.meta diff --git a/Assets/Samples/SimpleEvents.meta b/Packages/com.chark.scriptable-events/Samples/SimpleEvents.meta similarity index 100% rename from Assets/Samples/SimpleEvents.meta rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents.meta diff --git a/Assets/Samples/SimpleEvents/MaterialColorToggle.cs b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/MaterialColorToggle.cs similarity index 100% rename from Assets/Samples/SimpleEvents/MaterialColorToggle.cs rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents/MaterialColorToggle.cs diff --git a/Assets/Samples/SimpleEvents/MaterialColorToggle.cs.meta b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/MaterialColorToggle.cs.meta similarity index 100% rename from Assets/Samples/SimpleEvents/MaterialColorToggle.cs.meta rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents/MaterialColorToggle.cs.meta diff --git a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/SimpleEventsScene.unity similarity index 100% rename from Assets/Samples/SimpleEvents/SimpleEventsScene.unity rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents/SimpleEventsScene.unity diff --git a/Assets/Samples/SimpleEvents/SimpleEventsScene.unity.meta b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/SimpleEventsScene.unity.meta similarity index 100% rename from Assets/Samples/SimpleEvents/SimpleEventsScene.unity.meta rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents/SimpleEventsScene.unity.meta diff --git a/Assets/Samples/SimpleEvents/ToggleColorEvent.asset b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/ToggleColorEvent.asset similarity index 81% rename from Assets/Samples/SimpleEvents/ToggleColorEvent.asset rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents/ToggleColorEvent.asset index f176c23..bd5503d 100644 --- a/Assets/Samples/SimpleEvents/ToggleColorEvent.asset +++ b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/ToggleColorEvent.asset @@ -12,7 +12,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3ca9d72c0f5043e9b9ed7e25d63422f5, type: 3} m_Name: ToggleColorEvent m_EditorClassIdentifier: - description: + description: 'Toggles between whie and black colors. Raised when color toggle button + is clicked. + +' lockDescription: 1 suppressExceptions: 0 trace: 0 diff --git a/Assets/Samples/SimpleEvents/ToggleColorEvent.asset.meta b/Packages/com.chark.scriptable-events/Samples/SimpleEvents/ToggleColorEvent.asset.meta similarity index 100% rename from Assets/Samples/SimpleEvents/ToggleColorEvent.asset.meta rename to Packages/com.chark.scriptable-events/Samples/SimpleEvents/ToggleColorEvent.asset.meta diff --git a/Assets/Tests.meta b/Packages/com.chark.scriptable-events/Tests.meta similarity index 100% rename from Assets/Tests.meta rename to Packages/com.chark.scriptable-events/Tests.meta diff --git a/Assets/Tests/Editor.meta b/Packages/com.chark.scriptable-events/Tests/Editor.meta similarity index 100% rename from Assets/Tests/Editor.meta rename to Packages/com.chark.scriptable-events/Tests/Editor.meta diff --git a/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef b/Packages/com.chark.scriptable-events/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef similarity index 82% rename from Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef rename to Packages/com.chark.scriptable-events/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef index 181063a..5e8a95d 100644 --- a/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef +++ b/Packages/com.chark.scriptable-events/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef @@ -1,5 +1,6 @@ { "name": "Chark.ScriptableEvents.Editor.Tests", + "rootNamespace": "ScriptableEvents.Editor.Tests", "references": [ "Chark.ScriptableEvents", "Chark.ScriptableEvents.Editor" diff --git a/Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta b/Packages/com.chark.scriptable-events/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta similarity index 100% rename from Assets/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta rename to Packages/com.chark.scriptable-events/Tests/Editor/Chark.ScriptableEvents.Editor.Tests.asmdef.meta diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTest.cs b/Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTest.cs similarity index 100% rename from Assets/Tests/Editor/ScriptableEventAttributeTest.cs rename to Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTest.cs diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTest.cs.meta b/Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTest.cs.meta similarity index 100% rename from Assets/Tests/Editor/ScriptableEventAttributeTest.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTest.cs.meta diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs b/Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTestSource.cs similarity index 100% rename from Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs rename to Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTestSource.cs diff --git a/Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta b/Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta similarity index 100% rename from Assets/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTestSource.cs.meta diff --git a/Assets/Tests/Runtime.meta b/Packages/com.chark.scriptable-events/Tests/Runtime.meta similarity index 100% rename from Assets/Tests/Runtime.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime.meta diff --git a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef b/Packages/com.chark.scriptable-events/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef similarity index 77% rename from Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef rename to Packages/com.chark.scriptable-events/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef index a14fb0a..9654347 100644 --- a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef +++ b/Packages/com.chark.scriptable-events/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef @@ -1,5 +1,6 @@ { "name": "Chark.ScriptableEvents.Tests", + "rootNamespace": "ScriptableEvents.Tests", "references": [ "Chark.ScriptableEvents" ], diff --git a/Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta b/Packages/com.chark.scriptable-events/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta similarity index 100% rename from Assets/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime/Chark.ScriptableEvents.Tests.asmdef.meta diff --git a/Assets/Tests/Runtime/MockScriptableEventListener.cs b/Packages/com.chark.scriptable-events/Tests/Runtime/MockScriptableEventListener.cs similarity index 100% rename from Assets/Tests/Runtime/MockScriptableEventListener.cs rename to Packages/com.chark.scriptable-events/Tests/Runtime/MockScriptableEventListener.cs diff --git a/Assets/Tests/Runtime/MockScriptableEventListener.cs.meta b/Packages/com.chark.scriptable-events/Tests/Runtime/MockScriptableEventListener.cs.meta similarity index 100% rename from Assets/Tests/Runtime/MockScriptableEventListener.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime/MockScriptableEventListener.cs.meta diff --git a/Assets/Tests/Runtime/ReflectionExtensions.cs b/Packages/com.chark.scriptable-events/Tests/Runtime/ReflectionExtensions.cs similarity index 100% rename from Assets/Tests/Runtime/ReflectionExtensions.cs rename to Packages/com.chark.scriptable-events/Tests/Runtime/ReflectionExtensions.cs diff --git a/Assets/Tests/Runtime/ReflectionExtensions.cs.meta b/Packages/com.chark.scriptable-events/Tests/Runtime/ReflectionExtensions.cs.meta similarity index 100% rename from Assets/Tests/Runtime/ReflectionExtensions.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime/ReflectionExtensions.cs.meta diff --git a/Assets/Tests/Runtime/ScriptableEventTest.cs b/Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTest.cs similarity index 100% rename from Assets/Tests/Runtime/ScriptableEventTest.cs rename to Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTest.cs diff --git a/Assets/Tests/Runtime/ScriptableEventTest.cs.meta b/Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTest.cs.meta similarity index 100% rename from Assets/Tests/Runtime/ScriptableEventTest.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTest.cs.meta diff --git a/Assets/Tests/Runtime/ScriptableEventTestSource.cs b/Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTestSource.cs similarity index 100% rename from Assets/Tests/Runtime/ScriptableEventTestSource.cs rename to Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTestSource.cs diff --git a/Assets/Tests/Runtime/ScriptableEventTestSource.cs.meta b/Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTestSource.cs.meta similarity index 100% rename from Assets/Tests/Runtime/ScriptableEventTestSource.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTestSource.cs.meta diff --git a/Assets/Tests/Runtime/SimpleScriptableEventTest.cs b/Packages/com.chark.scriptable-events/Tests/Runtime/SimpleScriptableEventTest.cs similarity index 100% rename from Assets/Tests/Runtime/SimpleScriptableEventTest.cs rename to Packages/com.chark.scriptable-events/Tests/Runtime/SimpleScriptableEventTest.cs diff --git a/Assets/Tests/Runtime/SimpleScriptableEventTest.cs.meta b/Packages/com.chark.scriptable-events/Tests/Runtime/SimpleScriptableEventTest.cs.meta similarity index 100% rename from Assets/Tests/Runtime/SimpleScriptableEventTest.cs.meta rename to Packages/com.chark.scriptable-events/Tests/Runtime/SimpleScriptableEventTest.cs.meta diff --git a/Packages/com.chark.scriptable-events/package.json b/Packages/com.chark.scriptable-events/package.json new file mode 100644 index 0000000..7897c64 --- /dev/null +++ b/Packages/com.chark.scriptable-events/package.json @@ -0,0 +1,28 @@ +{ + "name": "com.chark.scriptable-events", + "displayName": "Scriptable Events", + "author": { + "name": "Chark", + "url": "https://chark.io" + }, + "version": "1.0.0", + "unity": "2019.4", + "description": "Extensible event system implemented via ScriptableObject.", + "samples": [ + { + "displayName": "Simple Events", + "description": "Shows how to use events without passing any arguments.", + "path": "Samples/SimpleEvents" + }, + { + "displayName": "Events With Arguments", + "description": "Shows how to use events with arguments.", + "path": "Samples/EventsWithArguments" + }, + { + "displayName": "Custom Events", + "description": "Shows how to create custom events, editors and pass custom data via events.", + "path": "Samples/EventsWithArguments" + } + ] +} diff --git a/Assets/package.json.meta b/Packages/com.chark.scriptable-events/package.json.meta similarity index 100% rename from Assets/package.json.meta rename to Packages/com.chark.scriptable-events/package.json.meta diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 21efacf..e000a49 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,11 @@ { "dependencies": { + "com.chark.scriptable-events": { + "version": "file:com.chark.scriptable-events", + "depth": 0, + "source": "embedded", + "dependencies": {} + }, "com.unity.ext.nunit": { "version": "1.0.6", "depth": 1, From d044846aaa7129e926f373573f6ee4ad523bff6b Mon Sep 17 00:00:00 2001 From: Edvinas Date: Sun, 24 Jan 2021 15:11:38 +0200 Subject: [PATCH 26/26] Move samples to Samples~/ dir --- .github/CONTRIBUTING.md | 7 + .github/README.md | 32 +++ .github/event-listener.png | Bin 0 -> 46555 bytes .github/event.png | Bin 0 -> 35480 bytes .github/workflows/main.yml | 1 + CHANGELOG.md | 98 -------- Makefile | 2 - .../com.chark.scriptable-events/CHANGELOG.md | 14 ++ .../{Samples.meta => CHANGELOG.md.meta} | 5 +- .../Documentation~/README.md | 219 ++++++++++++++++++ .../Documentation~/argument-event-raise.png | Bin 0 -> 28673 bytes .../Documentation~/index.md | 2 - .../Documentation~/simple-event-listener.png | Bin 0 -> 30994 bytes .../Documentation~/simple-event-raise.png | Bin 0 -> 21965 bytes .../Documentation~/simple-event.png | Bin 0 -> 30909 bytes .../com.chark.scriptable-events/LICENSE.md | 21 ++ .../LICENSE.md.meta | 7 + .../Chark.ScriptableEvents.Samples.asmdef | 0 ...Chark.ScriptableEvents.Samples.asmdef.meta | 0 .../{Samples => Samples~}/CustomEvents.meta | 0 .../CustomEvents/CustomEventsScene.unity | 0 .../CustomEvents/CustomEventsScene.unity.meta | 0 .../CustomEvents/Editor.meta | 0 .../MaterialDataScriptableEventEditor.cs | 0 .../MaterialDataScriptableEventEditor.cs.meta | 0 .../CustomEvents/MaterialChanger.cs | 0 .../CustomEvents/MaterialChanger.cs.meta | 0 .../CustomEvents/MaterialData.cs | 0 .../CustomEvents/MaterialData.cs.meta | 0 .../MaterialDataChangeEvent.asset | 0 .../MaterialDataChangeEvent.asset.meta | 0 .../MaterialDataScriptableEvent.cs | 0 .../MaterialDataScriptableEvent.cs.meta | 0 .../MaterialDataScriptableEventListener.cs | 0 ...aterialDataScriptableEventListener.cs.meta | 0 .../CustomEvents/MaterialDataUnityEvent.cs | 0 .../MaterialDataUnityEvent.cs.meta | 0 .../CustomEvents/MaterialOptionsHandler.cs | 0 .../MaterialOptionsHandler.cs.meta | 0 .../EventsWithArguments.meta | 0 .../ChangeColorEvent.asset | 0 .../ChangeColorEvent.asset.meta | 0 .../EventsWithArgumentsScene.unity | 0 .../EventsWithArgumentsScene.unity.meta | 0 .../MaterialColorChanger.cs | 0 .../MaterialColorChanger.cs.meta | 0 .../{Samples => Samples~}/SimpleEvents.meta | 0 .../SimpleEvents/MaterialColorToggle.cs | 0 .../SimpleEvents/MaterialColorToggle.cs.meta | 0 .../SimpleEvents/SimpleEventsScene.unity | 0 .../SimpleEvents/SimpleEventsScene.unity.meta | 0 .../SimpleEvents/ToggleColorEvent.asset | 0 .../SimpleEvents/ToggleColorEvent.asset.meta | 0 .../com.chark.scriptable-events/package.json | 17 +- README.md | 26 --- 55 files changed, 315 insertions(+), 136 deletions(-) create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/README.md create mode 100644 .github/event-listener.png create mode 100644 .github/event.png delete mode 100644 CHANGELOG.md delete mode 100644 Makefile create mode 100644 Packages/com.chark.scriptable-events/CHANGELOG.md rename Packages/com.chark.scriptable-events/{Samples.meta => CHANGELOG.md.meta} (57%) create mode 100644 Packages/com.chark.scriptable-events/Documentation~/README.md create mode 100644 Packages/com.chark.scriptable-events/Documentation~/argument-event-raise.png delete mode 100644 Packages/com.chark.scriptable-events/Documentation~/index.md create mode 100644 Packages/com.chark.scriptable-events/Documentation~/simple-event-listener.png create mode 100644 Packages/com.chark.scriptable-events/Documentation~/simple-event-raise.png create mode 100644 Packages/com.chark.scriptable-events/Documentation~/simple-event.png create mode 100644 Packages/com.chark.scriptable-events/LICENSE.md create mode 100644 Packages/com.chark.scriptable-events/LICENSE.md.meta rename Packages/com.chark.scriptable-events/{Samples => Samples~}/Chark.ScriptableEvents.Samples.asmdef (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/Chark.ScriptableEvents.Samples.asmdef.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/CustomEventsScene.unity (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/CustomEventsScene.unity.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/Editor.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/Editor/MaterialDataScriptableEventEditor.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialChanger.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialChanger.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialData.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialData.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataChangeEvent.asset (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataChangeEvent.asset.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataScriptableEvent.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataScriptableEvent.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataScriptableEventListener.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataScriptableEventListener.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataUnityEvent.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialDataUnityEvent.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialOptionsHandler.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/CustomEvents/MaterialOptionsHandler.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments/ChangeColorEvent.asset (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments/ChangeColorEvent.asset.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments/EventsWithArgumentsScene.unity (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments/EventsWithArgumentsScene.unity.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments/MaterialColorChanger.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/EventsWithArguments/MaterialColorChanger.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents/MaterialColorToggle.cs (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents/MaterialColorToggle.cs.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents/SimpleEventsScene.unity (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents/SimpleEventsScene.unity.meta (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents/ToggleColorEvent.asset (100%) rename Packages/com.chark.scriptable-events/{Samples => Samples~}/SimpleEvents/ToggleColorEvent.asset.meta (100%) delete mode 100644 README.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..438ec7a --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing +If you found a bug or want to add a feature, you are more than welcome to make a Pull Request! + +When doing so, make sure to: +- Follow similar code style which is used in other scripts. +- Add tests cases under [ScriptableEventAttributeTestSource](../Packages/com.chark.scriptable-events/Tests/Editor/ScriptableEventAttributeTestSource.cs) and [ScriptableEventTestSource](../Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTestSource.cs) when adding new event types. +- Add tests for additional features, for example how [SimpleScriptableEventTest](../Packages/com.chark.scriptable-events/Tests/Runtime/SimpleScriptableEventTest.cs) does it for an additional method that is not covered in [ScriptableEventTest](../Packages/com.chark.scriptable-events/Tests/Runtime/ScriptableEventTest.cs). diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 0000000..ce1f672 --- /dev/null +++ b/.github/README.md @@ -0,0 +1,32 @@ +# Scriptable Events +[![Unity 2019.4+](https://img.shields.io/badge/unity-2019.4%2B-blue.svg)](https://unity3d.com/get-unity/download) +[![Actions Status](https://github.com/chark/scriptable-events/workflows/CI/badge.svg)](https://github.com/chark/scriptable-events/actions) + +Simple and extensible event system implemented via `ScriptableObject`, based on [Unite2017](https://github.com/roboryantron/Unite2017). + +

+ + +

+ +## Features +- Can be used with minimal or no code at all. +- Default event and listener implementations for commonly used types. +- Strongly typed. +- Ability to easily add custom events and inspector GUIs. + +## Installation +This package can be installed via the Unity Package Manager by [Installing from a Git URL](https://docs.unity3d.com/Manual/upm-ui-giturl.html): +```text +https://github.com/chark/scriptable-events.git#upm +``` + +Alternatively, you can also install it by adding the following dependency to `Packages/manifest.json`: +```text +"com.chark.scriptable-events": "https://github.com/chark/scriptable-events.git#upm" +``` + +## Documentation +- [Usage documentation](../Packages/com.chark.scriptable-events/Documentation~/README.md) +- [Contributing](CONTRIBUTING.md) +- [Changelog](../Packages/com.chark.scriptable-events/CHANGELOG.md) diff --git a/.github/event-listener.png b/.github/event-listener.png new file mode 100644 index 0000000000000000000000000000000000000000..11ec95aeca7f4bfa9cac942f473bd512d1f0ec8f GIT binary patch literal 46555 zcmeFZWprE1vMwq!Gc#k%%*;$NGqYu8N=z{`Gh-Yxv*VbVVs>J7%oOvL*IIk;wckDO z+;_%!_urPRG1S%7Uw2o1Rn?N_^d}W1X(V`jcmM!^Br7AK1^|E=fL_Y5&>+caDiI9; zz+CF1q3xz-;zc-dG20A4FK**49D+=(TxW>`&-;{z@L2%yqg ze%j`yq<~tnOtVHxio&OPvk-nlOAnadt<$H?SJ(Bx=cT~VX*tifMnmbE+}GU%>FlS1 z$Enx7N6+*7=f~&TU$w%ad4Z>w&ktrhcY|k#S2$e(0VtaRFE^o1J>esHqbN8>w>LP) z`#re#SH8ajJEoUn5~VQj2VUBzf48ed=JmiD;iTt%yL7+4{Yg=Mb^m<)m}j#^QWp5# zd+B!j*fH?+Y%RUZ;I~QS1!cf^k6C0M809mDe&!R|`B}Q{d>(w@UQu42UrY$x{kp(C ziPY{3amrcXgPw-t{ljVxRA^S0GEczymHFaX&+F}e!BfEHde#q;)9hcqd{5U`ZH3Rz z&fU+hXQ!tdSKjRz@6>gBh>un&x`i+Lz9yI5HI3E|35N=|+}WL1@z*cG-rw%w^e{xD zW*if^ESrQ8Og^rEU>zh>wtpfnLZf}IF2j~?+#y06eZX?Gw<*ryn_=tE`fc+hlzM*3 zzj4Cg=GY057abf0Rq|o3=Y>1q`9kc@)=}ImNoPZ!^>aC;Ic{Y3%S0KhOzY-lc_-Y< z?eW>Gx;_RPgHt9y3eWR{zG=#Nir#3^HF(Z%!SHq z4$Pu?+YWa|lbn==SY&^tXc}59ENB{;DN^_|=+)Uyv^SWze#_zFsXKP;IIG)-3)kSg zPgYmve~xBnuJD+fXj$`FJ@H(-7qsp3?|&Gp4J2tgXSBVLlq0d|%d-V83%0m~4 zhZe<)dQl1+Kds7oCAdSFBUYAvk5&9mGh(=hZMjmYsh9mL2)CqA7$GjDp=F#-;cl93n zuGXVIUEVdF18o-yuKqfo6vA&7Duo$ybX^HsC_9>Ab{a(6OiRA0iR7aR&LM~|v`PKk zrpI7$aqYuzfF904JKazy&S^Z;$>^_n+|yp1ZyhQR_bTPcFzwG~x>``q8~yCJE@M|V z>M&q_3L(+znv*2UyLc2)JgZ-fy4jXvg6-k}(MEHF;Y!>gO>sKsZJBI;Jho}@(2BS) zDp1w*p5~`s7xpfU!0Z_q7&g1qt-T$_3e&jf{^UZ*if2@nD$P2dH*8u6L`Hns@g8J) z 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