diff --git a/Runtime/Box2DColliderTrigger.cs b/Runtime/Box2DColliderTrigger.cs deleted file mode 100644 index ef902d8..0000000 --- a/Runtime/Box2DColliderTrigger.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using Syntriax.Modules.ToggleState; -using UnityEngine; - -namespace Syntriax.Modules.Trigger -{ - public class Box2DColliderTrigger : Trigger, IColliderTrigger - { - [SerializeField] private LayerMask colliderMask = 0; - - public LayerMask ColliderMask { get => colliderMask; set => colliderMask = value; } - public Action> OnTriggeredCollidersUpdated { get; set; } = null; - - private Collider2D[] nonAllocResults = new Collider2D[32]; - public List results = new List(32); - - private int previousTriggerCount = 0; - - protected void FixedUpdate() - { - if (!ToggleStateMember.IsToggledNullChecked()) - return; - - int triggerCount = Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, 0, nonAllocResults, ColliderMask); - - if (triggerCount == previousTriggerCount) - return; - previousTriggerCount = triggerCount; - - results.Clear(); - for (int i = 0; i < triggerCount; i++) - results.Add(nonAllocResults[i]); - - IsTrigerred = triggerCount > 0; - OnTriggeredCollidersUpdated?.Invoke(results); - } - -#if UNITY_EDITOR - private void OnDrawGizmosSelected() - { - Gizmos.color = IsTrigerred ? Color.green : Color.red; - Gizmos.DrawWireCube(transform.position, transform.lossyScale); - } -#endif - } -} diff --git a/Runtime/Box2DColliderTriggerWithRotation.cs b/Runtime/Box2DColliderTriggerWithRotation.cs deleted file mode 100644 index 5fe3dc9..0000000 --- a/Runtime/Box2DColliderTriggerWithRotation.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using Syntriax.Modules.ToggleState; -using UnityEngine; - -namespace Syntriax.Modules.Trigger -{ - public class Box2DColliderTriggerWithRotation : Trigger, IColliderTrigger - { - [SerializeField] private LayerMask colliderMask = 0; - - public LayerMask ColliderMask { get => colliderMask; set => colliderMask = value; } - public Action> OnTriggeredCollidersUpdated { get; set; } = null; - - private Collider2D[] nonAllocResults = new Collider2D[32]; - public List results = new List(32); - - private int previousTriggerCount = 0; - - protected void FixedUpdate() - { - if (!ToggleStateMember.IsToggledNullChecked()) - return; - - int triggerCount = Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, transform.rotation.eulerAngles.z, nonAllocResults, ColliderMask); - - if (triggerCount == previousTriggerCount) - return; - previousTriggerCount = triggerCount; - - results.Clear(); - for (int i = 0; i < triggerCount; i++) - results.Add(nonAllocResults[i]); - - IsTrigerred = triggerCount > 0; - OnTriggeredCollidersUpdated?.Invoke(results); - } - -#if UNITY_EDITOR - private void OnDrawGizmosSelected() - { - Gizmos.color = IsTrigerred ? Color.green : Color.red; - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.DrawWireCube(Vector3.zero, Vector3.one); - } -#endif - } -} diff --git a/Runtime/Collider.meta b/Runtime/Collider.meta new file mode 100644 index 0000000..c84fa6d --- /dev/null +++ b/Runtime/Collider.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09a25591637cbdf45ad71415d94bf641 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Collider/Box2DColliderTriggerArea.cs b/Runtime/Collider/Box2DColliderTriggerArea.cs new file mode 100644 index 0000000..d520039 --- /dev/null +++ b/Runtime/Collider/Box2DColliderTriggerArea.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace Syntriax.Modules.Trigger +{ + public class Box2DColliderTriggerArea : ColliderTriggerAreaBase + { + protected override int TriggerCount + => Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, 0, nonAllocResults, ColliderMask); + +#if UNITY_EDITOR + private void OnDrawGizmosSelected() + { + Gizmos.color = previousTriggerCount > 0 ? Color.green : Color.red; + Gizmos.DrawWireCube(transform.position, transform.lossyScale); + } +#endif + } +} diff --git a/Runtime/Ground/Box2DGroundTrigger.cs.meta b/Runtime/Collider/Box2DColliderTriggerArea.cs.meta similarity index 83% rename from Runtime/Ground/Box2DGroundTrigger.cs.meta rename to Runtime/Collider/Box2DColliderTriggerArea.cs.meta index 1a4cee5..e0a7f4d 100644 --- a/Runtime/Ground/Box2DGroundTrigger.cs.meta +++ b/Runtime/Collider/Box2DColliderTriggerArea.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7804f3e8384c7a54482f585b4f43264a +guid: 13b8a72003d46b24fa2e67093c42c49d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Collider/Box2DColliderTriggerAreaWithRotation.cs b/Runtime/Collider/Box2DColliderTriggerAreaWithRotation.cs new file mode 100644 index 0000000..36584bc --- /dev/null +++ b/Runtime/Collider/Box2DColliderTriggerAreaWithRotation.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace Syntriax.Modules.Trigger +{ + public class Box2DColliderTriggerAreaWithRotation : ColliderTriggerAreaBase + { + protected override int TriggerCount + => Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, transform.rotation.eulerAngles.z, nonAllocResults, ColliderMask); + +#if UNITY_EDITOR + private void OnDrawGizmosSelected() + { + Gizmos.color = previousTriggerCount > 0 ? Color.green : Color.red; + Gizmos.matrix = transform.localToWorldMatrix; + Gizmos.DrawWireCube(Vector3.zero, Vector3.one); + } +#endif + } +} diff --git a/Runtime/Box2DColliderTrigger.cs.meta b/Runtime/Collider/Box2DColliderTriggerAreaWithRotation.cs.meta similarity index 83% rename from Runtime/Box2DColliderTrigger.cs.meta rename to Runtime/Collider/Box2DColliderTriggerAreaWithRotation.cs.meta index 676047d..df5fed1 100644 --- a/Runtime/Box2DColliderTrigger.cs.meta +++ b/Runtime/Collider/Box2DColliderTriggerAreaWithRotation.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 20a6baf9a256917448a4d7ad09d0c51a +guid: b2d9ae6bcc3b69a4093f8c740f040229 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Collider/ColliderTrigger.cs b/Runtime/Collider/ColliderTrigger.cs new file mode 100644 index 0000000..0ed5ede --- /dev/null +++ b/Runtime/Collider/ColliderTrigger.cs @@ -0,0 +1,22 @@ +using Syntriax.Modules.ToggleState; + +namespace Syntriax.Modules.Trigger +{ + public class ColliderTrigger : TriggerBase + { + protected IColliderTrigger colliderTrigger = null; + + private void Awake() + { + colliderTrigger = GetComponent(); + } + + private void FixedUpdate() + { + if (!ToggleStateMember.IsToggledNullChecked()) + return; + + IsTrigerred = colliderTrigger.Check(); + } + } +} diff --git a/Runtime/Ground/Box2DGroundTriggerWithRotation.cs.meta b/Runtime/Collider/ColliderTrigger.cs.meta similarity index 83% rename from Runtime/Ground/Box2DGroundTriggerWithRotation.cs.meta rename to Runtime/Collider/ColliderTrigger.cs.meta index fccbe69..2f2544f 100644 --- a/Runtime/Ground/Box2DGroundTriggerWithRotation.cs.meta +++ b/Runtime/Collider/ColliderTrigger.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d8b544fd215b0df4192a7889e6f2db4c +guid: 7302d5358a0cd4a4c9a2c8dd9a4a7697 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Collider/ColliderTriggerAreaBase.cs b/Runtime/Collider/ColliderTriggerAreaBase.cs new file mode 100644 index 0000000..8434aa5 --- /dev/null +++ b/Runtime/Collider/ColliderTriggerAreaBase.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Syntriax.Modules.Trigger +{ + public abstract class ColliderTriggerAreaBase : MonoBehaviour, IColliderTrigger + { + protected List results = new List(32); + + protected Collider2D[] nonAllocResults = new Collider2D[32]; + protected int previousTriggerCount = 0; + + public LayerMask ColliderMask { get; set; } = ~0; + public Action> OnTriggeredCollidersUpdated { get; set; } = null; + + protected abstract int TriggerCount { get; } + + public virtual bool Check() + { + int triggerCount = TriggerCount; + + if (triggerCount != previousTriggerCount) + { + results.Clear(); + for (int i = 0; i < triggerCount; i++) + results.Add(nonAllocResults[i]); + + OnTriggeredCollidersUpdated?.Invoke(results); + } + + previousTriggerCount = triggerCount; + return triggerCount > 0; + } + } +} diff --git a/Runtime/Box2DColliderTriggerWithRotation.cs.meta b/Runtime/Collider/ColliderTriggerAreaBase.cs.meta similarity index 83% rename from Runtime/Box2DColliderTriggerWithRotation.cs.meta rename to Runtime/Collider/ColliderTriggerAreaBase.cs.meta index 0cb3609..73cd59d 100644 --- a/Runtime/Box2DColliderTriggerWithRotation.cs.meta +++ b/Runtime/Collider/ColliderTriggerAreaBase.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e56ea33695c0c83438ea8b7bf11d1cf8 +guid: d9e5082ab403a7240a6bf0554a93518f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Ground.meta b/Runtime/Collider/Ground.meta similarity index 100% rename from Runtime/Ground.meta rename to Runtime/Collider/Ground.meta diff --git a/Runtime/Collider/Ground/Box2DGroundTriggerArea.cs b/Runtime/Collider/Ground/Box2DGroundTriggerArea.cs new file mode 100644 index 0000000..0d38a14 --- /dev/null +++ b/Runtime/Collider/Ground/Box2DGroundTriggerArea.cs @@ -0,0 +1,4 @@ +namespace Syntriax.Modules.Trigger +{ + public class Box2DGroundTriggerArea : Box2DColliderTriggerArea, IGroundTriggerArea { } +} diff --git a/Runtime/Collider/Ground/Box2DGroundTriggerArea.cs.meta b/Runtime/Collider/Ground/Box2DGroundTriggerArea.cs.meta new file mode 100644 index 0000000..31775cd --- /dev/null +++ b/Runtime/Collider/Ground/Box2DGroundTriggerArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b3db9faa3a5e9f4db37172c452dbf2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Collider/Ground/Box2DGroundTriggerAreaWithRotation.cs b/Runtime/Collider/Ground/Box2DGroundTriggerAreaWithRotation.cs new file mode 100644 index 0000000..2bf50a7 --- /dev/null +++ b/Runtime/Collider/Ground/Box2DGroundTriggerAreaWithRotation.cs @@ -0,0 +1,4 @@ +namespace Syntriax.Modules.Trigger +{ + public class Box2DGroundTriggerAreaWithRotation : Box2DColliderTriggerAreaWithRotation, IGroundTriggerArea { } +} diff --git a/Runtime/Collider/Ground/Box2DGroundTriggerAreaWithRotation.cs.meta b/Runtime/Collider/Ground/Box2DGroundTriggerAreaWithRotation.cs.meta new file mode 100644 index 0000000..ac59e08 --- /dev/null +++ b/Runtime/Collider/Ground/Box2DGroundTriggerAreaWithRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbb4ef661e6f9fc4fb8584059bc8e5cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Collider/Ground/GroundTrigger.cs b/Runtime/Collider/Ground/GroundTrigger.cs new file mode 100644 index 0000000..703e937 --- /dev/null +++ b/Runtime/Collider/Ground/GroundTrigger.cs @@ -0,0 +1,4 @@ +namespace Syntriax.Modules.Trigger +{ + public class GroundTrigger : ColliderTrigger, IGroundTrigger { } +} diff --git a/Runtime/Collider/Ground/GroundTrigger.cs.meta b/Runtime/Collider/Ground/GroundTrigger.cs.meta new file mode 100644 index 0000000..f446d63 --- /dev/null +++ b/Runtime/Collider/Ground/GroundTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91a5b9cf888de6f4da572ac875fc826c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Collider/Ground/IGroundTrigger.cs b/Runtime/Collider/Ground/IGroundTrigger.cs new file mode 100644 index 0000000..aa001b7 --- /dev/null +++ b/Runtime/Collider/Ground/IGroundTrigger.cs @@ -0,0 +1,4 @@ +namespace Syntriax.Modules.Trigger +{ + public interface IGroundTrigger : ITrigger { } +} diff --git a/Runtime/Ground/IGroundTrigger.cs.meta b/Runtime/Collider/Ground/IGroundTrigger.cs.meta similarity index 100% rename from Runtime/Ground/IGroundTrigger.cs.meta rename to Runtime/Collider/Ground/IGroundTrigger.cs.meta diff --git a/Runtime/Collider/Ground/IGroundTriggerArea.cs b/Runtime/Collider/Ground/IGroundTriggerArea.cs new file mode 100644 index 0000000..c93ebbd --- /dev/null +++ b/Runtime/Collider/Ground/IGroundTriggerArea.cs @@ -0,0 +1,4 @@ +namespace Syntriax.Modules.Trigger +{ + public interface IGroundTriggerArea : ITriggerArea { } +} diff --git a/Runtime/Collider/Ground/IGroundTriggerArea.cs.meta b/Runtime/Collider/Ground/IGroundTriggerArea.cs.meta new file mode 100644 index 0000000..c0b0b9f --- /dev/null +++ b/Runtime/Collider/Ground/IGroundTriggerArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a6e6150c32aa1f4d87db161c5fb65db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/IColliderTrigger.cs b/Runtime/Collider/IColliderTrigger.cs similarity index 91% rename from Runtime/IColliderTrigger.cs rename to Runtime/Collider/IColliderTrigger.cs index b094a8e..a7f5be4 100644 --- a/Runtime/IColliderTrigger.cs +++ b/Runtime/Collider/IColliderTrigger.cs @@ -4,7 +4,7 @@ using UnityEngine; namespace Syntriax.Modules.Trigger { - public interface IColliderTrigger : ITrigger + public interface IColliderTrigger : ITriggerArea { /// /// value for checking triggers diff --git a/Runtime/IColliderTrigger.cs.meta b/Runtime/Collider/IColliderTrigger.cs.meta similarity index 83% rename from Runtime/IColliderTrigger.cs.meta rename to Runtime/Collider/IColliderTrigger.cs.meta index 494474c..dcfb010 100644 --- a/Runtime/IColliderTrigger.cs.meta +++ b/Runtime/Collider/IColliderTrigger.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e199ccade2250b646abfd859e4aa1e7a +guid: a101e5476051bb74b8012198b1594327 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Collider/ITriggerArea.cs b/Runtime/Collider/ITriggerArea.cs new file mode 100644 index 0000000..fb67ff5 --- /dev/null +++ b/Runtime/Collider/ITriggerArea.cs @@ -0,0 +1,11 @@ +namespace Syntriax.Modules.Trigger +{ + public interface ITriggerArea + { + /// + /// Check if the is Triggered + /// + /// true if is triggered, false if not + bool Check(); + } +} diff --git a/Runtime/Collider/ITriggerArea.cs.meta b/Runtime/Collider/ITriggerArea.cs.meta new file mode 100644 index 0000000..7701e7d --- /dev/null +++ b/Runtime/Collider/ITriggerArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8fff127b37aecc4495535a383f8f4bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Ground/Box2DGroundTrigger.cs b/Runtime/Ground/Box2DGroundTrigger.cs deleted file mode 100644 index 8deb2c8..0000000 --- a/Runtime/Ground/Box2DGroundTrigger.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace Syntriax.Modules.Trigger -{ - public class Box2DGroundTrigger : Box2DColliderTrigger, IGroundTrigger { } -} diff --git a/Runtime/Ground/Box2DGroundTriggerWithRotation.cs b/Runtime/Ground/Box2DGroundTriggerWithRotation.cs deleted file mode 100644 index 08a550f..0000000 --- a/Runtime/Ground/Box2DGroundTriggerWithRotation.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace Syntriax.Modules.Trigger -{ - public class Box2DGroundTriggerWithRotation : Box2DColliderTriggerWithRotation, IGroundTrigger { } -} diff --git a/Runtime/Ground/IGroundTrigger.cs b/Runtime/Ground/IGroundTrigger.cs deleted file mode 100644 index 687ae4b..0000000 --- a/Runtime/Ground/IGroundTrigger.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace Syntriax.Modules.Trigger -{ - public interface IGroundTrigger : IColliderTrigger { } -} diff --git a/Runtime/ITrigger.cs b/Runtime/ITrigger.cs index 58f8673..2288e84 100644 --- a/Runtime/ITrigger.cs +++ b/Runtime/ITrigger.cs @@ -15,6 +15,7 @@ namespace Syntriax.Modules.Trigger /// /// The new value of IsTrigerred Action OnTriggerStateChanged { get; set; } + bool IsTrigerred { get; } } } diff --git a/Runtime/ITriggerExtensions.cs b/Runtime/ITriggerExtensions.cs index e90ae96..09a4403 100644 --- a/Runtime/ITriggerExtensions.cs +++ b/Runtime/ITriggerExtensions.cs @@ -3,11 +3,11 @@ namespace Syntriax.Modules.Trigger public static class ITriggerExtensions { /// - /// Checks if the provided parameter ITrigger is toggled, if the parameter is null returns the nullValue parameter + /// Checks if the provided parameter is toggled, if the parameter is null returns the nullValue parameter /// - /// ITrigger to be checked if toggled or not - /// The value that will be returned if toggleState is null. Default value: true - /// ITrigger's toggle value, or if null return nullValue parameter + /// to be checked if toggled or not + /// The value that will be returned if trigger is null. Default value: true + /// 's toggle value, or if null return nullValue parameter public static bool IsTriggeredNullChecked(this ITrigger trigger, bool nullValue = true) => trigger == null ? nullValue : trigger.IsTrigerred; } diff --git a/Runtime/Trigger.cs.meta b/Runtime/Trigger.cs.meta deleted file mode 100644 index 7acab2a..0000000 --- a/Runtime/Trigger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1e3718079b1e1024a997ca7eaa425903 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Trigger.cs b/Runtime/TriggerBase.cs similarity index 92% rename from Runtime/Trigger.cs rename to Runtime/TriggerBase.cs index 5e1d63d..0d30249 100644 --- a/Runtime/Trigger.cs +++ b/Runtime/TriggerBase.cs @@ -4,7 +4,7 @@ using UnityEngine; namespace Syntriax.Modules.Trigger { - public class Trigger : MonoBehaviour, ITrigger + public class TriggerBase : MonoBehaviour, ITrigger { public IToggleState ToggleStateMember { get; protected set; } = new ToggleStateMember(true); diff --git a/Runtime/TriggerBase.cs.meta b/Runtime/TriggerBase.cs.meta new file mode 100644 index 0000000..e00bab5 --- /dev/null +++ b/Runtime/TriggerBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f28f409248975dc4fb1d9e01e88ea65e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json index eb114af..0ae21ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.syntriax.trigger", - "version": "0.2.0", + "version": "0.3.0", "displayName": "Trigger Module", "unity": "2019.1", "documentationUrl": "https://git.syntriax.com/Syntriax/Trigger.git",