Minecraft-Console-Client/MinecraftClient/Pathing/Goals/GoalNear.cs

43 lines
1.1 KiB
C#
Raw Normal View History

using System;
namespace MinecraftClient.Pathing.Goals
{
public sealed class GoalNear : IGoal
{
public int X { get; }
public int Y { get; }
public int Z { get; }
public int Range { get; }
private readonly int _rangeSq;
public GoalNear(int x, int y, int z, int range)
{
X = x;
Y = y;
Z = z;
Range = range;
_rangeSq = range * range;
}
public bool IsInGoal(int x, int y, int z)
{
int dx = x - X;
int dy = y - Y;
int dz = z - Z;
return dx * dx + dy * dy + dz * dz <= _rangeSq;
}
public double Heuristic(int x, int y, int z)
{
int dx = Math.Abs(x - X);
int dy = Math.Abs(y - Y);
int dz = Math.Abs(z - Z);
double h = GoalBlock.DistanceHeuristic(dx, dy, dz);
double reduction = Range * Core.ActionCosts.SprintOneBlock;
return Math.Max(0, h - reduction);
}
public override string ToString() => $"GoalNear({X}, {Y}, {Z}, range={Range})";
}
}