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()
{