RoundBasedOnMinimumDifference() static private method

static private RoundBasedOnMinimumDifference ( double valueToRound, double minDifference ) : double
valueToRound double
minDifference double
return double
            public void SetScaleDelta(Vector3 scaleDelta, Vector3 scalePivot, Quaternion scaleRotation, bool preferRectResize)
            {
                this.SetPosition(scaleRotation * Vector3.Scale(Quaternion.Inverse(scaleRotation) * (this.position - scalePivot), scaleDelta) + scalePivot);
                Vector3 minDragDifference = ManipulationToolUtility.minDragDifference;

                if (this.transform.parent != null)
                {
                    minDragDifference.x /= this.transform.parent.lossyScale.x;
                    minDragDifference.y /= this.transform.parent.lossyScale.y;
                    minDragDifference.z /= this.transform.parent.lossyScale.z;
                }
                Quaternion ownRotation  = (!Tools.rectBlueprintMode || !InternalEditorUtility.SupportsRectLayout(this.transform)) ? this.rotation : this.transform.parent.rotation;
                Quaternion refAlignment = this.GetRefAlignment(scaleRotation, ownRotation);

                scaleDelta = refAlignment * scaleDelta;
                scaleDelta = Vector3.Scale(scaleDelta, refAlignment * Vector3.one);
                if (preferRectResize && this.rectTransform != null)
                {
                    Vector2 vector = this.sizeDelta + Vector2.Scale(this.rect.size, scaleDelta) - this.rect.size;
                    vector.x = MathUtils.RoundBasedOnMinimumDifference(vector.x, minDragDifference.x);
                    vector.y = MathUtils.RoundBasedOnMinimumDifference(vector.y, minDragDifference.y);
                    this.rectTransform.sizeDelta = vector;
                    if (this.rectTransform.drivenByObject != null)
                    {
                        RectTransform.SendReapplyDrivenProperties(this.rectTransform);
                    }
                }
                else
                {
                    this.transform.localScale = Vector3.Scale(this.scale, scaleDelta);
                }
            }
            public void SetPositionDelta(Vector3 positionDelta, bool applySmartRounding)
            {
                Vector3 localPositionDelta = positionDelta;
                Vector3 minDifference      = ManipulationToolUtility.minDragDifference;

                if (transform.parent != null)
                {
                    localPositionDelta = transform.parent.InverseTransformVector(localPositionDelta);
                    minDifference.x   /= transform.parent.lossyScale.x;
                    minDifference.y   /= transform.parent.lossyScale.y;
                    minDifference.z   /= transform.parent.lossyScale.z;
                }

                // For zero delta, we don't want to change the value so we ignore rounding
                bool zeroXDelta = Mathf.Approximately(localPositionDelta.x, 0f);
                bool zeroYDelta = Mathf.Approximately(localPositionDelta.y, 0f);
                bool zeroZDelta = Mathf.Approximately(localPositionDelta.z, 0f);

                if (rectTransform == null)
                {
                    Vector3 newLocalPosition = localPosition + localPositionDelta;

                    if (applySmartRounding)
                    {
                        newLocalPosition.x = zeroXDelta ? localPosition.x : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.x, minDifference.x);
                        newLocalPosition.y = zeroYDelta ? localPosition.y : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.y, minDifference.y);
                        newLocalPosition.z = zeroZDelta ? localPosition.z : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.z, minDifference.z);
                    }

                    transform.localPosition = newLocalPosition;
                }
                else
                {
                    // Set position.z
                    Vector3 newLocalPosition = localPosition + localPositionDelta;

                    if (applySmartRounding)
                    {
                        newLocalPosition.z = zeroZDelta ? localPosition.z : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.z, minDifference.z);
                    }

                    transform.localPosition = newLocalPosition;

                    // Set anchoredPosition
                    Vector2 newAnchoredPosition = anchoredPosition + (Vector2)localPositionDelta;

                    if (applySmartRounding)
                    {
                        newAnchoredPosition.x = zeroXDelta ? anchoredPosition.x : MathUtils.RoundBasedOnMinimumDifference(newAnchoredPosition.x, minDifference.x);
                        newAnchoredPosition.y = zeroYDelta ? anchoredPosition.y : MathUtils.RoundBasedOnMinimumDifference(newAnchoredPosition.y, minDifference.y);
                    }

                    rectTransform.anchoredPosition = newAnchoredPosition;

                    if (rectTransform.drivenByObject != null)
                    {
                        RectTransform.SendReapplyDrivenProperties(rectTransform);
                    }
                }
            }
            public void SetPositionDelta(Vector3 positionDelta)
            {
                Vector3 vector            = positionDelta;
                Vector3 minDragDifference = ManipulationToolUtility.minDragDifference;

                if (this.transform.parent != null)
                {
                    vector = this.transform.parent.InverseTransformVector(vector);
                    minDragDifference.x /= this.transform.parent.lossyScale.x;
                    minDragDifference.y /= this.transform.parent.lossyScale.y;
                    minDragDifference.z /= this.transform.parent.lossyScale.z;
                }
                if (this.rectTransform == null)
                {
                    Vector3 vector2 = this.localPosition + vector;
                    vector2.x = MathUtils.RoundBasedOnMinimumDifference(vector2.x, minDragDifference.x);
                    vector2.y = MathUtils.RoundBasedOnMinimumDifference(vector2.y, minDragDifference.y);
                    vector2.z = MathUtils.RoundBasedOnMinimumDifference(vector2.z, minDragDifference.z);
                    this.transform.localPosition = vector2;
                }
                else
                {
                    Vector3 vector3 = this.localPosition + vector;
                    vector3.z = MathUtils.RoundBasedOnMinimumDifference(vector3.z, minDragDifference.z);
                    this.transform.localPosition = vector3;
                    Vector2 vector4 = this.anchoredPosition + vector;
                    vector4.x = MathUtils.RoundBasedOnMinimumDifference(vector4.x, minDragDifference.x);
                    vector4.y = MathUtils.RoundBasedOnMinimumDifference(vector4.y, minDragDifference.y);
                    this.rectTransform.anchoredPosition = vector4;
                    if (this.rectTransform.drivenByObject != null)
                    {
                        RectTransform.SendReapplyDrivenProperties(this.rectTransform);
                    }
                }
            }
            public void SetScaleDelta(Vector3 scaleDelta, Vector3 scalePivot, Quaternion scaleRotation, bool preferRectResize)
            {
                SetPosition(scaleRotation * Vector3.Scale(Quaternion.Inverse(scaleRotation) * (position - scalePivot), scaleDelta) + scalePivot);

                Vector3 minDifference = ManipulationToolUtility.minDragDifference;

                if (transform.parent != null)
                {
                    minDifference.x /= transform.parent.lossyScale.x;
                    minDifference.y /= transform.parent.lossyScale.y;
                    minDifference.z /= transform.parent.lossyScale.z;
                }

                Quaternion ownRotation  = (Tools.rectBlueprintMode && UnityEditorInternal.InternalEditorUtility.SupportsRectLayout(transform) ? transform.parent.rotation : rotation);
                Quaternion refAlignment = GetRefAlignment(scaleRotation, ownRotation);

                scaleDelta = refAlignment * scaleDelta;
                scaleDelta = Vector3.Scale(scaleDelta, refAlignment * Vector3.one);

                var applySmartRounding = Tools.current != Tool.Rect;

                if (preferRectResize)
                {
                    if (rectTransform != null)
                    {
                        Vector2 newSizeDelta = sizeDelta + Vector2.Scale(rect.size, scaleDelta) - rect.size;
                        if (applySmartRounding)
                        {
                            newSizeDelta.x = MathUtils.RoundBasedOnMinimumDifference(newSizeDelta.x, minDifference.x);
                            newSizeDelta.y = MathUtils.RoundBasedOnMinimumDifference(newSizeDelta.y, minDifference.y);
                        }
                        rectTransform.sizeDelta = newSizeDelta;
                        if (rectTransform.drivenByObject != null)
                        {
                            RectTransform.SendReapplyDrivenProperties(rectTransform);
                        }
                        return;
                    }
                    else
                    {
                        SpriteRenderer sr = transform.GetComponent <SpriteRenderer>();
                        if (sr != null && sr.drawMode != SpriteDrawMode.Simple)
                        {
                            sr.size = Vector2.Scale(sizeDelta, scaleDelta);
                            return;
                        }
                    }
                }

                if (applySmartRounding)
                {
                    scaleDelta.x = MathUtils.RoundBasedOnMinimumDifference(scaleDelta.x, minDifference.x);
                    scaleDelta.y = MathUtils.RoundBasedOnMinimumDifference(scaleDelta.y, minDifference.y);
                    scaleDelta.z = MathUtils.RoundBasedOnMinimumDifference(scaleDelta.z, minDifference.z);
                }
                SetScaleValue(Vector3.Scale(scale, scaleDelta));
            }
