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)));
        }