bool HandleDrag(Vector3 from, Vector3 to, Vector3 mouseOffset, int btn)
        {
            if (dragging && btn == EditWindowClickDetection.BTN_PRIMARY)
            {
                //TODO: project the dragged object arrow to viewport and then figure out movement from offset
                mouseOffset /= 100;
                Vector3 worldOffset = new Vector3();

                SnapAxis snapAxis = SnapAxis.None;

                if (dragObject == moveX)
                {
                    worldOffset.x += mouseOffset.x;
                    snapAxis       = SnapAxis.X;
                }
                else if (dragObject == moveY)
                {
                    worldOffset.y += mouseOffset.y;
                    snapAxis       = SnapAxis.Y;
                }
                else if (dragObject == moveZ)
                {
                    worldOffset.z += mouseOffset.x;
                    snapAxis       = SnapAxis.Z;
                }

                virtualPosition += worldOffset;
                Vector3 pos = LevelEditor.SnapManager.Snap(virtualPosition, snapAxis);

                target.position = pos;
                return(true);
            }
            return(false);
        }
Esempio n. 2
0
        public Vector3 Snap(Vector3 worldPos, SnapAxis snapAxis = SnapAxis.All)
        {
            Vector3 snapped = worldPos;

            switch (SnapMode)
            {
            case SnapMode.Grid:
                snapped = snapGrid.Snap(worldPos);
                break;

            case SnapMode.Vertex:
                snapped  = SnapVertex(worldPos);
                snapAxis = SnapAxis.All;     //vertices are 3d positions so it doesnt make sense to snap to only one axis
                break;
            }


            if (snapAxis.HasFlag(SnapAxis.X))
            {
                worldPos.x = snapped.x;
            }
            if (snapAxis.HasFlag(SnapAxis.Y))
            {
                worldPos.y = snapped.y;
            }
            if (snapAxis.HasFlag(SnapAxis.Z))
            {
                worldPos.z = snapped.z;
            }

            return(worldPos);
        }
Esempio n. 3
0
 void SetFocusedActorPositionWithChecks(Vector3 vec, SnapAxis axis)
 {
     GetFocusActor().SetEnablePhysics(false);
     GetFocusActor().SweepTo(
         CheckDistanceAndLimits(moveToolSettings.ShouldSnap() ? SnapOnAxis(axis, vec) : vec)
         );
 }
Esempio n. 4
0
 public static Vector3 Snap(Vector3 val, Vector3 snap, SnapAxis axis = SnapAxis.All)
 {
     return(new Vector3(
                (axis & SnapAxis.X) == SnapAxis.X ? Snap(val.x, snap.x) : val.x,
                (axis & SnapAxis.Y) == SnapAxis.Y ? Snap(val.y, snap.y) : val.y,
                (axis & SnapAxis.Z) == SnapAxis.Z ? Snap(val.z, snap.z) : val.z
                ));
 }
        internal static void SnapSelectionToGrid(SnapAxis axis = SnapAxis.All)
        {
            var selections = Selection.transforms;

            if (selections != null && selections.Length > 0)
            {
                Undo.RecordObjects(selections, L10n.Tr("Snap to Grid"));
                Handles.SnapToGrid(selections, axis);
            }
        }
Esempio n. 6
0
 Vector3 SnapOnAxis(SnapAxis axis, Vector3 vec)
 {
     if (axis == SnapAxis.Horizontal)
     {
         return(TerrainManager.SnapHorizontalPosition(vec));
     }
     else if (axis == SnapAxis.Vertical)
     {
         return(TerrainManager.SnapVerticalPosition(vec));
     }
     else
     {
         return(TerrainManager.SnapPosition(vec));
     }
 }
Esempio n. 7
0
        public SnapAxisFilter(SnapAxis axis)
        {
            m_Mask = 0x0;

            if ((axis & SnapAxis.X) == SnapAxis.X)
            {
                m_Mask |= X;
            }
            if ((axis & SnapAxis.Y) == SnapAxis.Y)
            {
                m_Mask |= Y;
            }
            if ((axis & SnapAxis.Z) == SnapAxis.Z)
            {
                m_Mask |= Z;
            }
        }
Esempio n. 8
0
        public SnapAxisFilter(Vector3 v)
        {
            m_Mask = 0x0;
            var epsilon = 0.000001f;

            if (Mathf.Abs(v.x) > epsilon)
            {
                m_Mask |= X;
            }
            if (Mathf.Abs(v.y) > epsilon)
            {
                m_Mask |= Y;
            }
            if (Mathf.Abs(v.z) > epsilon)
            {
                m_Mask |= Z;
            }
        }
        public void AutoCalculateValues()
        {
            if (RenderSet.MeshFilters.Length > 0)
            {
                Bounds Bound = RenderSet.CombinedMeshFilterBounds;
                BoundSize    = Bound.size;
                BoundsOffset = Bound.center;

                // max scale
                Vector3 MaxAxis = BoundSize.SingleAxis(true, false);
                if (MaxAxis.x != 0)
                {
                    GridMaxSize = SnapAxis.X;
                }
                else if (MaxAxis.y != 0)
                {
                    GridMaxSize = SnapAxis.Y;
                }
                else
                {
                    GridMaxSize = SnapAxis.Z;
                }

                // real max
                RealMaxSize = GridMaxSize;                 // set same as max

                // min
                Vector3 MinAxis = BoundSize.SingleAxis(false);
                if (MinAxis.x != 0)
                {
                    GridMinSize = SnapAxis.X;
                }
                else if (MinAxis.y != 0)
                {
                    GridMinSize = SnapAxis.Y;
                }
                else
                {
                    GridMinSize = SnapAxis.Z;
                }
            }
        }
