private void GeneratePorts(DrawNodeViewGraph drawNode) { var members = drawNode.InnerNode.GetType().GetMembers(); foreach (var m in members) { var atrs = m.GetCustomAttributes(); foreach (var a in atrs) { if (a is ConnectionAttribute connection) { switch (connection.ConnectionPointType) { case ConnectionPointType.In: var port = GeneratePort(drawNode, Direction.Input, connection.NameOfField, Port.Capacity.Multi); drawNode.ConnectedPorts.Add(port, (m, Direction.Input)); break; case ConnectionPointType.Out: case ConnectionPointType.Link: var port2 = GeneratePort(drawNode, Direction.Output, connection.NameOfField); drawNode.ConnectedPorts.Add(port2, (m, Direction.Output)); break; } } } } }
private Port GeneratePort(DrawNodeViewGraph node, Direction direction, string portName, Port.Capacity capacity = Port.Capacity.Single) { var port = node.InstantiatePort(Orientation.Horizontal, direction, capacity, typeof(BaseDecisionNode)); port.portName = portName; node.outputContainer.Add(port); node.RefreshExpandedState(); node.RefreshPorts(); return(port); }
private DrawNodeViewGraph AddNodeToDecision(BaseDecisionNode node) { var drawNode = new DrawNodeViewGraph(); drawNode.title = node.TitleOfNode; drawNode.GUID = Guid.NewGuid().ToString(); drawNode.InnerNode = node; drawNode.styleSheets.Add(Resources.Load <StyleSheet>("Node")); drawNode.SetPosition(new Rect(node.coords, new Vector2(150, 50))); GeneratePorts(drawNode); GenerateCustomField(drawNode); AddElement(drawNode); drawNodes.Add(drawNode); return(drawNode); }
private DrawNodeViewGraph EntryPoint(Strategy strategy) { var node = new DrawNodeViewGraph(); var startNode = strategy.nodes.FirstOrDefault(x => x is StartDecision); if (startNode == null) { OnClickAddNode(Vector2.zero, typeof(StartDecision)); startNode = strategy.nodes.FirstOrDefault(x => x is StartDecision); } node.title = startNode.TitleOfNode; node.GUID = Guid.NewGuid().ToString(); node.InnerNode = startNode; node.SetPosition(new Rect(startNode.coords, new Vector2(150, 50))); GeneratePorts(node); drawNodes.Add(node); return(node); }
private void GenerateCustomField(DrawNodeViewGraph drawNode) { var so = new SerializedObject(drawNode.InnerNode); if (drawNode.InnerNode != null) { foreach (var m in drawNode.InnerNode.GetType().GetMembers()) { foreach (var a in m.GetCustomAttributes()) { if (a is SerializeField) { var field = m as FieldInfo; if (field.FieldType == typeof(int)) { var intField = new IntegerField(m.Name + ":"); intField.value = (int)(m as FieldInfo).GetValue(drawNode.InnerNode); intField.RegisterValueChangedCallback((evt) => IntChangeReact(evt, m as FieldInfo, drawNode.InnerNode)); drawNode.contentContainer.Add(intField); } if (field.FieldType == typeof(Strategy)) { var objectField = new ObjectField(m.Name + ":") { objectType = typeof(Strategy) }; objectField.value = (m as FieldInfo).GetValue(drawNode.InnerNode) as Strategy; objectField.RegisterValueChangedCallback((evt) => ChangeStrategy(evt, m as FieldInfo, drawNode.InnerNode)); drawNode.contentContainer.Add(objectField); } if (field.FieldType.BaseType == typeof(Enum)) { var enumField = new EnumField(m.Name + ":"); var property = so.FindProperty(m.Name); enumField.value = (Enum)Enum.ToObject(field.FieldType, field.GetValue(drawNode.InnerNode)); enumField.Init((Enum)Enum.ToObject(field.FieldType, field.GetValue(drawNode.InnerNode))); enumField.RegisterValueChangedCallback((evt) => EnumChangeReact(evt, field, drawNode.InnerNode)); drawNode.contentContainer.Add(enumField); } if (field.FieldType == typeof(float)) { var floatField = new FloatField(m.Name + ":"); floatField.value = (float)field.GetValue(drawNode.InnerNode); floatField.RegisterValueChangedCallback((evt) => FloatFieldReact(evt, field, drawNode.InnerNode)); drawNode.contentContainer.Add(floatField); } if (field.FieldType == typeof(bool)) { var boolField = new Toggle(m.Name + ":"); boolField.value = (bool)field.GetValue(drawNode.InnerNode); boolField.RegisterValueChangedCallback((evt) => BoolFieldReact(evt, field, drawNode.InnerNode)); drawNode.contentContainer.Add(boolField); } drawNode.RefreshPorts(); drawNode.RefreshExpandedState(); } } } } }