private static SquarePoint GetClosetSqare(SquareInformation pInfo, HeightInfo Height) { double Closest = pInfo.Point.GetDistance; //Initialized SquarePoint ClosestPoint = pInfo.Point; double InfoOnSqare = Height.GetState(pInfo.Point.X, pInfo.Point.Y); for (int i = 0; i < 8; i++) { SquarePoint Position = pInfo.Pos(i); if (!Position.InUse) { continue; } if (Position.CanWalk) { if (Height.GetState(Position.X, Position.Y) - InfoOnSqare < 3) { double Distance = Position.GetDistance; if (Closest > Distance) { Closest = Distance; ClosestPoint = Position; } } } } return(ClosestPoint); }
internal static SquarePoint GetNextStep(int pUserX, int pUserY, int pUserTargetX, int pUserTargetY, SqState[,] pGameMap, double[,] pHeight, int MaxX, int MaxY, bool pUserOverride, bool pDiagonal) { ModelInfo MapInfo = new ModelInfo(MaxX, MaxY, pGameMap); SquarePoint TargetPoint = new SquarePoint(pUserTargetX, pUserTargetY, pUserTargetX, pUserTargetY, MapInfo.GetState(pUserTargetX, pUserTargetY), pUserOverride); if (pUserX == pUserTargetX && pUserY == pUserTargetY) //User is allready standing on its target { return(TargetPoint); } SquareInformation SquareOnUser = new SquareInformation(pUserX, pUserY, TargetPoint, MapInfo, pUserOverride, pDiagonal); //if (!TargetPoint.CanWalk) // return SquareOnUser.Point; return(GetClosetSqare(SquareOnUser, new HeightInfo(MaxX, MaxY, pHeight))); }