< Summary

Information
Class: Gravitas.Colliders.CompoundColliderPart2D
Assembly: Gravitas
File(s): /home/runner/work/Gravitas/Gravitas/src/Gravitas/Colliders/Compound/CompoundColliderPart2D.cs
Line coverage
100%
Covered lines: 46
Uncovered lines: 0
Coverable lines: 46
Total lines: 209
Line coverage: 100%
Branch coverage
100%
Covered branches: 14
Total branches: 14
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%11100%
.ctor(...)100%11100%
.ctor(...)100%22100%
get_Material()100%22100%
get_HasMaterial()100%22100%
Circle(...)100%11100%
Circle(...)100%11100%
Circle(...)100%11100%
Capsule(...)100%11100%
Capsule(...)100%11100%
Capsule(...)100%11100%
AABBox(...)100%11100%
AABBox(...)100%11100%
AABBox(...)100%11100%
ConvexPolygon(...)100%11100%
ConvexPolygon(...)100%11100%
ConvexPolygon(...)100%11100%
get_IsDefault()100%11100%
TryGetMaterial(...)100%44100%
ResolveMaterial(...)100%22100%
ValidateScale(...)100%22100%

File(s)

/home/runner/work/Gravitas/Gravitas/src/Gravitas/Colliders/Compound/CompoundColliderPart2D.cs

