public static float GetHeightOnTriangle(float x, float z) { float normX = -0.0339056774973869f; float normY = 0.919187009334564f; float normZ = 0.392358928918839f; float normOffset = 969.59228515625f; x = (int)x; z = (int)z; return((float)TriangleDataModel.GetHeightOnTriangle( x, z, normX, normY, normZ, normOffset)); }
public static TriangleDataModel FindCeiling(float floatX, float floatY, float floatZ) { int LEVEL_BOUNDARY_MAX = 0x2000; int CELL_SIZE = 0x400; short shortX = (short)floatX; short shortY = (short)floatY; short shortZ = (short)floatZ; if (shortX <= -LEVEL_BOUNDARY_MAX || shortX >= LEVEL_BOUNDARY_MAX) { return(null); } if (shortZ <= -LEVEL_BOUNDARY_MAX || shortZ >= LEVEL_BOUNDARY_MAX) { return(null); } int cellX = ((shortX + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & 0xF; int cellZ = ((shortZ + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & 0xF; TriangleDataModel staticTri = FindCeilingFromList(shortX, shortY, shortZ, cellX, cellZ, true); TriangleDataModel dynamicTri = FindCeilingFromList(shortX, shortY, shortZ, cellX, cellZ, false); if (staticTri == null && dynamicTri == null) { return(null); } if (staticTri == null) { return(dynamicTri); } if (dynamicTri == null) { return(staticTri); } double yOnStaticTri = staticTri.GetHeightOnTriangle(shortX, shortZ); double yOnDynamicTri = dynamicTri.GetHeightOnTriangle(shortX, shortZ); return(yOnDynamicTri < yOnStaticTri ? dynamicTri : staticTri); }
public void AddContextMenuItems(MapTab tab, ContextMenuStrip menu) { var myItem = new ToolStripMenuItem($"{triangle.Classification} Triangle 0x{triangle.Address.ToString("x8")}"); var itemCopyTriangleAddress = new ToolStripMenuItem("Copy Triangle Address"); itemCopyTriangleAddress.Click += (_, __) => { if (triangle != null) { Clipboard.SetText($"0x{triangle.Address.ToString("x8")}"); } }; myItem.DropDownItems.Add(itemCopyTriangleAddress); var itemCopyPosition = new ToolStripMenuItem("Copy Position"); itemCopyPosition.Click += (_, __) => { if (triangle != null) { if (tab.graphics.view.mode == MapView.ViewMode.TopDown) { float y = triangle.IsWall() ? mapCursorOnRightClick.Y : (float)triangle.GetHeightOnTriangle(mapCursorOnRightClick.X, mapCursorOnRightClick.Z); CopyUtilities.CopyPosition(new Vector3(mapCursorOnRightClick.X, y, mapCursorOnRightClick.Z)); } } }; myItem.DropDownItems.Add(itemCopyPosition); menu.Items.Add(myItem); }