Example #1
0
 public void AddExecPin()
 {
     OutputExecute = new ExecuteNodeItem("Event", NodeItemType.Output);
     OutputExecute.ActionCollection = ActionCollection; //Assign our action collection, as we are an endpoint
     this.AddItem(OutputExecute);          
 }
Example #2
0
        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());


        }
Example #3
0
        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);

            }
        }