public override MapObjectHoverData GetHoverDataOrthographicView(bool isForObjectDrag, bool forceCursorPosition) { Point?relPosMaybe = MapObjectHoverData.GetPositionMaybe(isForObjectDrag, forceCursorPosition); if (!relPosMaybe.HasValue) { return(null); } Point relPos = relPosMaybe.Value; var quadList = GetQuadList(null); for (int i = quadList.Count - 1; i >= 0; i--) { var quad = quadList[i]; var quadForControl = quad.ConvertAll(p => MapUtilities.ConvertCoordsForControlOrthographicView(p.x, p.y, p.z, UseRelativeCoordinates)); if (MapUtilities.IsWithinShapeForControl(quadForControl, relPos.X, relPos.Y) || 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 GetHoverDataOrthographicView(bool isForObjectDrag, bool forceCursorPosition) { Point?relPosMaybe = MapObjectHoverData.GetPositionMaybe(isForObjectDrag, forceCursorPosition); if (!relPosMaybe.HasValue) { return(null); } Point relPos = relPosMaybe.Value; List <List <(float x, float z, Color color)> > dimensionList = GetOrthographicDimensionsForControl(); for (int i = dimensionList.Count - 1; i >= 0; i--) { List <(float x, float z, Color color)> dimensionWithColor = dimensionList[i]; List <(float x, float z)> dimension = dimensionWithColor.ConvertAll(d => (d.x, d.z)); if (MapUtilities.IsWithinShapeForControl(dimension, relPos.X, relPos.Y) || forceCursorPosition) { var inGameDimensionList = GetPoints(); var inGameDimension = inGameDimensionList[i]; return(new MapObjectHoverData(this, inGameDimension.x, inGameDimension.y, inGameDimension.z, index: i)); } } return(null); }
public override MapObjectHoverData GetHoverDataOrthographicView(bool isForObjectDrag, bool forceCursorPosition) { Point?relPosMaybe = MapObjectHoverData.GetPositionMaybe(isForObjectDrag, forceCursorPosition); if (!relPosMaybe.HasValue) { return(null); } Point relPos = relPosMaybe.Value; var quadList = GetQuadList(null); for (int i = quadList.Count - 1; i >= 0; i--) { var quad = quadList[i]; var quadForControl = quad.ConvertAll(p => MapUtilities.ConvertCoordsForControlOrthographicView(p.x, p.y, p.z, UseRelativeCoordinates)); if (MapUtilities.IsWithinShapeForControl(quadForControl, relPos.X, relPos.Y) || forceCursorPosition) { return(new MapObjectHoverData(this, 0, 0, 0, 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 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); }