コード例 #1
0
ファイル: ObjectSnapping.cs プロジェクト: Guendeli/Farm-MVP
        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);
                }
            }
        }
コード例 #2
0
ファイル: ObjectSnapping.cs プロジェクト: Guendeli/Farm-MVP
 public void RenderGizmos()
 {
     XZSnapGrid.RenderGizmos();
     if (!Settings.SnapToCursorHitPoint)
     {
         _objectSnapSurface.RenderGizmos();
     }
 }