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)); }
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); } } }
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); } }
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); } } }