Esempio n. 10
0
        protected void Snap(SnapAxis axis)
        {
            Vector2 cellPos = grid.GetCellPosAt(transform.position);
            Vector2 newPos  = transform.position;

            switch (axis)
            {
            case SnapAxis.X:
                newPos = new Vector2(cellPos.x, transform.position.y);
                break;

            case SnapAxis.Y:
                newPos = new Vector2(transform.position.x, cellPos.y);
                break;

            case SnapAxis.Both:
                newPos = cellPos;
                break;
            }
            transform.position = newPos;
        }
Esempio n. 11
0
        public SnapAxisFilter(SnapAxis axis)
        {
            this.m_Mask = SnapAxis.None;
            bool flag = (axis & SnapAxis.X) == SnapAxis.X;

            if (flag)
            {
                this.m_Mask |= SnapAxis.X;
            }
            bool flag2 = (axis & SnapAxis.Y) == SnapAxis.Y;

            if (flag2)
            {
                this.m_Mask |= SnapAxis.Y;
            }
            bool flag3 = (axis & SnapAxis.Z) == SnapAxis.Z;

            if (flag3)
            {
                this.m_Mask |= SnapAxis.Z;
            }
        }
Esempio n. 12
0
 public float this[int i]
 {
     get
     {
         bool flag = i < 0 || i > 2;
         if (flag)
         {
             throw new IndexOutOfRangeException();
         }
         return((float)(SnapAxis.X & this.m_Mask >> (i & 31)) * 1f);
     }
     set
     {
         bool flag = i < 0 || i > 2;
         if (flag)
         {
             throw new IndexOutOfRangeException();
         }
         this.m_Mask &= (SnapAxis)(~(SnapAxis)(1 << i));
         this.m_Mask |= (SnapAxis)(((value > 0f) ? 1 : 0) << (i & 31));
     }
 }
Esempio n. 13
0
        public SnapAxisFilter(Vector3 v)
        {
            this.m_Mask = SnapAxis.None;
            float num  = 1E-06f;
            bool  flag = Mathf.Abs(v.x) > num;

            if (flag)
            {
                this.m_Mask |= SnapAxis.X;
            }
            bool flag2 = Mathf.Abs(v.y) > num;

            if (flag2)
            {
                this.m_Mask |= SnapAxis.Y;
            }
            bool flag3 = Mathf.Abs(v.z) > num;

            if (flag3)
            {
                this.m_Mask |= SnapAxis.Z;
            }
        }
Esempio n. 14
0
        public float this[int i]
        {
            get
            {
                if (i < 0 || i > 2)
                {
                    throw new IndexOutOfRangeException();
                }

                return((1 & ((int)m_Mask >> i)) * 1f);
            }

            set
            {
                if (i < 0 || i > 2)
                {
                    throw new IndexOutOfRangeException();
                }

                m_Mask &= (SnapAxis) ~(1 << i);
                m_Mask |= (SnapAxis)((value > 0f ? 1 : 0) << i);
            }
        }
Esempio n. 15
0
    void MoveFocusedActorOnAxis(GizmoAxis axis)
    {
        Ray     ray     = editMain.GetCursorRay();
        Ray     axisRay = zAxisRay;
        Vector3 offset  = zAxisRayOffset;

        SnapAxis snapAxis = SnapAxis.Horizontal;

        if (axis == GizmoAxis.Y)
        {
            snapAxis = SnapAxis.Vertical;
            axisRay  = yAxisRay;
            offset   = yAxisRayOffset;
        }
        else if (axis == GizmoAxis.X)
        {
            axisRay = xAxisRay;
            offset  = xAxisRayOffset;
        }

        Vector3 point = Util.GetClosestPointOnRayFromRay(axisRay, ray) - offset;

        SetFocusedActorPositionWithChecks(point, snapAxis);
    }
 public void SetCustomGridScale(float GridScale)
 {
     GridMaxSize   = SnapAxis.Custom;
     CustomMaxSize = GridScale;
 }
Esempio n. 17
0
 public OscillatorPattern(SnapAxis axisOfMovement, float period, float magnitude)
 {
     this.axisOfMovement = axisOfMovement;
     this.period         = period;
     this.magnitude      = magnitude;
 }