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 } }