private void OnAddVariable(ReorderableList list) { int idx = m_VariablesList.Count + 1; var uniqueVarName = $"var{idx++}"; while (m_VariablesList.Contains(uniqueVarName)) { uniqueVarName = $"var{idx++}"; } m_VariablesList.Add(uniqueVarName); var newVar = m_Node.AddVariable(uniqueVarName, null); variableAdded?.Invoke(m_Node, newVar.name); }
private SearchExpressionNode LoadNodeData(SearchExpressionNode node, IDictionary info) { if (SJSON.TryGetValue(info, ExpressionField.name, out var name)) { node.name = Convert.ToString(name); } if (SJSON.TryGetValue(info, ExpressionField.value, out var value)) { node.value = value; } if (SJSON.TryGetValue(info, ExpressionField.source, out var source)) { if (source is IDictionary nestedSource) { node.source = ParseNode(nestedSource); } else if (node.type == ExpressionType.Provider) { node.value = (string)source; } else if (m_Nodes.TryGetValue((string)source, out var sourceNode)) { node.source = sourceNode; } else { throw new ExpressionException($"Expression node {node.id} has an invalid source {source}"); } } if (SJSON.TryGetValue(info, ExpressionField.position, out var _obj) && _obj is object[] position && position.Length == 2) { node.position = new Vector2((float)(double)position[0], (float)(double)position[1]); } if (SJSON.TryGetValue(info, ExpressionField.variables, out var variablesData)) { var variables = (IDictionary)variablesData; foreach (var v in variables) { var varName = (string)((DictionaryEntry)v).Key; var valueSource = ((DictionaryEntry)v).Value; if (valueSource == null) { node.AddVariable(varName); } else if (valueSource is IDictionary nestedSource) { node.AddVariable(varName, ParseNode(nestedSource)); } else if (valueSource is string && m_Nodes.TryGetValue((string)valueSource, out var sourceNode)) { node.AddVariable(varName, sourceNode); } else { throw new ExpressionException(node, $"Expression node {node.id} has an invalid variable {varName} with source {valueSource}"); } } } if (SJSON.TryGetValue(info, ExpressionField.properties, out var propertiesData)) { var properties = (IDictionary)propertiesData; foreach (var v in properties) { var propertyName = (string)((DictionaryEntry)v).Key; var propertyValue = ((DictionaryEntry)v).Value; node.SetProperty(propertyName, propertyValue); } } return(node); }