From f137f1202b1e469fc3db66c0cd1b08c59f0dde3a Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sat, 17 Dec 2022 11:55:01 +0300 Subject: [PATCH] ToggleStateMembers added to ITrigger & OnTriggeredCollidersUpdated to IColliderTrigger & Added Dependency to ToggleState Module --- README.md | 2 ++ Runtime/Box2DColliderTrigger.cs | 31 ++++++++++++++++++--- Runtime/Box2DColliderTriggerWithRotation.cs | 31 ++++++++++++++++++--- Runtime/IColliderTrigger.cs | 11 ++++++++ Runtime/ITrigger.cs | 8 +++++- Runtime/Syntriax.Modules.Trigger.asmdef | 17 +++++++++-- Runtime/Trigger.cs | 9 ++++-- package.json | 2 +- 8 files changed, 96 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 24ffe72..b3bc691 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # Trigger +## Dependencies +1. [ToggleState Module](https://git.syntriax.com/Syntriax/ToggleState) diff --git a/Runtime/Box2DColliderTrigger.cs b/Runtime/Box2DColliderTrigger.cs index 2c6dcf4..ef902d8 100644 --- a/Runtime/Box2DColliderTrigger.cs +++ b/Runtime/Box2DColliderTrigger.cs @@ -1,17 +1,40 @@ +using System; +using System.Collections.Generic; +using Syntriax.Modules.ToggleState; using UnityEngine; namespace Syntriax.Modules.Trigger { - public class Box2DColliderTrigger : Trigger, IColliderTrigger { - public LayerMask ColliderMask { get => colliderMask; set => colliderMask = value; } [SerializeField] private LayerMask colliderMask = 0; - private Collider2D[] results = new Collider2D[8]; + 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() - => IsTrigerred = Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, 0, results, ColliderMask) > 0; + { + 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() diff --git a/Runtime/Box2DColliderTriggerWithRotation.cs b/Runtime/Box2DColliderTriggerWithRotation.cs index 987ab9c..5fe3dc9 100644 --- a/Runtime/Box2DColliderTriggerWithRotation.cs +++ b/Runtime/Box2DColliderTriggerWithRotation.cs @@ -1,17 +1,40 @@ +using System; +using System.Collections.Generic; +using Syntriax.Modules.ToggleState; using UnityEngine; namespace Syntriax.Modules.Trigger { - public class Box2DColliderTriggerWithRotation : Trigger, IColliderTrigger { - public LayerMask ColliderMask { get => colliderMask; set => colliderMask = value; } [SerializeField] private LayerMask colliderMask = 0; - private Collider2D[] results = new Collider2D[8]; + 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() - => IsTrigerred = Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, transform.rotation.eulerAngles.z, results, ColliderMask) > 0; + { + 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() diff --git a/Runtime/IColliderTrigger.cs b/Runtime/IColliderTrigger.cs index 269c6f7..b094a8e 100644 --- a/Runtime/IColliderTrigger.cs +++ b/Runtime/IColliderTrigger.cs @@ -1,9 +1,20 @@ +using System; +using System.Collections.Generic; using UnityEngine; namespace Syntriax.Modules.Trigger { public interface IColliderTrigger : ITrigger { + /// + /// value for checking triggers + /// LayerMask ColliderMask { get; set; } + + /// + /// Called whenever the list of changes + /// + /// List of that triggered the + Action> OnTriggeredCollidersUpdated { get; set; } } } diff --git a/Runtime/ITrigger.cs b/Runtime/ITrigger.cs index 79c51e7..58f8673 100644 --- a/Runtime/ITrigger.cs +++ b/Runtime/ITrigger.cs @@ -1,14 +1,20 @@ using System; +using Syntriax.Modules.ToggleState; namespace Syntriax.Modules.Trigger { public interface ITrigger { + /// + /// Member to switch on or off + /// + IToggleState ToggleStateMember { get; } + /// /// Called everytime the IsTrigerred field is changed /// /// The new value of IsTrigerred - Action OnTriggered { get; set; } + Action OnTriggerStateChanged { get; set; } bool IsTrigerred { get; } } } diff --git a/Runtime/Syntriax.Modules.Trigger.asmdef b/Runtime/Syntriax.Modules.Trigger.asmdef index a51fdcb..97053d0 100644 --- a/Runtime/Syntriax.Modules.Trigger.asmdef +++ b/Runtime/Syntriax.Modules.Trigger.asmdef @@ -1,3 +1,16 @@ { - "name": "Syntriax.Modules.Trigger" -} + "name": "Syntriax.Modules.Trigger", + "rootNamespace": "", + "references": [ + "GUID:efa9a9bc94c60c74684aafb7428fbf61" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/Trigger.cs b/Runtime/Trigger.cs index 83d94cc..5e1d63d 100644 --- a/Runtime/Trigger.cs +++ b/Runtime/Trigger.cs @@ -1,11 +1,14 @@ using System; +using Syntriax.Modules.ToggleState; using UnityEngine; namespace Syntriax.Modules.Trigger { public class Trigger : MonoBehaviour, ITrigger { - public Action OnTriggered { get; set; } = null; + public IToggleState ToggleStateMember { get; protected set; } = new ToggleStateMember(true); + + public Action OnTriggerStateChanged { get; set; } = null; private bool _isTrigerred = false; public bool IsTrigerred @@ -13,11 +16,11 @@ namespace Syntriax.Modules.Trigger get => _isTrigerred; protected set { - if (value == _isTrigerred) + if (value == _isTrigerred || !ToggleStateMember.IsToggledNullChecked()) return; _isTrigerred = value; - OnTriggered?.Invoke(value); + OnTriggerStateChanged?.Invoke(value); } } } diff --git a/package.json b/package.json index 514f1d8..453cc25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.syntriax.trigger", - "version": "0.1.0", + "version": "0.2.0", "displayName": "Trigger Module", "unity": "2019.1", "documentationUrl": "https://git.syntriax.com/Syntriax/Trigger.git",