2019-08-18 15:14:35 +02:00
|
|
|
using System;
|
|
|
|
using System.Linq;
|
|
|
|
using Microsoft.Xna.Framework;
|
2019-09-04 13:05:44 +02:00
|
|
|
using MLEM.Misc;
|
2019-08-18 15:14:35 +02:00
|
|
|
|
|
|
|
namespace MLEM.Pathfinding {
|
2020-05-21 17:21:34 +02:00
|
|
|
/// <summary>
|
|
|
|
/// A 2-dimensional implementation of <see cref="AStar{T}"/> that uses <see cref="Point"/> for positions.
|
|
|
|
/// </summary>
|
2019-08-18 15:14:35 +02:00
|
|
|
public class AStar2 : AStar<Point> {
|
|
|
|
|
2019-09-04 13:05:44 +02:00
|
|
|
private static readonly Point[] AdjacentDirs = Direction2Helper.Adjacent.Offsets().ToArray();
|
|
|
|
private static readonly Point[] AllDirs = Direction2Helper.All.Offsets().ToArray();
|
2019-08-18 15:14:35 +02:00
|
|
|
|
2020-05-21 17:21:34 +02:00
|
|
|
/// <inheritdoc />
|
2019-08-18 15:14:35 +02:00
|
|
|
public AStar2(GetCost defaultCostFunction, bool defaultAllowDiagonals, float defaultCost = 1, int defaultMaxTries = 10000) :
|
|
|
|
base(AllDirs, AdjacentDirs, defaultCostFunction, defaultAllowDiagonals, defaultCost, defaultMaxTries) {
|
|
|
|
}
|
|
|
|
|
2020-05-21 17:21:34 +02:00
|
|
|
/// <inheritdoc />
|
2019-08-18 15:14:35 +02:00
|
|
|
protected override Point AddPositions(Point first, Point second) {
|
|
|
|
return first + second;
|
|
|
|
}
|
|
|
|
|
2020-05-21 17:21:34 +02:00
|
|
|
/// <inheritdoc />
|
2019-08-18 15:14:35 +02:00
|
|
|
protected override float GetManhattanDistance(Point first, Point second) {
|
|
|
|
return Math.Abs(second.X - first.X) + Math.Abs(second.Y - first.Y);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|