From 1c559400fb9cb53c0e3177838a18b777cd81b09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vr=C3=B4=C3=95nsh?= Date: Mon, 16 Nov 2020 14:52:51 +0100 Subject: [PATCH 1/3] drag points : fixed blocked editor tool when right clicking on curve traveller --- .../DragPoint/DragPointsItemInspector.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsItemInspector.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsItemInspector.cs index ce71c8a9d..e2ec13ab2 100644 --- a/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsItemInspector.cs +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsItemInspector.cs @@ -287,6 +287,7 @@ protected virtual void OnSceneGUI() } else if (DragPointsHandler.CurveTravellerVisible && HandleUtility.nearestControl == DragPointsHandler.CurveTravellerControlId) { var command = new MenuCommand(this, 0); EditorUtility.DisplayPopupMenu(new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, 0, 0), DragPointMenuItems.CurveTravellerMenuPath, command); + Event.current.Use(); } } } From 467a69919ccdf96289cd63223a560e4c1bea5b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vr=C3=B4=C3=95nsh?= Date: Tue, 17 Nov 2020 12:09:34 +0100 Subject: [PATCH 2/3] drag-points : fixed wrong curve traveller control point index --- .../DragPoint/DragPointsSceneViewHandler.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsSceneViewHandler.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsSceneViewHandler.cs index b68f85e85..a0b0b970c 100644 --- a/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsSceneViewHandler.cs +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/DragPoint/DragPointsSceneViewHandler.cs @@ -145,13 +145,16 @@ private void DisplayCurve() // Render Curve with correct color regarding drag point properties & find curve section where the curve traveller is _handler.CurveTravellerControlPointIdx = -1; + var minDist = float.MaxValue; foreach (var controlPoint in _handler.ControlPoints) { var segments = controlPointsSegments[controlPoint.Index].ToArray(); if (segments.Length > 1) { Handles.color = _handler.DragPointEditable.GetDragPointExposition().Contains(DragPointExposure.SlingShot) && controlPoint.DragPoint.IsSlingshot ? CurveSlingShotColor : CurveColor; Handles.DrawAAPolyLine(CurveWidth, segments); var closestToPath = HandleUtility.ClosestPointToPolyLine(segments); - if (_handler.CurveTravellerControlPointIdx == -1 && closestToPath == _handler.CurveTravellerPosition) { + var dist = (closestToPath - _handler.CurveTravellerPosition).magnitude; + if (dist < minDist) { + minDist = dist; _handler.CurveTravellerControlPointIdx = controlPoint.Index; } } From e6cd9f2186f5c8aedae8b3db79781da204b412a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vr=C3=B4=C3=95nsh?= Date: Tue, 17 Nov 2020 16:53:38 +0100 Subject: [PATCH 3/3] drag-points : fixed crashes in surface mesh generator when crossing control points - fixed div by 0 normal calculation for overlapping control points - fixed crash when updating UnityMesh with null generated mesh. --- .../VPT/Surface/SurfaceMeshGenerator.cs | 18 ++++++++++++------ .../VPT/ItemMeshAuthoring.cs | 4 +++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/VisualPinball.Engine/VPT/Surface/SurfaceMeshGenerator.cs b/VisualPinball.Engine/VPT/Surface/SurfaceMeshGenerator.cs index 5fcac7b2a..409dd8fe9 100644 --- a/VisualPinball.Engine/VPT/Surface/SurfaceMeshGenerator.cs +++ b/VisualPinball.Engine/VPT/Surface/SurfaceMeshGenerator.cs @@ -96,9 +96,12 @@ private Mesh GenerateTopMesh(Table.Table table) { var dx = pv1.X - pv2.X; var dy = pv1.Y - pv2.Y; - var invLen = 1.0f / MathF.Sqrt(dx * dx + dy * dy); - - rgNormal[i] = new Vertex2D {X = dy * invLen, Y = dx * invLen}; + if (dx != 0.0f || dy != 0.0f) { + var invLen = 1.0f / MathF.Sqrt(dx * dx + dy * dy); + rgNormal[i] = new Vertex2D { X = dy * invLen, Y = dx * invLen }; + } else { + rgNormal[i] = new Vertex2D { X = 0.0f, Y = 0.0f }; + } } // draw top @@ -180,9 +183,12 @@ private Mesh GenerateSideMesh(Table.Table table) { var dx = pv1.X - pv2.X; var dy = pv1.Y - pv2.Y; - var invLen = 1.0f / MathF.Sqrt(dx * dx + dy * dy); - - rgNormal[i] = new Vertex2D {X = dy * invLen, Y = dx * invLen}; + if (dx != 0.0f || dy != 0.0f) { + var invLen = 1.0f / MathF.Sqrt(dx * dx + dy * dy); + rgNormal[i] = new Vertex2D { X = dy * invLen, Y = dx * invLen }; + } else { + rgNormal[i] = new Vertex2D { X = 0.0f, Y = 0.0f }; + } } var bottom = _data.HeightBottom * table.GetScaleZ() + table.TableHeight; diff --git a/VisualPinball.Unity/VisualPinball.Unity/VPT/ItemMeshAuthoring.cs b/VisualPinball.Unity/VisualPinball.Unity/VPT/ItemMeshAuthoring.cs index bf1d33c20..f8d1d9797 100644 --- a/VisualPinball.Unity/VisualPinball.Unity/VPT/ItemMeshAuthoring.cs +++ b/VisualPinball.Unity/VisualPinball.Unity/VPT/ItemMeshAuthoring.cs @@ -135,7 +135,9 @@ private void UpdateMesh() if (mf != null) { var unityMesh = mf.sharedMesh; - ro.Mesh.ApplyToUnityMesh(unityMesh); + if (ro.Mesh != null) { + ro.Mesh.ApplyToUnityMesh(unityMesh); + } } if (mr != null) {