private bool IsConditionMet(NodeData node) => IsConditionMet(_nodeTreeConditionMap[CurrentNodeTree.NodeTree.name][node.Id]());
private Func <T> GetBuildNodeFunc <T>(NodeData node) { List <Action <object> > modifications = new List <Action <object> >(); Dictionary <string, PropertyInfo> props = Type.GetType(node.Type).GetProperties().Where(x => x.CanWrite).ToDictionary(x => x.Name, x => x); var type = Type.GetType(node.Type); foreach (var prop in node.Properties) { if (props[prop.Key].Name == "NodeTreeIds") { modifications.Add(x => props[prop.Key].SetValue(x, node.NextIds.ToArray())); } else if (props[prop.Key].PropertyType == typeof(bool)) { var value = bool.Parse(prop.Value); modifications.Add(x => props[prop.Key].SetValue(x, value)); } else if (props[prop.Key].PropertyType == typeof(string)) { var value = prop.Value; modifications.Add(x => props[prop.Key].SetValue(x, value)); } else if (props[prop.Key].PropertyType == typeof(int)) { var value = int.Parse(prop.Value); modifications.Add(x => props[prop.Key].SetValue(x, value)); } else if (props[prop.Key].PropertyType == typeof(float)) { var value = float.Parse(prop.Value); modifications.Add(x => props[prop.Key].SetValue(x, value)); } else if (props[prop.Key].PropertyType == typeof(TextAsset)) { var value = NodeTrees.First(x => x.name == prop.Value); modifications.Add(x => props[prop.Key].SetValue(x, value)); } else if (typeof(ScriptableObject).IsAssignableFrom(props[prop.Key].PropertyType)) { if (!AssetMap.ContainsKey(prop.Value)) { Debug.LogError($"AssetMap does not contain {prop.Value}"); } var value = AssetMap[prop.Value]; modifications.Add(x => props[prop.Key].SetValue(x, value)); } } var propsToPopulate = props .Where(x => typeof(INodeCommand[]).IsAssignableFrom(x.Value.PropertyType) || typeof(INodeCondition[]).IsAssignableFrom(x.Value.PropertyType) || typeof(INodeObject[]).IsAssignableFrom(x.Value.PropertyType)) .Select(x => x.Value) .ToArray(); if (propsToPopulate.Any()) { modifications.Add(x => PopulateNodeTypes(node, x, propsToPopulate)); } return(() => { var instance = Activator.CreateInstance(type); modifications.ForEach(x => x(instance)); return (T)instance; }); }