Fix regression in using per-component input fields in Visject nodes values editing

This commit is contained in:
Wojtek Figat
2025-03-30 20:54:32 +02:00
parent 4c133fb6ff
commit 0046cbe0ef
2 changed files with 36 additions and 34 deletions

View File

@@ -647,8 +647,8 @@ namespace FlaxEditor.Surface.Archetypes
// Axis X // Axis X
NodeElementArchetype.Factory.Input(3, "X", true, typeof(float), 4), NodeElementArchetype.Factory.Input(3, "X", true, typeof(float), 4),
NodeElementArchetype.Factory.Text(30, 3 * Surface.Constants.LayoutOffsetY + 2, "(min: max: )"), NodeElementArchetype.Factory.Text(30, 3 * Surface.Constants.LayoutOffsetY + 2, "(min: max: )"),
NodeElementArchetype.Factory.Float(60, 3 * Surface.Constants.LayoutOffsetY + 2, 0, 0), NodeElementArchetype.Factory.Vector_X(60, 3 * Surface.Constants.LayoutOffsetY + 2, 0),
NodeElementArchetype.Factory.Float(145, 3 * Surface.Constants.LayoutOffsetY + 2, 0, 1), NodeElementArchetype.Factory.Vector_Y(145, 3 * Surface.Constants.LayoutOffsetY + 2, 0),
} }
}, },
new NodeArchetype new NodeArchetype
@@ -683,14 +683,14 @@ namespace FlaxEditor.Surface.Archetypes
// Axis X // Axis X
NodeElementArchetype.Factory.Input(3, "X", true, typeof(float), 4), NodeElementArchetype.Factory.Input(3, "X", true, typeof(float), 4),
NodeElementArchetype.Factory.Text(30, 3 * Surface.Constants.LayoutOffsetY + 2, "(min: max: )"), NodeElementArchetype.Factory.Text(30, 3 * Surface.Constants.LayoutOffsetY + 2, "(min: max: )"),
NodeElementArchetype.Factory.Float(60, 3 * Surface.Constants.LayoutOffsetY + 2, 0, 0), NodeElementArchetype.Factory.Vector_X(60, 3 * Surface.Constants.LayoutOffsetY + 2, 0),
NodeElementArchetype.Factory.Float(145, 3 * Surface.Constants.LayoutOffsetY + 2, 0, 1), NodeElementArchetype.Factory.Vector_Y(145, 3 * Surface.Constants.LayoutOffsetY + 2, 0),
// Axis Y // Axis Y
NodeElementArchetype.Factory.Input(4, "Y", true, typeof(float), 5), NodeElementArchetype.Factory.Input(4, "Y", true, typeof(float), 5),
NodeElementArchetype.Factory.Text(30, 4 * Surface.Constants.LayoutOffsetY + 2, "(min: max: )"), NodeElementArchetype.Factory.Text(30, 4 * Surface.Constants.LayoutOffsetY + 2, "(min: max: )"),
NodeElementArchetype.Factory.Float(60, 4 * Surface.Constants.LayoutOffsetY + 2, 0, 2), NodeElementArchetype.Factory.Vector_Z(60, 4 * Surface.Constants.LayoutOffsetY + 2, 0),
NodeElementArchetype.Factory.Float(145, 4 * Surface.Constants.LayoutOffsetY + 2, 0, 3), NodeElementArchetype.Factory.Vector_W(145, 4 * Surface.Constants.LayoutOffsetY + 2, 0),
} }
}, },
new NodeArchetype new NodeArchetype

View File

