From a45f06771980ea01352550f2e565ca8cb904f52a Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Thu, 25 May 2023 08:24:49 -0500 Subject: [PATCH 1/6] Fix zero scale value changing when scales are linked. #1117 --- .../CustomEditors/Editors/Vector3Editor.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs index bd154056f..1a85e720f 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -134,18 +134,18 @@ namespace FlaxEditor.CustomEditors.Editors { case ValueChanged.X: valueChange = xValue - ((Float3)Values[0]).X; - yValue += valueChange; - zValue += valueChange; + yValue = NewLinkedValue(yValue, valueChange); + zValue = NewLinkedValue(zValue, valueChange); break; case ValueChanged.Y: valueChange = yValue - ((Float3)Values[0]).Y; - xValue += valueChange; - zValue += valueChange; + xValue = NewLinkedValue(xValue, valueChange); + zValue = NewLinkedValue(zValue, valueChange); break; case ValueChanged.Z: valueChange = zValue - ((Float3)Values[0]).Z; - xValue += valueChange; - yValue += valueChange; + xValue = NewLinkedValue(xValue, valueChange); + yValue = NewLinkedValue(yValue, valueChange); break; default: break; } @@ -164,6 +164,11 @@ namespace FlaxEditor.CustomEditors.Editors SetValue(v, token); } + private float NewLinkedValue(float value, float valueChange) + { + return Mathf.NearEqual(value, 0) ? value : value + valueChange; + } + /// public override void Refresh() { From e9250ab365dff8e7731e65a01567c004ce0e90d2 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Thu, 25 May 2023 08:25:57 -0500 Subject: [PATCH 2/6] Fix spacing --- Source/Editor/CustomEditors/Editors/Vector3Editor.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs index 1a85e720f..8524109b1 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -135,17 +135,17 @@ namespace FlaxEditor.CustomEditors.Editors case ValueChanged.X: valueChange = xValue - ((Float3)Values[0]).X; yValue = NewLinkedValue(yValue, valueChange); - zValue = NewLinkedValue(zValue, valueChange); + zValue = NewLinkedValue(zValue, valueChange); break; case ValueChanged.Y: valueChange = yValue - ((Float3)Values[0]).Y; - xValue = NewLinkedValue(xValue, valueChange); - zValue = NewLinkedValue(zValue, valueChange); + xValue = NewLinkedValue(xValue, valueChange); + zValue = NewLinkedValue(zValue, valueChange); break; case ValueChanged.Z: valueChange = zValue - ((Float3)Values[0]).Z; - xValue = NewLinkedValue(xValue, valueChange); - yValue = NewLinkedValue(yValue, valueChange); + xValue = NewLinkedValue(xValue, valueChange); + yValue = NewLinkedValue(yValue, valueChange); break; default: break; } From 75f1c8baaa242d0adc706b1190663a6412557c61 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Thu, 25 May 2023 10:17:08 -0500 Subject: [PATCH 3/6] Fix scale linking to be a ratio. --- .../CustomEditors/Editors/Vector3Editor.cs | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs index 8524109b1..6287ef979 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -129,23 +129,23 @@ namespace FlaxEditor.CustomEditors.Editors if (LinkValues) { - var valueChange = 0.0f; + var valueRatio = 0.0f; switch (_valueChanged) { case ValueChanged.X: - valueChange = xValue - ((Float3)Values[0]).X; - yValue = NewLinkedValue(yValue, valueChange); - zValue = NewLinkedValue(zValue, valueChange); + valueRatio = GetRatio(xValue, ((Float3)Values[0]).X); + yValue = NewLinkedValue(yValue, valueRatio); + zValue = NewLinkedValue(zValue, valueRatio); break; case ValueChanged.Y: - valueChange = yValue - ((Float3)Values[0]).Y; - xValue = NewLinkedValue(xValue, valueChange); - zValue = NewLinkedValue(zValue, valueChange); + valueRatio = GetRatio(yValue, ((Float3)Values[0]).Y); + xValue = NewLinkedValue(xValue, valueRatio); + zValue = NewLinkedValue(zValue, valueRatio); break; case ValueChanged.Z: - valueChange = zValue - ((Float3)Values[0]).Z; - xValue = NewLinkedValue(xValue, valueChange); - yValue = NewLinkedValue(yValue, valueChange); + valueRatio = GetRatio(zValue, ((Float3)Values[0]).Z); + xValue = NewLinkedValue(xValue, valueRatio); + yValue = NewLinkedValue(yValue, valueRatio); break; default: break; } @@ -164,9 +164,14 @@ namespace FlaxEditor.CustomEditors.Editors SetValue(v, token); } - private float NewLinkedValue(float value, float valueChange) + private float GetRatio(float value, float initialValue) { - return Mathf.NearEqual(value, 0) ? value : value + valueChange; + return Mathf.Abs(value / initialValue); + } + + private float NewLinkedValue(float value, float valueRatio) + { + return Mathf.NearEqual(value, 0) ? value : value * valueRatio; } /// From 70cb4d3cd94c0d3643d49bba587e298ba56967f7 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Wed, 31 May 2023 13:01:41 -0500 Subject: [PATCH 4/6] Fix bug of moving value from zero. --- Source/Editor/CustomEditors/Editors/Vector3Editor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs index 6287ef979..777f8f9fc 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -166,7 +166,7 @@ namespace FlaxEditor.CustomEditors.Editors private float GetRatio(float value, float initialValue) { - return Mathf.Abs(value / initialValue); + return (initialValue == 0) ? Mathf.Abs(value / 0.0001f) : Mathf.Abs(value / initialValue); } private float NewLinkedValue(float value, float valueRatio) From 5c67c4f5d41a9f8b691fb0fec2fb37d40ac078c6 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Wed, 31 May 2023 14:31:01 -0500 Subject: [PATCH 5/6] Handle zero case correctly by disabling value boxes on zero. --- .../Editors/ActorTransformEditor.cs | 29 +++++++++++++++++++ .../CustomEditors/Editors/Vector3Editor.cs | 19 ++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs index 076b94b0a..444af342c 100644 --- a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs +++ b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs @@ -128,9 +128,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 777f8f9fc..496884bc3 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -122,7 +122,7 @@ namespace FlaxEditor.CustomEditors.Editors { if (IsSetBlocked) return; - + var xValue = XElement.ValueBox.Value; var yValue = YElement.ValueBox.Value; var zValue = ZElement.ValueBox.Value; @@ -134,16 +134,31 @@ namespace FlaxEditor.CustomEditors.Editors { case ValueChanged.X: 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: 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: 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; @@ -166,7 +181,7 @@ namespace FlaxEditor.CustomEditors.Editors private float GetRatio(float value, float initialValue) { - return (initialValue == 0) ? Mathf.Abs(value / 0.0001f) : Mathf.Abs(value / initialValue); + return Mathf.NearEqual(initialValue, 0) ? 0 : value / initialValue; } private float NewLinkedValue(float value, float valueRatio) From 424e832ec7c4108fa30daa00cbf48c171b637ebe Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Wed, 31 May 2023 21:23:34 -0500 Subject: [PATCH 6/6] Fix bug on disabling element on init if it is zero. --- Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs index 444af342c..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;