#LineLine coverage
 1//=======================================================================
 2// CompoundColliderPart2D.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
 8using FixedMathSharp;
 9using Gravitas.Materials;
 10using System.Runtime.CompilerServices;
 11
 12namespace Gravitas.Colliders;
 13
 14/// <summary>
 15/// Declares one data-only geometry part owned by an
 16/// <see cref="LSCompoundCollider2D"/>.
 17/// </summary>
 18public readonly struct CompoundColliderPart2D
 19{
 20    /// <summary>Creates a part from an authored pure 2D shape.</summary>
 21    public CompoundColliderPart2D(ColliderShapeDefinition2D shape)
 122        : this(shape, Vector2d.Zero, Fixed64.Zero, Vector2d.One, null)
 123    { }
 24
 25    /// <summary>Creates a part with a compound-local offset.</summary>
 26    public CompoundColliderPart2D(ColliderShapeDefinition2D shape, Vector2d localOffset)
 21227        : this(shape, localOffset, Fixed64.Zero, Vector2d.One, null)
 21228    { }
 29
 30    /// <summary>Creates a part with a compound-local pose.</summary>
 31    public CompoundColliderPart2D(
 32        ColliderShapeDefinition2D shape,
 33        Vector2d localOffset,
 34        Fixed64 localRotation)
 135        : this(shape, localOffset, localRotation, Vector2d.One, null)
 136    { }
 37
 38    /// <summary>Creates a part with a compound-local transform and optional material override.</summary>
 39    public CompoundColliderPart2D(
 40        ColliderShapeDefinition2D shape,
 41        Vector2d localOffset,
 42        Fixed64 localRotation,
 43        Vector2d localScale,
 44        PhysicsMaterial? material = null)
 45    {
 25846        shape.EnsureDefined();
 25847        ValidateScale(localScale);
 48
 25649        Shape = shape;
 25650        LocalOffset = localOffset;
 25651        LocalRotation = localRotation;
 25652        LocalScale = localScale;
 25653        _material = material ?? PhysicsMaterial.Default;
 25654        _hasMaterial = material.HasValue;
 25655    }
 56
 57    private readonly PhysicsMaterial _material;
 58    private readonly bool _hasMaterial;
 59
 60    /// <summary>
 61    /// Gets the authored data-only shape definition for this part.
 62    /// </summary>
 63    public ColliderShapeDefinition2D Shape { get; }
 64
 65    /// <summary>
 66    /// Gets the deterministic local center offset applied relative to the
 67    /// owning compound collider.
 68    /// </summary>
 69    public Vector2d LocalOffset { get; }
 70
 71    /// <summary>
 72    /// Gets the deterministic local rotation applied relative to the owning
 73    /// compound collider.
 74    /// </summary>
 75    public Fixed64 LocalRotation { get; }
 76
 77    /// <summary>
 78    /// Gets the deterministic local scale applied relative to the owning
 79    /// compound collider.
 80    /// </summary>
 81    public Vector2d LocalScale { get; }
 82
 83    /// <summary>
 84    /// Gets the authored material for this 2D part, or the shape/default
 85    /// material when no part-level material was supplied.
 86    /// </summary>
 487    public PhysicsMaterial Material => TryGetMaterial(out PhysicsMaterial material)
 488        ? material
 489        : PhysicsMaterial.Default;
 90
 91    internal bool HasMaterial
 92    {
 93        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 4094        get => _hasMaterial || Shape.HasMaterial;
 95    }
 96
 97    /// <summary>Creates a circle part.</summary>
 98    public static CompoundColliderPart2D Circle(Fixed64 radius, Vector2d localOffset) =>
 14299        new(ColliderShapeDefinition2D.Circle(radius), localOffset);
 100
 101    /// <summary>Creates a circle part with a material override.</summary>
 102    public static CompoundColliderPart2D Circle(
 103        Fixed64 radius,
 104        Vector2d localOffset,
 105        PhysicsMaterial material) =>
 5106        new(ColliderShapeDefinition2D.Circle(radius), localOffset, Fixed64.Zero, Vector2d.One, material);
 107
 108    /// <summary>Creates a transformed circle part.</summary>
 109    public static CompoundColliderPart2D Circle(
 110        Fixed64 radius,
 111        Vector2d localOffset,
 112        Fixed64 localRotation,
 113        Vector2d localScale) =>
 8114        new(ColliderShapeDefinition2D.Circle(radius), localOffset, localRotation, localScale);
 115
 116    /// <summary>Creates a capsule part.</summary>
 117    public static CompoundColliderPart2D Capsule(Fixed64 radius, Fixed64 height, Vector2d localOffset) =>
 7118        new(ColliderShapeDefinition2D.Capsule(radius, height), localOffset);
 119
 120    /// <summary>Creates a capsule part with a material override.</summary>
 121    public static CompoundColliderPart2D Capsule(
 122        Fixed64 radius,
 123        Fixed64 height,
 124        Vector2d localOffset,
 125        PhysicsMaterial material) =>
 1126        new(ColliderShapeDefinition2D.Capsule(radius, height), localOffset, Fixed64.Zero, Vector2d.One, material);
 127
 128    /// <summary>Creates a transformed capsule part.</summary>
 129    public static CompoundColliderPart2D Capsule(
 130        Fixed64 radius,
 131        Fixed64 height,
 132        Vector2d localOffset,
 133        Fixed64 localRotation,
 134        Vector2d localScale) =>
 7135        new(ColliderShapeDefinition2D.Capsule(radius, height), localOffset, localRotation, localScale);
 136
 137    /// <summary>Creates an axis-aligned box part.</summary>
 138    public static CompoundColliderPart2D AABBox(Vector2d size, Vector2d localOffset) =>
 28139        new(ColliderShapeDefinition2D.AABBox(size), localOffset);
 140
 141    /// <summary>Creates an axis-aligned box part with a material override.</summary>
 142    public static CompoundColliderPart2D AABBox(
 143        Vector2d size,
 144        Vector2d localOffset,
 145        PhysicsMaterial material) =>
 1146        new(ColliderShapeDefinition2D.AABBox(size), localOffset, Fixed64.Zero, Vector2d.One, material);
 147
 148    /// <summary>Creates a transformed axis-aligned box part.</summary>
 149    public static CompoundColliderPart2D AABBox(
 150        Vector2d size,
 151        Vector2d localOffset,
 152        Fixed64 localRotation,
 153        Vector2d localScale) =>
 1154        new(ColliderShapeDefinition2D.AABBox(size), localOffset, localRotation, localScale);
 155
 156    /// <summary>Creates a convex-polygon part.</summary>
 157    public static CompoundColliderPart2D ConvexPolygon(Vector2d[] vertices, Vector2d localOffset) =>
 5158        new(ColliderShapeDefinition2D.ConvexPolygon(vertices), localOffset);
 159
 160    /// <summary>Creates a convex-polygon part with a material override.</summary>
 161    public static CompoundColliderPart2D ConvexPolygon(
 162        Vector2d[] vertices,
 163        Vector2d localOffset,
 164        PhysicsMaterial material) =>
 1165        new(ColliderShapeDefinition2D.ConvexPolygon(vertices), localOffset, Fixed64.Zero, Vector2d.One, material);
 166
 167    /// <summary>Creates a transformed convex-polygon part.</summary>
 168    public static CompoundColliderPart2D ConvexPolygon(
 169        Vector2d[] vertices,
 170        Vector2d localOffset,
 171        Fixed64 localRotation,
 172        Vector2d localScale) =>
 8173        new(ColliderShapeDefinition2D.ConvexPolygon(vertices), localOffset, localRotation, localScale);
 174
 175    internal bool IsDefault
 176    {
 177        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 248178        get => Shape.Kind == ColliderShapeDefinition2DKind.Undefined;
 179    }
 180
 181    internal bool TryGetMaterial(out PhysicsMaterial material)
 182    {
 294183        if (_hasMaterial)
 184        {
 30185            material = _material;
 30186            return true;
 187        }
 188
 264189        if (Shape.HasMaterial)
 190        {
 20191            material = Shape.Material;
 20192            return true;
 193        }
 194
 244195        material = PhysicsMaterial.Default;
 244196        return false;
 197    }
 198
 199    internal PhysicsMaterial ResolveMaterial(PhysicsMaterial ownerMaterial) =>
 250200        TryGetMaterial(out PhysicsMaterial material) ? material : ownerMaterial;
 201
 202    private static void ValidateScale(Vector2d localScale)
 203    {
 258204        SwiftThrowHelper.ThrowIfArgument(
 258205            localScale.X <= Fixed64.Zero || localScale.Y <= Fixed64.Zero,
 258206            nameof(localScale),
 258207            "2D compound collider part scale components must be greater than zero.");
 256208    }
 209}