示例#5
0
            public void SetPositionDelta(Vector3 positionDelta, bool applySmartRounding)
            {
                Vector3 vector            = positionDelta;
                Vector3 minDragDifference = ManipulationToolUtility.minDragDifference;

                if (this.transform.parent != null)
                {
                    vector = this.transform.parent.InverseTransformVector(vector);
                    minDragDifference.x /= this.transform.parent.lossyScale.x;
                    minDragDifference.y /= this.transform.parent.lossyScale.y;
                    minDragDifference.z /= this.transform.parent.lossyScale.z;
                }
                bool flag  = Mathf.Approximately(vector.x, 0f);
                bool flag2 = Mathf.Approximately(vector.y, 0f);
                bool flag3 = Mathf.Approximately(vector.z, 0f);

                if (this.rectTransform == null)
                {
                    Vector3 vector2 = this.localPosition + vector;
                    if (applySmartRounding)
                    {
                        vector2.x = ((!flag) ? MathUtils.RoundBasedOnMinimumDifference(vector2.x, minDragDifference.x) : this.localPosition.x);
                        vector2.y = ((!flag2) ? MathUtils.RoundBasedOnMinimumDifference(vector2.y, minDragDifference.y) : this.localPosition.y);
                        vector2.z = ((!flag3) ? MathUtils.RoundBasedOnMinimumDifference(vector2.z, minDragDifference.z) : this.localPosition.z);
                    }
                    this.transform.localPosition = vector2;
                }
                else
                {
                    Vector3 vector3 = this.localPosition + vector;
                    if (applySmartRounding)
                    {
                        vector3.z = ((!flag3) ? MathUtils.RoundBasedOnMinimumDifference(vector3.z, minDragDifference.z) : this.localPosition.z);
                    }
                    this.transform.localPosition = vector3;
                    Vector2 vector4 = this.anchoredPosition + vector;
                    if (applySmartRounding)
                    {
                        vector4.x = ((!flag) ? MathUtils.RoundBasedOnMinimumDifference(vector4.x, minDragDifference.x) : this.anchoredPosition.x);
                        vector4.y = ((!flag2) ? MathUtils.RoundBasedOnMinimumDifference(vector4.y, minDragDifference.y) : this.anchoredPosition.y);
                    }
                    this.rectTransform.anchoredPosition = vector4;
                    if (this.rectTransform.drivenByObject != null)
                    {
                        RectTransform.SendReapplyDrivenProperties(this.rectTransform);
                    }
                }
            }
