public override MapObjectHoverData GetHoverDataTopDownView(bool isForObjectDrag, bool forceCursorPosition)
        {
            Point?relPosMaybe = MapObjectHoverData.GetPositionMaybe(isForObjectDrag, forceCursorPosition);

            if (!relPosMaybe.HasValue)
            {
                return(null);
            }
            Point relPos = relPosMaybe.Value;

            (float inGameX, float inGameZ) = MapUtilities.ConvertCoordsForInGameTopDownView(relPos.X, relPos.Y);
            var quadList = GetQuadList(null);

            for (int i = quadList.Count - 1; i >= 0; i--)
            {
                var quad       = quadList[i];
                var simpleQuad = quad.ConvertAll(q => (q.x, q.y, q.z));
                if (MapUtilities.IsWithinRectangularQuad(simpleQuad, inGameX, inGameZ) || forceCursorPosition)
                {
                    double xMin = quad.Min(p => p.x);
                    double xMax = quad.Max(p => p.x);
                    double zMin = quad.Min(p => p.z);
                    double zMax = quad.Max(p => p.z);
                    string info = string.Format("{0}<x<{1} {2}<z<{3}", xMin, xMax, zMin, zMax);
                    return(new MapObjectHoverData(this, 0, 0, 0, index: i, info: info));
                }
            }
            return(null);
        }
        public override MapObjectHoverData GetHoverDataTopDownView(bool isForObjectDrag, bool forceCursorPosition)
        {
            Point?relPosMaybe = MapObjectHoverData.GetPositionMaybe(isForObjectDrag, forceCursorPosition);

            if (!relPosMaybe.HasValue)
            {
                return(null);
            }
            Point relPos = relPosMaybe.Value;

            (float inGameX, float inGameZ) = MapUtilities.ConvertCoordsForInGameTopDownView(relPos.X, relPos.Y);
            var quadList = GetQuadList(null);

            for (int i = quadList.Count - 1; i >= 0; i--)
            {
                var quad       = quadList[i];
                var simpleQuad = quad.ConvertAll(q => (q.x, q.y, q.z));
                if (MapUtilities.IsWithinRectangularQuad(simpleQuad, inGameX, inGameZ) || forceCursorPosition)
                {
                    (float x, float z) = GetQuadMidpoint(quad);
                    return(new MapObjectHoverData(this, x, GetHeight(), z, index: i));
                }
            }
            return(null);
        }