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); } }
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); } }
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; })); }
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; } }
private float GetSkinWidth(ColliderSkin skin) { return(skin == ColliderSkin.INNER ? -innerSkinWidth : 0); }
public float GetSkinnedColliderRadius(ColliderSkin skin) { return(Mathf.Max(0, colliderRadius + GetSkinWidth(skin))); }
private float GetSkinWidthForDirection(Vector2 direction, ColliderSkin skin) { return(GetNormSkinWidthForDirection(direction) * GetSkinWidth(skin)); }