feat(physics): added area & inertia calculations for the shape and circles
This commit is contained in:
@@ -30,6 +30,16 @@ public interface ICollider2D : IBehaviour
|
||||
/// </summary>
|
||||
IRigidBody2D? RigidBody2D { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The area of the <see cref="ICollider2D"/>.
|
||||
/// </summary>
|
||||
float Area { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The geometric inertia of the <see cref="ICollider2D"/>.
|
||||
/// </summary>
|
||||
float GeometricInertia { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The value indicating whether the <see cref="ICollider2D"/> is a trigger.
|
||||
/// </summary>
|
||||
|
||||
@@ -20,6 +20,9 @@ public abstract class Collider2DBase : Behaviour2D, ICollider2D
|
||||
public IRigidBody2D? RigidBody2D { get; protected set; } = null;
|
||||
public bool IsTrigger { get; set; } = false;
|
||||
|
||||
public abstract float Area { get; }
|
||||
public abstract float GeometricInertia { get; }
|
||||
|
||||
public void Recalculate()
|
||||
{
|
||||
if (!NeedsRecalculation)
|
||||
|
||||
@@ -15,7 +15,15 @@ public class Collider2DCircle : Collider2DBase, ICircleCollider2D
|
||||
}
|
||||
} = Circle.UnitCircle;
|
||||
|
||||
public override void CalculateCollider() => CircleWorld = Transform.Transform(CircleLocal);
|
||||
private float area = 0f; public override float Area => area;
|
||||
private float geometricInertia = 0f; public override float GeometricInertia => geometricInertia;
|
||||
|
||||
public override void CalculateCollider()
|
||||
{
|
||||
CircleWorld = Transform.Transform(CircleLocal);
|
||||
area = CircleWorld.Area;
|
||||
geometricInertia = CircleWorld.GeometricInertia;
|
||||
}
|
||||
|
||||
public Collider2DCircle() { }
|
||||
public Collider2DCircle(Circle circle) => CircleLocal = circle;
|
||||
|
||||
@@ -15,7 +15,16 @@ public class Collider2DShape : Collider2DBase, IShapeCollider2D
|
||||
}
|
||||
} = Shape2D.Square;
|
||||
|
||||
public override void CalculateCollider() => ShapeLocal.Transform(Transform, ShapeWorld);
|
||||
private float area = 0f; public override float Area => area;
|
||||
private float geometricInertia = 0f; public override float GeometricInertia => geometricInertia;
|
||||
|
||||
public override void CalculateCollider()
|
||||
{
|
||||
ShapeLocal.Transform(Transform, ShapeWorld);
|
||||
|
||||
area = ShapeWorld.Area;
|
||||
geometricInertia = ShapeWorld.GetGeometricInertia(Transform.Position);
|
||||
}
|
||||
|
||||
public Collider2DShape() { }
|
||||
public Collider2DShape(Shape2D shape) { ShapeLocal = shape; }
|
||||
|
||||
Reference in New Issue
Block a user