public void AddExecPin() { OutputExecute = new ExecuteNodeItem("Event", NodeItemType.Output); OutputExecute.ActionCollection = ActionCollection; //Assign our action collection, as we are an endpoint this.AddItem(OutputExecute); }
public void OnExecuteNodeChanged(ExecuteNodeItem RootExecuteNode) { //Clear the Root execute node, then walk through it's connections and add the entries to collection DotaActionCollection ActionCollection = RootExecuteNode.ActionCollection; ActionCollection.Clear(); var connection = RootExecuteNode.Connector.Connectors.FirstOrDefault(); while(connection != null) { ActionNode node = connection.To.Node as ActionNode; if (node == null) break; ActionCollection.Add(node.DotaAction); connection = node.OutputExecute.Connector.Connectors.FirstOrDefault(); } Console.WriteLine("Complete Collection: " + ActionCollection.ToString()); }
private void AddNodeElements() { Type t = DotaAction.GetType(); InputExecute = new ExecuteNodeItem("Execute", NodeItemType.Input); this.AddItem(InputExecute); OutputExecute = new ExecuteNodeItem("Execute", NodeItemType.Output); this.AddItem(OutputExecute); //Loop through all of this action's properties and add node elements for each property type PropertyInfo[] properties = t.GetProperties(); //Target should always be ordered first var target = properties.FirstOrDefault(x => x.Name == "Target"); if (target != null) { TargetPin = new TargetNodeItem(target.Name, NodeItemType.Input); TargetPin.Tag = "Target"; this.AddItem(TargetPin); } foreach (PropertyInfo prop in properties) { //Skip DotaDataObject's properties as they don't go into the node if (prop.Name == "ClassName") continue; if (prop.Name == "KeyValue") continue; if (prop.Name == "ObjectInfo") continue; if (prop.Name == "Target") continue; //Skip target because we handled it already NodeItem item = null; if (prop.PropertyType == typeof(NumberValue)) { item = new NumberValueItem(prop.Name, 20, 20, 0, 100, 0, NodeItemType.Input); } if(prop.PropertyType == typeof(TargetKey)) { item = new TargetNodeItem(prop.Name, NodeItemType.Input); } if(prop.PropertyType == typeof(DotaActionCollection)) { item = new ExecuteNodeItem(prop.Name, NodeItemType.Output); var ex = item as ExecuteNodeItem; ex.ActionCollection = prop.GetMethod.Invoke(DotaAction, new object[] { }) as DotaActionCollection; //Assign this execute node as the end point //for an action collection execute chain } if(item == null) item = new NodeLabelItem(prop.Name, NodeItemType.Input); item.Tag = prop.Name; this.AddItem(item); } }