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);
        }
Exemple #2
0
        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);

            List <(float x, float y, float z, float angle, bool rotates, Image image, int tex, uint objAddress)> data = GetData();

            foreach (var dataPoint in data)
            {
                double dist   = MoreMath.GetDistanceBetween(dataPoint.x, dataPoint.z, inGameX, inGameZ);
                double radius = Scales ? Size : Size / Config.CurrentMapGraphics.MapViewScaleValue;
                if (dist <= radius || forceCursorPosition)
                {
                    return(new MapObjectHoverData(this, dataPoint.x, dataPoint.y, dataPoint.z, objAddress: dataPoint.objAddress));
                }
            }
            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);
        }
Exemple #4
0
        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 data = GetData();

            for (int i = 0; i < data.Count; i++)
            {
                var    dataPoint = data[i];
                double dist      = MoreMath.GetDistanceBetween(dataPoint.x, dataPoint.z, inGameX, inGameZ);
                double radius    = Scales ? Size : Size / Config.CurrentMapGraphics.MapViewScaleValue;
                if (dist <= radius || forceCursorPosition)
                {
                    return(new MapObjectHoverData(this, dataPoint.x, dataPoint.y, dataPoint.z, index: i));
                }
            }
            return(null);
        }
        public override MapObjectHoverData GetHoverDataTopDownView(bool isForObjectDrag, bool forceCursorPosition)
        {
            if (_customImage == null)
            {
                return(null);
            }

            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 positions = GetGridlineIntersectionPositionsTopDownView();

            for (int i = positions.Count - 1; i >= 0; i--)
            {
                var    position = positions[i];
                double dist     = MoreMath.GetDistanceBetween(position.x, position.z, inGameX, inGameZ);
                double radius   = Scales ? _imageSize : _imageSize / Config.CurrentMapGraphics.MapViewScaleValue;
                if (dist <= radius || forceCursorPosition)
                {
                    return(new MapObjectHoverData(this, position.x, 0, position.z, index: i));
                }
            }
            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);
            int inGameXTruncated = (int)inGameX;
            int inGameZTruncated = (int)inGameZ;

            (double x, double y, double z, double angle) = _posAngle.GetValues();
            int xTruncated = (int)x;
            int yTruncated = (int)y;
            int zTruncated = (int)z;

            if (xTruncated == inGameXTruncated && zTruncated == inGameZTruncated || forceCursorPosition)
            {
                return(new MapObjectHoverData(this, xTruncated, yTruncated, zTruncated));
            }
            return(null);
        }
        public override MapObjectHoverData GetHoverDataTopDownView(bool isForObjectDrag, bool forceCursorPosition)
        {
            if (_customImage == null)
            {
                return(null);
            }

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

            (double x, double y, double z) = PositionAngle.GetMidPoint(_posAngle1, _posAngle2);
            double dist   = MoreMath.GetDistanceBetween(x, z, inGameX, inGameZ);
            double radius = Scales ? _iconSize : _iconSize / Config.CurrentMapGraphics.MapViewScaleValue;

            if (dist <= radius || forceCursorPosition)
            {
                return(new MapObjectHoverData(this, x, y, z));
            }
            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);

            List <(float centerX, float centerY, float centerZ, float radius, Color color)> dimensionList = Get2DDimensions();

            for (int i = dimensionList.Count - 1; i >= 0; i--)
            {
                var   dimension = dimensionList[i];
                float y         = dimension.centerY;

                if (_customImage != null)
                {
                    List <(float x, float z)> positions        = MapUtilities.GetFloatPositions(10_000);
                    List <(float x, float z)> controlPositions = positions.ConvertAll(
                        p => MapUtilities.ConvertCoordsForControlTopDownView(p.x, p.z, UseRelativeCoordinates));
                    for (int j = controlPositions.Count - 1; j >= 0; j--)
                    {
                        var    position        = positions[j];
                        var    controlPosition = controlPositions[j];
                        double controlDist     = MoreMath.GetDistanceBetween(controlPosition.x, controlPosition.z, relPos.X, relPos.Y);
                        double radius          = Scales ? _imageSize * Config.CurrentMapGraphics.MapViewScaleValue : _imageSize;
                        if (controlDist <= radius || forceCursorPosition)
                        {
                            return(new MapObjectHoverData(this, position.x, y, position.z, index: i, index2: j));
                        }
                    }
                }

                double dist = MoreMath.GetDistanceBetween(dimension.centerX, dimension.centerZ, inGameX, inGameZ);
                if (dist <= dimension.radius)
                {
                    return(new MapObjectHoverData(this, dimension.centerX, y, dimension.centerZ, index: i));
                }
            }
            return(null);
        }
