public void CreateNode(NodeDefine node, ToolStripDropDownItem parent) { ToolStripDropDownItem toolStripDropDownItem = parent; if (!string.IsNullOrEmpty(node.Category)) { string[] menus = node.Category.Trim().Split('/'); for (int i = 0; i < menus.Length; i++) { string menuStr = menus[i]; if (string.IsNullOrEmpty(menuStr)) { continue; } bool exist = false; for (int ii = 0; ii < toolStripDropDownItem.DropDownItems.Count; ii++) { ToolStripDropDownItem temp = (ToolStripDropDownItem)toolStripDropDownItem.DropDownItems[ii]; if (temp.Tag is string && (string)temp.Tag == menuStr) { exist = true; toolStripDropDownItem = temp; break; } } if (!exist) { toolStripDropDownItem = (ToolStripDropDownItem)toolStripDropDownItem.DropDownItems.Add(menuStr); toolStripDropDownItem.Tag = menuStr; } if (i == menus.Length - 1) { ToolStripItem nodeItem = toolStripDropDownItem.DropDownItems.Add(node.ClassType); nodeItem.Tag = node; nodeItem.Click += new EventHandler(OnClickNodeItem); } } } else { ToolStripItem nodeItem = toolStripDropDownItem.DropDownItems.Add(node.ClassType); nodeItem.Tag = node; nodeItem.Click += new EventHandler(OnClickNodeItem); } }
private void OnClickNodeItem(object sender, EventArgs e) { ToolStripDropDownItem toolStripDropDownItem = (ToolStripDropDownItem)sender; if (toolStripDropDownItem == null) { return; } NodeDefine nodeDefine = (NodeDefine)toolStripDropDownItem.Tag; if (nodeDefine == null) { return; } Rect rect = new Rect(m_MouseWorldPoint.x, m_MouseWorldPoint.y, EditorUtility.NodeWidth, EditorUtility.NodeHeight); NodeDesigner node = new NodeDesigner(nodeDefine.Label, nodeDefine.ClassType, rect); node.ID = BehaviorTree.GenNodeID(); node.Label = nodeDefine.Label; node.NodeType = nodeDefine.NodeType; node.ClassType = nodeDefine.ClassType; //创建字段 for (int i = 0; i < nodeDefine.Fields.Count; i++) { NodeField nodeField = nodeDefine.Fields[i]; FieldDesigner field = EditorUtility.CreateFieldByNodeField(nodeField); if (field == null) { continue; } node.Fields.Add(field); } BehaviorTree.AddNode(node); }
//显示视图菜单上下文 private void ShowViewContextMenu() { if (BehaviorTree == null) { return; } if (m_SelectionNodes.Count > 0) { return; } if (MainForm.Instance.NodeTemplate == null) { return; } NodeTemplate nodeTemplate = MainForm.Instance.NodeTemplate; List <NodeDefine> nodes = nodeTemplate.Nodes; viewContextMenuStrip.Items.Clear(); ToolStripDropDownItem compositeItem = viewContextMenuStrip.Items.Add("组合节点") as ToolStripDropDownItem; ToolStripDropDownItem decoratorItem = viewContextMenuStrip.Items.Add("修饰节点") as ToolStripDropDownItem; ToolStripDropDownItem conditionItem = viewContextMenuStrip.Items.Add("条件节点") as ToolStripDropDownItem; ToolStripDropDownItem actionItem = viewContextMenuStrip.Items.Add("动作节点") as ToolStripDropDownItem; //绑定组合节点 List <NodeDefine> compositeList = nodeTemplate.GetNodeDefines(NodeType.Composite); for (int i = 0; i < compositeList.Count; i++) { NodeDefine node = compositeList[i]; CreateNode(node, compositeItem); } //绑定修饰节点 List <NodeDefine> decoratorList = nodeTemplate.GetNodeDefines(NodeType.Decorator); for (int i = 0; i < decoratorList.Count; i++) { NodeDefine node = decoratorList[i]; CreateNode(node, decoratorItem); } //绑定条件节点 List <NodeDefine> conditionList = nodeTemplate.GetNodeDefines(NodeType.Condition); for (int i = 0; i < conditionList.Count; i++) { NodeDefine node = conditionList[i]; CreateNode(node, conditionItem); } //绑定动作节点 List <NodeDefine> actionList = nodeTemplate.GetNodeDefines(NodeType.Action); for (int i = 0; i < actionList.Count; i++) { NodeDefine node = actionList[i]; CreateNode(node, actionItem); } //添加分割线 viewContextMenuStrip.Items.Add(new ToolStripSeparator()); //尝试创建粘贴按钮 TryCreatePasteNode(); ToolStripItem centerItem = viewContextMenuStrip.Items.Add("居中"); centerItem.Click += new EventHandler(centerItem_Click); viewContextMenuStrip.Show(PointToScreen(m_MouseLocalPoint)); this.Refresh(); }