Methods/Properties

.ctor(Gravitas.Colliders.ColliderShapeDefinition2D)
.ctor(Gravitas.Colliders.ColliderShapeDefinition2D,FixedMathSharp.Vector2d)
.ctor(Gravitas.Colliders.ColliderShapeDefinition2D,FixedMathSharp.Vector2d,FixedMathSharp.Fixed64)
.ctor(Gravitas.Colliders.ColliderShapeDefinition2D,FixedMathSharp.Vector2d,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d,System.Nullable`1<Gravitas.Materials.PhysicsMaterial>)
get_Material()
get_HasMaterial()
Circle(FixedMathSharp.Fixed64,FixedMathSharp.Vector2d)
Circle(FixedMathSharp.Fixed64,FixedMathSharp.Vector2d,Gravitas.Materials.PhysicsMaterial)
Circle(FixedMathSharp.Fixed64,FixedMathSharp.Vector2d,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d)
Capsule(FixedMathSharp.Fixed64,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d)
Capsule(FixedMathSharp.Fixed64,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d,Gravitas.Materials.PhysicsMaterial)
Capsule(FixedMathSharp.Fixed64,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d)
AABBox(FixedMathSharp.Vector2d,FixedMathSharp.Vector2d)
AABBox(FixedMathSharp.Vector2d,FixedMathSharp.Vector2d,Gravitas.Materials.PhysicsMaterial)
AABBox(FixedMathSharp.Vector2d,FixedMathSharp.Vector2d,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d)
ConvexPolygon(FixedMathSharp.Vector2d[],FixedMathSharp.Vector2d)
ConvexPolygon(FixedMathSharp.Vector2d[],FixedMathSharp.Vector2d,Gravitas.Materials.PhysicsMaterial)
ConvexPolygon(FixedMathSharp.Vector2d[],FixedMathSharp.Vector2d,FixedMathSharp.Fixed64,FixedMathSharp.Vector2d)
get_IsDefault()
TryGetMaterial(Gravitas.Materials.PhysicsMaterial&)
ResolveMaterial(Gravitas.Materials.PhysicsMaterial)
ValidateScale(FixedMathSharp.Vector2d)