34 lines
860 B
C#
34 lines
860 B
C#
using System.Diagnostics;
|
|
|
|
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
|
|
|
[DebuggerDisplay("{Direction} - {Distance}")]
|
|
public record Path(Vector2 Direction, Distance Distance = Distance.OneStep)
|
|
{
|
|
|
|
public Path Invert() => new(Vector2.Negate(Direction), Distance);
|
|
}
|
|
|
|
public static class PathExtensions
|
|
{
|
|
public static Path GetNearestPath(this IEnumerable<Path> paths, Vector2 start, Vector2 end)
|
|
{
|
|
if (!paths.DefaultIfEmpty().Any())
|
|
{
|
|
throw new ArgumentException("No paths to get nearest path from.");
|
|
}
|
|
|
|
var shortestPath = paths.First();
|
|
foreach (var path in paths.Skip(1))
|
|
{
|
|
var distance = Vector2.Distance(start + path.Direction, end);
|
|
var shortestDistance = Vector2.Distance(start + shortestPath.Direction, end);
|
|
if (distance < shortestDistance)
|
|
{
|
|
shortestPath = path;
|
|
}
|
|
}
|
|
return shortestPath;
|
|
}
|
|
}
|