Fixes for array nodes in Visject
This commit is contained in:
@@ -50,7 +50,7 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
Size = new Vector2(150, 40),
|
Size = new Vector2(150, 40),
|
||||||
ConnectionsHints = ConnectionsHint.Array,
|
ConnectionsHints = ConnectionsHint.Array,
|
||||||
IndependentBoxes = new int[] { 0 },
|
IndependentBoxes = new int[] { 0 },
|
||||||
DependentBoxes = new int[] { },
|
DependentBoxes = new int[] { 1 },
|
||||||
DependentBoxFilter = GetArrayItemType,
|
DependentBoxFilter = GetArrayItemType,
|
||||||
Elements = new[]
|
Elements = new[]
|
||||||
{
|
{
|
||||||
@@ -66,7 +66,7 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
Description = "Returns the zero-based index of the item found in the array or -1 if nothing found.",
|
Description = "Returns the zero-based index of the item found in the array or -1 if nothing found.",
|
||||||
AlternativeTitles = new[] { "IndexOf", "Find" },
|
AlternativeTitles = new[] { "IndexOf", "Find" },
|
||||||
Flags = NodeFlags.VisualScriptGraph | NodeFlags.AnimGraph,
|
Flags = NodeFlags.VisualScriptGraph | NodeFlags.AnimGraph,
|
||||||
Size = new Vector2(150, 40),
|
Size = new Vector2(170, 40),
|
||||||
ConnectionsHints = ConnectionsHint.Array,
|
ConnectionsHints = ConnectionsHint.Array,
|
||||||
IndependentBoxes = new int[] { 0 },
|
IndependentBoxes = new int[] { 0 },
|
||||||
DependentBoxes = new int[] { 1, 2 },
|
DependentBoxes = new int[] { 1, 2 },
|
||||||
@@ -85,7 +85,7 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
Description = "Returns the zero-based index of the item found in the array or -1 if nothing found (searches from back to front).",
|
Description = "Returns the zero-based index of the item found in the array or -1 if nothing found (searches from back to front).",
|
||||||
AlternativeTitles = new[] { "LastIndexOf", "FindLast" },
|
AlternativeTitles = new[] { "LastIndexOf", "FindLast" },
|
||||||
Flags = NodeFlags.VisualScriptGraph | NodeFlags.AnimGraph,
|
Flags = NodeFlags.VisualScriptGraph | NodeFlags.AnimGraph,
|
||||||
Size = new Vector2(150, 40),
|
Size = new Vector2(170, 40),
|
||||||
ConnectionsHints = ConnectionsHint.Array,
|
ConnectionsHints = ConnectionsHint.Array,
|
||||||
IndependentBoxes = new int[] { 0 },
|
IndependentBoxes = new int[] { 0 },
|
||||||
DependentBoxes = new int[] { 1, 2 },
|
DependentBoxes = new int[] { 1, 2 },
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
private TypePickerControl _typePicker;
|
private TypePickerControl _typePicker;
|
||||||
private Button _addButton;
|
private Button _addButton;
|
||||||
private Button _removeButton;
|
private Button _removeButton;
|
||||||
|
private bool _isUpdatingUI;
|
||||||
|
|
||||||
public ArrayNode(uint id, VisjectSurfaceContext context, NodeArchetype nodeArch, GroupArchetype groupArch)
|
public ArrayNode(uint id, VisjectSurfaceContext context, NodeArchetype nodeArch, GroupArchetype groupArch)
|
||||||
: base(id, context, nodeArch, groupArch)
|
: base(id, context, nodeArch, groupArch)
|
||||||
@@ -86,9 +87,9 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
|
|
||||||
public override void OnValuesChanged()
|
public override void OnValuesChanged()
|
||||||
{
|
{
|
||||||
base.OnValuesChanged();
|
|
||||||
|
|
||||||
UpdateUI();
|
UpdateUI();
|
||||||
|
|
||||||
|
base.OnValuesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnLoaded()
|
public override void OnLoaded()
|
||||||
@@ -122,7 +123,13 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
|
|
||||||
private void Set(int length)
|
private void Set(int length)
|
||||||
{
|
{
|
||||||
SetValue(0, Array.CreateInstance(TypeUtils.GetType(_typePicker.Value), length));
|
if (_isUpdatingUI)
|
||||||
|
return;
|
||||||
|
var prev = (Array)Values[0];
|
||||||
|
var next = Array.CreateInstance(TypeUtils.GetType(_typePicker.Value), length);
|
||||||
|
if (prev.GetType() == next.GetType())
|
||||||
|
Array.Copy(prev, next, Mathf.Min(prev.Length, next.Length));
|
||||||
|
SetValue(0, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnSurfaceCanEditChanged(bool canEdit)
|
public override void OnSurfaceCanEditChanged(bool canEdit)
|
||||||
@@ -146,11 +153,15 @@ namespace FlaxEditor.Surface.Archetypes
|
|||||||
|
|
||||||
private void UpdateUI()
|
private void UpdateUI()
|
||||||
{
|
{
|
||||||
|
if (_isUpdatingUI)
|
||||||
|
return;
|
||||||
var array = (Array)Values[0];
|
var array = (Array)Values[0];
|
||||||
var arrayType = array.GetType();
|
var arrayType = array.GetType();
|
||||||
var elementType = new ScriptType(arrayType.GetElementType());
|
var elementType = new ScriptType(arrayType.GetElementType());
|
||||||
|
_isUpdatingUI = true;
|
||||||
_typePicker.Value = elementType;
|
_typePicker.Value = elementType;
|
||||||
_output.CurrentType = new ScriptType(arrayType);
|
_output.CurrentType = new ScriptType(arrayType);
|
||||||
|
_isUpdatingUI = false;
|
||||||
|
|
||||||
var count = array.Length;
|
var count = array.Length;
|
||||||
var countMin = 0;
|
var countMin = 0;
|
||||||
|
|||||||
@@ -928,8 +928,7 @@ namespace FlaxEditor.Surface.Elements
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void UpdateDefaultValue()
|
public void UpdateDefaultValue()
|
||||||
{
|
{
|
||||||
var currentType = CurrentType.Type;
|
if (_defaultValueEditor != null && _currentType.Type != null)
|
||||||
if (_defaultValueEditor != null && currentType != null)
|
|
||||||
{
|
{
|
||||||
_editor.UpdateDefaultValue(this, _defaultValueEditor);
|
_editor.UpdateDefaultValue(this, _defaultValueEditor);
|
||||||
}
|
}
|
||||||
@@ -986,7 +985,7 @@ namespace FlaxEditor.Surface.Elements
|
|||||||
{
|
{
|
||||||
base.OnCurrentTypeChanged();
|
base.OnCurrentTypeChanged();
|
||||||
|
|
||||||
if (_defaultValueEditor != null && !_editor.IsValid(this, _defaultValueEditor))
|
if (_defaultValueEditor != null && !(_editor.IsValid(this, _defaultValueEditor) && _editor.CanUse(this, ref _currentType)))
|
||||||
{
|
{
|
||||||
_defaultValueEditor.Dispose();
|
_defaultValueEditor.Dispose();
|
||||||
_defaultValueEditor = null;
|
_defaultValueEditor = null;
|
||||||
@@ -1057,6 +1056,19 @@ namespace FlaxEditor.Surface.Elements
|
|||||||
return base.OnMouseUp(location, button);
|
return base.OnMouseUp(location, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void OnDestroy()
|
||||||
|
{
|
||||||
|
if (_defaultValueEditor != null)
|
||||||
|
{
|
||||||
|
_defaultValueEditor.Dispose();
|
||||||
|
_defaultValueEditor = null;
|
||||||
|
_editor = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
base.OnDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
private bool GetClipboardValue(out object result, bool deserialize)
|
private bool GetClipboardValue(out object result, bool deserialize)
|
||||||
{
|
{
|
||||||
result = null;
|
result = null;
|
||||||
@@ -1159,9 +1171,17 @@ namespace FlaxEditor.Surface.Elements
|
|||||||
{
|
{
|
||||||
var bounds = new Rectangle(X + Width + 8 + Style.Current.FontSmall.MeasureText(Text).X, Y, 90, Height);
|
var bounds = new Rectangle(X + Width + 8 + Style.Current.FontSmall.MeasureText(Text).X, Y, 90, Height);
|
||||||
_editor = DefaultValueEditors[i];
|
_editor = DefaultValueEditors[i];
|
||||||
_defaultValueEditor = _editor.Create(this, ref bounds);
|
try
|
||||||
if (_attributes != null)
|
{
|
||||||
_editor.UpdateAttributes(this, _attributes, _defaultValueEditor);
|
_defaultValueEditor = _editor.Create(this, ref bounds);
|
||||||
|
if (_attributes != null)
|
||||||
|
_editor.UpdateAttributes(this, _attributes, _defaultValueEditor);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Editor.LogWarning(ex);
|
||||||
|
_editor = null;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user