@@ -75,6 +75,7 @@ namespace FlaxEditor.Surface.Elements
float result; float result;
var value = customValue ?? parentNode.Values[arch.ValueIndex]; var value = customValue ?? parentNode.Values[arch.ValueIndex];
var component = arch.BoxID; // Reuse existing field
// Note: this value box may edit on component of the vector like Vector3.Y, BoxID from Archetype tells which component pick // Note: this value box may edit on component of the vector like Vector3.Y, BoxID from Archetype tells which component pick
@@ -92,39 +93,39 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Vector2 asVector2) else if (value is Vector2 asVector2)
{ {
result = (float)(arch.BoxID == 0 ? asVector2.X : asVector2.Y); result = (float)(component == 0 ? asVector2.X : asVector2.Y);
} }
else if (value is Vector3 asVector3) else if (value is Vector3 asVector3)
{ {
result = (float)(arch.BoxID == 0 ? asVector3.X : arch.BoxID == 1 ? asVector3.Y : asVector3.Z); result = (float)(component == 0 ? asVector3.X : component == 1 ? asVector3.Y : asVector3.Z);
} }
else if (value is Vector4 asVector4) else if (value is Vector4 asVector4)
{ {
result = (float)(arch.BoxID == 0 ? asVector4.X : arch.BoxID == 1 ? asVector4.Y : arch.BoxID == 2 ? asVector4.Z : asVector4.W); result = (float)(component == 0 ? asVector4.X : component == 1 ? asVector4.Y : component == 2 ? asVector4.Z : asVector4.W);
} }
else if (value is Float2 asFloat2) else if (value is Float2 asFloat2)
{ {
result = (arch.BoxID == 0 ? asFloat2.X : asFloat2.Y); result = (component == 0 ? asFloat2.X : asFloat2.Y);
} }
else if (value is Float3 asFloat3) else if (value is Float3 asFloat3)
{ {
result = (arch.BoxID == 0 ? asFloat3.X : arch.BoxID == 1 ? asFloat3.Y : asFloat3.Z); result = (component == 0 ? asFloat3.X : component == 1 ? asFloat3.Y : asFloat3.Z);
} }
else if (value is Float4 asFloat4) else if (value is Float4 asFloat4)
{ {
result = (arch.BoxID == 0 ? asFloat4.X : arch.BoxID == 1 ? asFloat4.Y : arch.BoxID == 2 ? asFloat4.Z : asFloat4.W); result = (component == 0 ? asFloat4.X : component == 1 ? asFloat4.Y : component == 2 ? asFloat4.Z : asFloat4.W);
} }
else if (value is Double2 asDouble2) else if (value is Double2 asDouble2)
{ {
result = (float)(arch.BoxID == 0 ? asDouble2.X : asDouble2.Y); result = (float)(component == 0 ? asDouble2.X : asDouble2.Y);
} }
else if (value is Double3 asDouble3) else if (value is Double3 asDouble3)
{ {
result = (float)(arch.BoxID == 0 ? asDouble3.X : arch.BoxID == 1 ? asDouble3.Y : asDouble3.Z); result = (float)(component == 0 ? asDouble3.X : component == 1 ? asDouble3.Y : asDouble3.Z);
} }
else if (value is Double4 asDouble4) else if (value is Double4 asDouble4)
{ {
result = (float)(arch.BoxID == 0 ? asDouble4.X : arch.BoxID == 1 ? asDouble4.Y : arch.BoxID == 2 ? asDouble4.Z : asDouble4.W); result = (float)(component == 0 ? asDouble4.X : component == 1 ? asDouble4.Y : component == 2 ? asDouble4.Z : asDouble4.W);
} }
else else
{ {
@@ -146,6 +147,7 @@ namespace FlaxEditor.Surface.Elements
return; return;
var value = parentNode.Values[arch.ValueIndex]; var value = parentNode.Values[arch.ValueIndex];
var component = arch.BoxID; // Reuse existing field
if (value is int) if (value is int)
{ {
@@ -159,14 +161,14 @@ namespace FlaxEditor.Surface.Elements
{ {
value = (double)toSet; value = (double)toSet;
} }
else if (parentNode.GroupArchetype.GroupID != 2) else if (component == -1)
{ {
// Per-component editing is used only by nodes from Constant group, otherwise use float // Per-component editing is used only by nodes from Constant group, otherwise use float
value = toSet; value = toSet;
} }
else if (value is Vector2 asVector2) else if (value is Vector2 asVector2)
{ {
if (arch.BoxID == 0) if (component == 0)
asVector2.X = toSet; asVector2.X = toSet;
else else
asVector2.Y = toSet; asVector2.Y = toSet;
@@ -174,9 +176,9 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Vector3 asVector3) else if (value is Vector3 asVector3)
{ {
if (arch.BoxID == 0) if (component == 0)
asVector3.X = toSet; asVector3.X = toSet;
else if (arch.BoxID == 1) else if (component == 1)
asVector3.Y = toSet; asVector3.Y = toSet;
else else
asVector3.Z = toSet; asVector3.Z = toSet;
@@ -184,11 +186,11 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Vector4 asVector4) else if (value is Vector4 asVector4)
{ {
if (arch.BoxID == 0) if (component == 0)
asVector4.X = toSet; asVector4.X = toSet;
else if (arch.BoxID == 1) else if (component == 1)
asVector4.Y = toSet; asVector4.Y = toSet;
else if (arch.BoxID == 2) else if (component == 2)
asVector4.Z = toSet; asVector4.Z = toSet;
else else
asVector4.W = toSet; asVector4.W = toSet;
@@ -196,7 +198,7 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Float2 asFloat2) else if (value is Float2 asFloat2)
{ {
if (arch.BoxID == 0) if (component == 0)
asFloat2.X = toSet; asFloat2.X = toSet;
else else
asFloat2.Y = toSet; asFloat2.Y = toSet;
@@ -204,9 +206,9 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Float3 asFloat3) else if (value is Float3 asFloat3)
{ {
if (arch.BoxID == 0) if (component == 0)
asFloat3.X = toSet; asFloat3.X = toSet;
else if (arch.BoxID == 1) else if (component == 1)
asFloat3.Y = toSet; asFloat3.Y = toSet;
else else
asFloat3.Z = toSet; asFloat3.Z = toSet;
@@ -214,11 +216,11 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Float4 asFloat4) else if (value is Float4 asFloat4)
{ {
if (arch.BoxID == 0) if (component == 0)
asFloat4.X = toSet; asFloat4.X = toSet;
else if (arch.BoxID == 1) else if (component == 1)
asFloat4.Y = toSet; asFloat4.Y = toSet;
else if (arch.BoxID == 2) else if (component == 2)
asFloat4.Z = toSet; asFloat4.Z = toSet;
else else
asFloat4.W = toSet; asFloat4.W = toSet;
@@ -226,7 +228,7 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Double2 asDouble2) else if (value is Double2 asDouble2)
{ {
if (arch.BoxID == 0) if (component == 0)
asDouble2.X = toSet; asDouble2.X = toSet;
else else
asDouble2.Y = toSet; asDouble2.Y = toSet;
@@ -234,9 +236,9 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Double3 asDouble3) else if (value is Double3 asDouble3)
{ {
if (arch.BoxID == 0) if (component == 0)
asDouble3.X = toSet; asDouble3.X = toSet;
else if (arch.BoxID == 1) else if (component == 1)
asDouble3.Y = toSet; asDouble3.Y = toSet;
else else
asDouble3.Z = toSet; asDouble3.Z = toSet;
@@ -244,11 +246,11 @@ namespace FlaxEditor.Surface.Elements
} }
else if (value is Double4 asDouble4) else if (value is Double4 asDouble4)
{ {
if (arch.BoxID == 0) if (component == 0)
asDouble4.X = toSet; asDouble4.X = toSet;
else if (arch.BoxID == 1) else if (component == 1)
asDouble4.Y = toSet; asDouble4.Y = toSet;
else if (arch.BoxID == 2) else if (component == 2)
asDouble4.Z = toSet; asDouble4.Z = toSet;
else else
asDouble4.W = toSet; asDouble4.W = toSet;