Exemple #9
0
        public static (float x, float y, float z)? GetCursorPosition(bool isForObjectDrag)
        {
            Point?relPosMaybe = GetPositionMaybe(isForObjectDrag, false);

            if (!relPosMaybe.HasValue)
            {
                return(null);
            }
            Point relPos = relPosMaybe.Value;
            float inGameX, inGameY, inGameZ;

            if (Config.CurrentMapGraphics.IsOrthographicViewEnabled)
            {
                (inGameX, inGameY, inGameZ) = MapUtilities.ConvertCoordsForInGameOrthographicView(relPos.X, relPos.Y);
            }
            else
            {
                (inGameX, inGameZ) = MapUtilities.ConvertCoordsForInGameTopDownView(relPos.X, relPos.Y);
                inGameY            = Config.CurrentMapGraphics.MapViewCenterYValue;
            }
            return(inGameX, inGameY, inGameZ);
        }
Exemple #10
0
        public override MapObjectHoverData GetHoverDataTopDownView(bool isForObjectDrag, bool forceCursorPosition)
        {
            Point?relPosMaybe = MapObjectHoverData.GetPositionMaybe(isForObjectDrag, forceCursorPosition);

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

            float marioHeight = Config.Stream.GetFloat(MarioConfig.StructAddress + MarioConfig.YOffset);
            float?height      = _relativeHeight.HasValue ? marioHeight - _relativeHeight.Value : _absoluteHeight;

            List <TriangleMapData> wallDataList = GetFilteredTriangles()
                                                  .ConvertAll(tri => MapUtilities.Get2DWallDataFromTri(tri, height))
                                                  .FindAll(wallDataNullable => wallDataNullable != null);

            for (int i = wallDataList.Count - 1; i >= 0; i--)
            {
                TriangleMapData wallData = wallDataList[i];

                float angle          = (float)MoreMath.AngleTo_Radians(wallData.X1, wallData.Z1, wallData.X2, wallData.Z2);
                float projectionDist = Size / (float)Math.Abs(wallData.Tri.XProjection ? Math.Cos(angle) : Math.Sin(angle));
                List <List <(float x, float z)> > quads = new List <List <(float x, float z)> >();
                void addQuad(float xAdd, float zAdd)
                {
                    quads.Add(new List <(float x, float z)>()
                    {
                        (wallData.X1, wallData.Z1),
                        (wallData.X1 + xAdd, wallData.Z1 + zAdd),
                        (wallData.X2 + xAdd, wallData.Z2 + zAdd),
                        (wallData.X2, wallData.Z2),
                    });
                };
                if (wallData.Tri.XProjection)
                {
                    addQuad(projectionDist, 0);
                    addQuad(-1 * projectionDist, 0);
                }
                else
                {
                    addQuad(0, projectionDist);
                    addQuad(0, -1 * projectionDist);
                }

                List <List <(float x, float z)> > quadsForControl =
                    quads.ConvertAll(quad => quad.ConvertAll(
                                         vertex => MapUtilities.ConvertCoordsForControlTopDownView(vertex.x, vertex.z, UseRelativeCoordinates)));

                for (int j = 0; j < quadsForControl.Count; j++)
                {
                    List <(float x, float z)> quadForControl = quadsForControl[j];
                    if (_customImage != null)
                    {
                        for (int k = 0; k < quadForControl.Count; k++)
                        {
                            var    vertex = quadForControl[k];
                            double dist   = MoreMath.GetDistanceBetween(vertex.x, vertex.z, relPos.X, relPos.Y);
                            double radius = Scales ? _iconSize * Config.CurrentMapGraphics.MapViewScaleValue : _iconSize;
                            if (dist <= radius || forceCursorPosition)
                            {
                                (float x, float z) = MapUtilities.ConvertCoordsForInGameTopDownView(vertex.x, vertex.z);
                                return(new MapObjectHoverData(this, x, 0, z, tri: wallData.Tri, index: j, index2: k));
                            }
                        }
                    }
                    if (MapUtilities.IsWithinShapeForControl(quadForControl, relPos.X, relPos.Y) || forceCursorPosition)
                    {
                        return(new MapObjectHoverData(
                                   this, wallData.Tri.GetMidpointX(), wallData.Tri.GetMidpointY(), wallData.Tri.GetMidpointZ(), tri: wallData.Tri));
                    }
                }
            }

            return(null);
        }