diff --git a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs index 076b94b0a..cb4e7b9c1 100644 --- a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs +++ b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs @@ -97,6 +97,7 @@ namespace FlaxEditor.CustomEditors.Editors AnchorPreset = AnchorPresets.TopLeft, }; _linkButton.Clicked += ToggleLink; + ToggleEnabled(); SetLinkStyle(); var x = LinkedLabel.Text.Value.Length * 7 + 5; _linkButton.LocalX += x; @@ -128,9 +129,38 @@ namespace FlaxEditor.CustomEditors.Editors { LinkValues = !LinkValues; Editor.Instance.Windows.PropertiesWin.ScaleLinked = LinkValues; + ToggleEnabled(); SetLinkStyle(); } + /// + /// Toggles enables on value boxes. + /// + public void ToggleEnabled() + { + if (LinkValues) + { + if (Mathf.NearEqual(((Float3)Values[0]).X, 0)) + { + XElement.ValueBox.Enabled = false; + } + if (Mathf.NearEqual(((Float3)Values[0]).Y, 0)) + { + YElement.ValueBox.Enabled = false; + } + if (Mathf.NearEqual(((Float3)Values[0]).Z, 0)) + { + ZElement.ValueBox.Enabled = false; + } + } + else + { + XElement.ValueBox.Enabled = true; + YElement.ValueBox.Enabled = true; + ZElement.ValueBox.Enabled = true; + } + } + private void SetLinkStyle() { var style = FlaxEngine.GUI.Style.Current; diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs index bd154056f..496884bc3 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -122,30 +122,45 @@ namespace FlaxEditor.CustomEditors.Editors { if (IsSetBlocked) return; - + var xValue = XElement.ValueBox.Value; var yValue = YElement.ValueBox.Value; var zValue = ZElement.ValueBox.Value; if (LinkValues) { - var valueChange = 0.0f; + var valueRatio = 0.0f; switch (_valueChanged) { case ValueChanged.X: - valueChange = xValue - ((Float3)Values[0]).X; - yValue += valueChange; - zValue += valueChange; + valueRatio = GetRatio(xValue, ((Float3)Values[0]).X); + if (Mathf.NearEqual(valueRatio, 0)) + { + XElement.ValueBox.Enabled = false; + valueRatio = 1; + } + yValue = NewLinkedValue(yValue, valueRatio); + zValue = NewLinkedValue(zValue, valueRatio); break; case ValueChanged.Y: - valueChange = yValue - ((Float3)Values[0]).Y; - xValue += valueChange; - zValue += valueChange; + valueRatio = GetRatio(yValue, ((Float3)Values[0]).Y); + if (Mathf.NearEqual(valueRatio, 0)) + { + YElement.ValueBox.Enabled = false; + valueRatio = 1; + } + xValue = NewLinkedValue(xValue, valueRatio); + zValue = NewLinkedValue(zValue, valueRatio); break; case ValueChanged.Z: - valueChange = zValue - ((Float3)Values[0]).Z; - xValue += valueChange; - yValue += valueChange; + valueRatio = GetRatio(zValue, ((Float3)Values[0]).Z); + if (Mathf.NearEqual(valueRatio, 0)) + { + ZElement.ValueBox.Enabled = false; + valueRatio = 1; + } + xValue = NewLinkedValue(xValue, valueRatio); + yValue = NewLinkedValue(yValue, valueRatio); break; default: break; } @@ -164,6 +179,16 @@ namespace FlaxEditor.CustomEditors.Editors SetValue(v, token); } + private float GetRatio(float value, float initialValue) + { + return Mathf.NearEqual(initialValue, 0) ? 0 : value / initialValue; + } + + private float NewLinkedValue(float value, float valueRatio) + { + return Mathf.NearEqual(value, 0) ? value : value * valueRatio; + } + /// public override void Refresh() {