Exemple #1
0
        public Vector2 GetSkinnedColliderSize(ColliderSkin skin)
        {
            float skinWidth = GetSkinWidth(skin);

            if (geometry.colliderType == ColliderType.Circle)
            {
                return(colliderSize + Vector2.one * skinWidth);
            }
            else
            {
                return(colliderSize + 2 * Vector2.one * skinWidth);
            }
        }
Exemple #2
0
        public IEnumerable <Collider2D> OverlapAll(Vector2 colliderPosition, float colliderAngle, ColliderSkin colliderToUse)
        {
            switch (geometry.colliderType)
            {
            case ColliderType.Box:
                return(OverlapRoundedBoxAll(colliderPosition + offset, GetSkinnedColliderSize(colliderToUse), GetSkinnedColliderRadius(colliderToUse), colliderAngle, interactionMask));

            case ColliderType.Capsule:
                return(Physics2D.OverlapCapsuleAll(colliderPosition + offset, GetSkinnedColliderSize(colliderToUse), colliderDirection, colliderAngle, interactionMask));

            case ColliderType.Circle:
                return(Physics2D.OverlapCircleAll(colliderPosition + offset, GetSkinnedColliderRadius(colliderToUse), interactionMask));

            default:
                Debug.LogError("Invalid or unset Collider2D (KMGMovement2D only supports CircleCollider2D, BoxCollider2D, and CapsuleCollider2D).");
                return(null);
            }
        }
Exemple #3
0
        public IEnumerable <RaycastHit2D> CastAll(Vector2 colliderPosition, float colliderAngle, Vector2 direction, float distance, ColliderSkin colliderToUse)
        {
            float skinOffset = GetSkinWidthForDirection(direction, colliderToUse);
            IEnumerable <RaycastHit2D> hits = null;

            switch (geometry.colliderType)
            {
            case ColliderType.Box:
                hits = RoundedBoxCastAll(colliderPosition + offset, GetSkinnedColliderSize(colliderToUse), GetSkinnedColliderRadius(colliderToUse), colliderAngle, direction.normalized, distance - skinOffset, interactionMask);
                break;

            case ColliderType.Capsule:
                hits = Physics2D.CapsuleCastAll(colliderPosition + offset, GetSkinnedColliderSize(colliderToUse), colliderDirection, colliderAngle, direction, distance - skinOffset, interactionMask);
                break;

            case ColliderType.Circle:
                hits = Physics2D.CircleCastAll(colliderPosition + offset, GetSkinnedColliderRadius(colliderToUse), direction.normalized, distance - skinOffset, interactionMask);
                break;

            default:
                Debug.LogError("Invalid or unset Collider2D (KMGMovement2D only supports CircleCollider2D, BoxCollider2D, and CapsuleCollider2D).");
                return(null);
            }
            return(hits.Select(delegate(RaycastHit2D x) {
                x.distance += skinOffset;
                return x;
            }));
        }
Exemple #4
0
        public void DrawColliderAtPosition(Vector2 position, float colliderAngle, Color color, ColliderSkin colliderToUse, bool debug, float duration)
        {
            switch (geometry.colliderType)
            {
            case ColliderType.Box:
                DrawingUtilities.DrawRectangle(position + offset, GetSkinnedColliderSize(colliderToUse), GetSkinnedColliderRadius(colliderToUse), colliderAngle, color, debug, duration);
                break;

            case ColliderType.Capsule:
                DrawingUtilities.DrawCapsule(position + offset, GetSkinnedColliderSize(colliderToUse), colliderDirection, colliderAngle, color, debug, duration);
                break;

            case ColliderType.Circle:
                DrawingUtilities.DrawCircle(position + offset, GetSkinnedColliderRadius(colliderToUse), color, 0.0f, 360.0f, debug, duration);
                break;
            }
        }
Exemple #5
0
 private float GetSkinWidth(ColliderSkin skin)
 {
     return(skin == ColliderSkin.INNER ? -innerSkinWidth : 0);
 }
Exemple #6
0
 public float GetSkinnedColliderRadius(ColliderSkin skin)
 {
     return(Mathf.Max(0, colliderRadius + GetSkinWidth(skin)));
 }
Exemple #7
0
 private float GetSkinWidthForDirection(Vector2 direction, ColliderSkin skin)
 {
     return(GetNormSkinWidthForDirection(direction) * GetSkinWidth(skin));
 }