| | | 1 | | //======================================================================= |
| | | 2 | | // ColliderSettings2D.cs |
| | | 3 | | //======================================================================= |
| | | 4 | | // MIT License, Copyright (c) 2026–present David Oravsky (mrdav30) |
| | | 5 | | // See LICENSE file in the project root for full license information. |
| | | 6 | | //======================================================================= |
| | | 7 | | |
| | | 8 | | using System.Runtime.CompilerServices; |
| | | 9 | | |
| | | 10 | | namespace Gravitas.Colliders; |
| | | 11 | | |
| | | 12 | | /// <summary> |
| | | 13 | | /// Provides deterministic priority and collision-dispatch metadata for pure 2D collider shapes. |
| | | 14 | | /// </summary> |
| | | 15 | | public static class ColliderSettings2D |
| | | 16 | | { |
| | | 17 | | /// <summary> |
| | | 18 | | /// Gets the narrow-phase priority used to order 2D colliders before dispatch. |
| | | 19 | | /// </summary> |
| | | 20 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | | 21 | | public static int GetPriority(ColliderType2D type) => |
| | 1572 | 22 | | type switch |
| | 1572 | 23 | | { |
| | 1144 | 24 | | ColliderType2D.Circle => 0, |
| | 11 | 25 | | ColliderType2D.Capsule => 0, |
| | 377 | 26 | | ColliderType2D.AABox => 1, |
| | 11 | 27 | | ColliderType2D.ConvexPolygon => 1, |
| | 27 | 28 | | ColliderType2D.Compound => 2, |
| | 2 | 29 | | _ => -1 |
| | 1572 | 30 | | }; |
| | | 31 | | |
| | | 32 | | /// <summary> |
| | | 33 | | /// Resolves the narrow-phase collision type for an ordered pair of 2D collider shapes. |
| | | 34 | | /// </summary> |
| | | 35 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | | 36 | | public static CollisionType2D GetCollisionType(ColliderType2D type1, ColliderType2D type2) => |
| | 2965 | 37 | | (type1, type2) switch |
| | 2965 | 38 | | { |
| | 341 | 39 | | (ColliderType2D.Circle, ColliderType2D.Circle) => CollisionType2D.Circle_Circle, |
| | 2965 | 40 | | (ColliderType2D.Circle, ColliderType2D.AABox or ColliderType2D.ConvexPolygon) => |
| | 50 | 41 | | CollisionType2D.Circle_Convex, |
| | 11 | 42 | | (ColliderType2D.Circle, ColliderType2D.Capsule) => CollisionType2D.Circle_Capsule, |
| | 2965 | 43 | | (ColliderType2D.AABox or ColliderType2D.ConvexPolygon, ColliderType2D.Circle) => |
| | 1532 | 44 | | CollisionType2D.Convex_Circle, |
| | 2965 | 45 | | ( |
| | 2965 | 46 | | ColliderType2D.AABox or ColliderType2D.ConvexPolygon, |
| | 467 | 47 | | ColliderType2D.AABox or ColliderType2D.ConvexPolygon) => CollisionType2D.Convex_Convex, |
| | 2965 | 48 | | (ColliderType2D.AABox or ColliderType2D.ConvexPolygon, ColliderType2D.Capsule) => |
| | 19 | 49 | | CollisionType2D.Convex_Capsule, |
| | 23 | 50 | | (ColliderType2D.Capsule, ColliderType2D.Circle) => CollisionType2D.Capsule_Circle, |
| | 2965 | 51 | | (ColliderType2D.Capsule, ColliderType2D.AABox or ColliderType2D.ConvexPolygon) => |
| | 448 | 52 | | CollisionType2D.Capsule_Convex, |
| | 23 | 53 | | (ColliderType2D.Capsule, ColliderType2D.Capsule) => CollisionType2D.Capsule_Capsule, |
| | 2965 | 54 | | ( |
| | 2965 | 55 | | ColliderType2D.Compound, |
| | 2965 | 56 | | ColliderType2D.Circle |
| | 2965 | 57 | | or ColliderType2D.AABox |
| | 2965 | 58 | | or ColliderType2D.ConvexPolygon |
| | 2965 | 59 | | or ColliderType2D.Compound |
| | 27 | 60 | | or ColliderType2D.Capsule) => CollisionType2D.Compound, |
| | 2965 | 61 | | ( |
| | 2965 | 62 | | ColliderType2D.Circle |
| | 2965 | 63 | | or ColliderType2D.AABox |
| | 2965 | 64 | | or ColliderType2D.ConvexPolygon |
| | 2965 | 65 | | or ColliderType2D.Capsule, |
| | 9 | 66 | | ColliderType2D.Compound) => CollisionType2D.Compound, |
| | 15 | 67 | | _ => CollisionType2D.None |
| | 2965 | 68 | | }; |
| | | 69 | | } |