using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Lightbug.Utilities { /// /// This component represents a capsule collider in a 2D world. /// public class CapsuleColliderComponent2D : ColliderComponent2D { CapsuleCollider2D capsuleCollider = null; public override Vector3 Size { get => capsuleCollider.size; set => capsuleCollider.size = value; } public override Vector3 BoundsSize => capsuleCollider.bounds.size; public override Vector3 Offset { get => capsuleCollider.offset; set => capsuleCollider.offset = value; } protected override int InternalOverlapBody(Vector3 position, Quaternion rotation, Collider2D[] unfilteredResults, List filteredResults, OverlapFilterDelegate2D filter) { var up = rotation * Vector3.up; var center = position + rotation * capsuleCollider.offset; var angle = rotation.eulerAngles.z; var qht = Physics2D.queriesHitTriggers; Physics2D.queriesHitTriggers = false; ContactFilter.layerMask = Physics2D.DefaultRaycastLayers; var overlaps = Physics2D.OverlapCapsule( center, capsuleCollider.size, CapsuleDirection2D.Vertical, angle, ContactFilter, unfilteredResults ); Physics2D.queriesHitTriggers = qht; return FilterValidOverlaps(overlaps, unfilteredResults, filteredResults, filter); } protected override void Awake() { capsuleCollider = gameObject.GetOrAddComponent(); collider = capsuleCollider; base.Awake(); } } }