public void SnapXZGridToCursorPickPoint(bool snapToClosestTopOrBottom) { MouseCursor.Instance.PushObjectMask(null); MouseCursor.Instance.PushObjectPickMaskFlags(MouseCursorObjectPickFlags.ObjectBox | MouseCursorObjectPickFlags.ObjectTerrain); MouseCursorRayHit cursorRayHit = MouseCursor.Instance.GetRayHit(); MouseCursor.Instance.PopObjectPickMaskFlags(); MouseCursor.Instance.PopObjectMask(); if (cursorRayHit.WasAnythingHit) { Vector3 snapDestPoint; if (cursorRayHit.WasAnObjectHit) { snapDestPoint = cursorRayHit.ClosestObjectRayHit.HitPoint; UndoEx.RecordForToolAction(XZSnapGrid); if (snapToClosestTopOrBottom) { Box objectWorldBox = cursorRayHit.ClosestObjectRayHit.HitObject.GetWorldBox(); Vector3 fromCenterToHitPoint = snapDestPoint - objectWorldBox.Center; if (Vector3.Dot(fromCenterToHitPoint, Vector3.up) > 0.0f) { snapDestPoint = objectWorldBox.Center + Vector3.up * objectWorldBox.Extents.y; } else { snapDestPoint = objectWorldBox.Center - Vector3.up * objectWorldBox.Extents.y; } } XZSnapGrid.SnapToPoint(snapDestPoint); } } }
public void RenderGizmos() { XZSnapGrid.RenderGizmos(); if (!Settings.SnapToCursorHitPoint) { _objectSnapSurface.RenderGizmos(); } }