示例#6
0
            public void SetPositionDelta(Vector3 positionDelta)
            {
                Vector3 vector            = positionDelta;
                Vector3 minDragDifference = ManipulationToolUtility.minDragDifference;

                if ((Object)this.transform.parent != (Object)null)
                {
                    vector = this.transform.parent.InverseTransformVector(vector);
                    minDragDifference.x /= this.transform.parent.lossyScale.x;
                    minDragDifference.y /= this.transform.parent.lossyScale.y;
                    minDragDifference.z /= this.transform.parent.lossyScale.z;
                }
                bool flag1 = Mathf.Approximately(vector.x, 0.0f);
                bool flag2 = Mathf.Approximately(vector.y, 0.0f);
                bool flag3 = Mathf.Approximately(vector.z, 0.0f);

                if ((Object)this.rectTransform == (Object)null)
                {
                    Vector3 vector3 = this.localPosition + vector;
                    vector3.x = !flag1?MathUtils.RoundBasedOnMinimumDifference(vector3.x, minDragDifference.x) : this.localPosition.x;

                    vector3.y = !flag2?MathUtils.RoundBasedOnMinimumDifference(vector3.y, minDragDifference.y) : this.localPosition.y;

                    vector3.z = !flag3?MathUtils.RoundBasedOnMinimumDifference(vector3.z, minDragDifference.z) : this.localPosition.z;

                    this.transform.localPosition = vector3;
                }
                else
                {
                    Vector3 vector3 = this.localPosition + vector;
                    vector3.z = !flag3?MathUtils.RoundBasedOnMinimumDifference(vector3.z, minDragDifference.z) : this.localPosition.z;

                    this.transform.localPosition = vector3;
                    Vector2 vector2 = this.anchoredPosition + (Vector2)vector;
                    vector2.x = !flag1?MathUtils.RoundBasedOnMinimumDifference(vector2.x, minDragDifference.x) : this.anchoredPosition.x;

                    vector2.y = !flag2?MathUtils.RoundBasedOnMinimumDifference(vector2.y, minDragDifference.y) : this.anchoredPosition.y;

                    this.rectTransform.anchoredPosition = vector2;
                    if (!(this.rectTransform.drivenByObject != (Object)null))
                    {
                        return;
                    }
                    RectTransform.SendReapplyDrivenProperties(this.rectTransform);
                }
            }
