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