BREAKING CHANGE: New ICollider
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Syntriax.Engine.Core;
|
||||
using Syntriax.Engine.Core.Abstract;
|
||||
|
||||
namespace Syntriax.Engine.Physics2D.Primitives;
|
||||
|
||||
@@ -7,11 +8,26 @@ public record Circle(Vector2D Center, float Radius)
|
||||
public float RadiusSquared => Radius * Radius;
|
||||
public float Diameter => 2f * Radius;
|
||||
|
||||
public static Circle SetCenter(Circle circle, Vector2D center) => new(center, circle.Radius);
|
||||
public static Circle SetRadius(Circle circle, float radius) => new(circle.Center, radius);
|
||||
|
||||
public static Circle Displace(Circle circle, Vector2D displaceVector) => new(circle.Center + displaceVector, circle.Radius);
|
||||
|
||||
public static Circle TransformCircle(ITransform transform, Circle circle)
|
||||
=> new(transform.TransformVector2D(circle.Center), circle.Radius * transform.Scale.Magnitude);
|
||||
|
||||
public static bool ApproximatelyEquals(Circle left, Circle right)
|
||||
=> left.Center.ApproximatelyEquals(right.Center) && left.Radius.ApproximatelyEquals(right.Radius);
|
||||
}
|
||||
|
||||
public static class CircleExtensions
|
||||
{
|
||||
public static Circle SetCenter(this Circle circle, Vector2D center) => Circle.SetCenter(circle, center);
|
||||
public static Circle SetRadius(this Circle circle, float radius) => Circle.SetRadius(circle, radius);
|
||||
|
||||
public static Circle Displace(this Circle circle, Vector2D displaceVector) => Circle.Displace(circle, displaceVector);
|
||||
|
||||
public static Circle TransformCircle(this ITransform transform, Circle circle) => TransformCircle(transform, circle);
|
||||
|
||||
public static bool ApproximatelyEquals(this Circle left, Circle right) => Circle.ApproximatelyEquals(left, right);
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Syntriax.Engine.Core;
|
||||
using Syntriax.Engine.Core.Abstract;
|
||||
|
||||
namespace Syntriax.Engine.Physics2D.Primitives;
|
||||
|
||||
@@ -51,6 +52,26 @@ public record Shape(IList<Vector2D> Vertices) : IEnumerable<Vector2D>
|
||||
return lines;
|
||||
}
|
||||
|
||||
public static Shape TransformShape(Shape shape, ITransform transform)
|
||||
{
|
||||
List<Vector2D> vertices = new(shape.Vertices.Count);
|
||||
|
||||
int count = shape.Vertices.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
vertices.Add(transform.TransformVector2D(shape[i]));
|
||||
|
||||
return new Shape(vertices);
|
||||
}
|
||||
|
||||
public static void TransformShape(Shape from, ITransform transform, ref Shape to)
|
||||
{
|
||||
to.Vertices.Clear();
|
||||
|
||||
int count = from.Vertices.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
to.Vertices.Add(transform.TransformVector2D(from[i]));
|
||||
}
|
||||
|
||||
public static bool ApproximatelyEquals(Shape left, Shape right)
|
||||
{
|
||||
if (left.Vertices.Count != right.Vertices.Count)
|
||||
@@ -73,5 +94,8 @@ public static class ShapeExtensions
|
||||
public static void ToLines(this Shape shape, IList<Line> lines) => Shape.GetLines(shape, lines);
|
||||
public static List<Line> ToLines(this Shape shape) => Shape.GetLines(shape);
|
||||
|
||||
public static Shape TransformShape(this ITransform transform, Shape shape) => Shape.TransformShape(shape, transform);
|
||||
public static void TransformShape(this ITransform transform, Shape from, ref Shape to) => Shape.TransformShape(from, transform, ref to);
|
||||
|
||||
public static bool ApproximatelyEquals(this Shape left, Shape right) => Shape.ApproximatelyEquals(left, right);
|
||||
}
|
||||
|
Reference in New Issue
Block a user