示例#7
0
            public void SetPositionDelta(Vector3 positionDelta, bool applySmartRounding)
            {
                Vector3 localPositionDelta = positionDelta;

                if (transform.parent != null)
                {
                    localPositionDelta = transform.parent.InverseTransformVector(localPositionDelta);

                    if (!applySmartRounding)
                    {
                        applySmartRounding = !transform.parent.localRotation.Equals(Quaternion.identity);
                    }
                }

                //If we are snapping, disable the smart rounding. If not the case, the transform will have the wrong snap value based on distance to screen.
                applySmartRounding &= !(EditorSnapSettings.incrementalSnapActive || EditorSnapSettings.gridSnapActive || EditorSnapSettings.vertexSnapActive);

                bool    zeroXDelta    = false;
                bool    zeroYDelta    = false;
                bool    zeroZDelta    = false;
                Vector3 minDifference = ManipulationToolUtility.minDragDifference;

                if (applySmartRounding)
                {
                    // For zero delta, we don't want to change the value so we ignore rounding
                    zeroXDelta = Mathf.Approximately(localPositionDelta.x, 0f);
                    zeroYDelta = Mathf.Approximately(localPositionDelta.y, 0f);
                    zeroZDelta = Mathf.Approximately(localPositionDelta.z, 0f);

                    if (transform.parent != null)
                    {
                        minDifference.x /= transform.parent.lossyScale.x;
                        minDifference.y /= transform.parent.lossyScale.y;
                        minDifference.z /= transform.parent.lossyScale.z;
                    }
                }

                if (rectTransform == null)
                {
                    Vector3 newLocalPosition = localPosition + localPositionDelta;

                    if (applySmartRounding)
                    {
                        newLocalPosition.x = zeroXDelta ? localPosition.x : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.x, minDifference.x);
                        newLocalPosition.y = zeroYDelta ? localPosition.y : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.y, minDifference.y);
                        newLocalPosition.z = zeroZDelta ? localPosition.z : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.z, minDifference.z);
                    }

                    transform.localPosition = newLocalPosition;
                }
                else
                {
                    // Set position.z
                    Vector3 newLocalPosition = localPosition + localPositionDelta;

                    if (applySmartRounding)
                    {
                        newLocalPosition.z = zeroZDelta ? localPosition.z : MathUtils.RoundBasedOnMinimumDifference(newLocalPosition.z, minDifference.z);
                    }

                    transform.localPosition = newLocalPosition;

                    // Set anchoredPosition
                    Vector2 newAnchoredPosition = anchoredPosition + (Vector2)localPositionDelta;

                    if (applySmartRounding)
                    {
                        newAnchoredPosition.x = zeroXDelta ? anchoredPosition.x : MathUtils.RoundBasedOnMinimumDifference(newAnchoredPosition.x, minDifference.x);
                        newAnchoredPosition.y = zeroYDelta ? anchoredPosition.y : MathUtils.RoundBasedOnMinimumDifference(newAnchoredPosition.y, minDifference.y);
                    }

                    rectTransform.anchoredPosition = newAnchoredPosition;

                    if (rectTransform.drivenByObject != null)
                    {
                        RectTransform.SendReapplyDrivenProperties(rectTransform);
                    }
                }
            }