Exemplo n.º 1
0
        public static BTData.BehaviorTreeData CreateTreeData(BehaviorTreeDataDesigner treeData)
        {
            BTData.BehaviorTreeData data = new BTData.BehaviorTreeData();

            //全局变量
            for (int i = 0; i < treeData.GlobalVariable.VariableFields.Count; i++)
            {
                VariableFieldDesigner variableField     = treeData.GlobalVariable.VariableFields[i];
                BTData.BaseField      variableFieldData = CreateVariableField(variableField);
                data.GlobalVariable.VariableFields.Add(variableFieldData);
            }

            //Context变量
            for (int i = 0; i < treeData.ContextVariable.VariableFields.Count; i++)
            {
                VariableFieldDesigner variableField     = treeData.ContextVariable.VariableFields[i];
                BTData.BaseField      variableFieldData = CreateVariableField(variableField);
                data.ContextVariable.VariableFields.Add(variableFieldData);
            }

            for (int i = 0; i < treeData.BehaviorTrees.Count; i++)
            {
                BehaviorTreeDesigner behaviorTree = treeData.BehaviorTrees[i];
                if (behaviorTree == null)
                {
                    continue;
                }
                data.BehaviorTrees.Add(CreateBehaviorTreeData(behaviorTree));
            }

            return(data);
        }
Exemplo n.º 2
0
        private void Paste()
        {
            try
            {
                VariableItemListContent content = XmlUtility.StringToObject <VariableItemListContent>(Clipboard.GetText());

                for (int i = 0; i < content.DataList.Count; i++)
                {
                    VariableFieldDesigner variableField = content.DataList[i];
                    string variableStr = variableField.VariableFieldName;
                    do
                    {
                        variableStr += "_New";
                    }while (m_EditContextVariable.ExistVariableStr(variableStr));

                    variableField.VariableFieldName = variableStr;
                    m_EditContextVariable.Add(variableField);
                }

                Exec("Refresh");
                MainForm.Instance.ShowInfo("您粘贴了" + content.DataList.Count + "个变量选项!!!");
            }
            catch (Exception ex)
            {
                MainForm.Instance.ShowInfo("无法进行粘贴,错误信息:" + ex.Message);
                MainForm.Instance.ShowMessage("无法进行粘贴,错误信息:" + ex.Message, "警告");
            }
        }
Exemplo n.º 3
0
        public static BTData.BehaviorTreeElement CreateBehaviorTreeData(BehaviorTreeDesigner behaviorTree)
        {
            BTData.BehaviorTreeElement data = new BTData.BehaviorTreeElement();
            data.ID = behaviorTree.ID;

            //行为树变量
            for (int i = 0; i < behaviorTree.BehaviorTreeVariableFields.Count; i++)
            {
                VariableFieldDesigner field = behaviorTree.BehaviorTreeVariableFields[i];
                if (field == null)
                {
                    continue;
                }
                data.BehaviorTreeVariables.Add(CreateVariableField(field));
            }

            for (int i = 0; i < behaviorTree.Fields.Count; i++)
            {
                FieldDesigner field = behaviorTree.Fields[i];
                if (field == null)
                {
                    continue;
                }
                data.Fields.Add(CreateField(field));
            }

            NodeDesigner startNode = behaviorTree.GetStartNode();

            if (startNode != null)
            {
                data.StartNode = CreateNode(behaviorTree, startNode);
            }

            return(data);
        }
Exemplo n.º 4
0
        private void PasteBehaviorTreeVar()
        {
            try
            {
                VariableFieldListContent content = XmlUtility.StringToObject <VariableFieldListContent>(Clipboard.GetText());

                for (int i = 0; i < content.DataList.Count; i++)
                {
                    VariableFieldDesigner field = content.DataList[i];
                    string fieldName            = field.VariableFieldName;
                    while (m_EditBehaviorTree.ExistBehaviorTreeVar(fieldName))
                    {
                        fieldName += "_New";
                    }

                    field.VariableFieldName = fieldName;
                    m_EditBehaviorTree.AddBehaviorTreeVar(field);
                }
                Exec("Refresh_BehaviorTreeVar");
                MainForm.Instance.ShowInfo("您粘贴了" + content.DataList.Count + "个变量!!!");
            }
            catch (Exception ex)
            {
                MainForm.Instance.ShowInfo("无法进行粘贴,错误信息:" + ex.Message);
                MainForm.Instance.ShowMessage("无法进行粘贴,错误信息:" + ex.Message, "警告");
            }
        }
Exemplo n.º 5
0
        public static BTData.BaseField CreateVariableField(VariableFieldDesigner variableFieldData)
        {
            BTData.BaseField data = null;

            switch (variableFieldData.VariableFieldType)
            {
            case FieldType.IntField:
                BTData.IntField  intField         = new BTData.IntField();
                IntFieldDesigner intFieldDesigner = variableFieldData.Value as IntFieldDesigner;
                intField.FieldName = variableFieldData.VariableFieldName;
                intField.Value     = intFieldDesigner.Value;
                data = intField;
                break;

            case FieldType.LongField:
                BTData.LongField  longField         = new BTData.LongField();
                LongFieldDesigner longFieldDesigner = variableFieldData.Value as LongFieldDesigner;
                longField.FieldName = variableFieldData.VariableFieldName;
                longField.Value     = longFieldDesigner.Value;
                data = longField;
                break;

            case FieldType.FloatField:
                BTData.FloatField  floatField         = new BTData.FloatField();
                FloatFieldDesigner floatFieldDesigner = variableFieldData.Value as FloatFieldDesigner;
                floatField.FieldName = variableFieldData.VariableFieldName;
                floatField.Value     = floatFieldDesigner.Value;
                data = floatField;
                break;

            case FieldType.DoubleField:
                BTData.DoubleField  doubleField         = new BTData.DoubleField();
                DoubleFieldDesigner doubleFieldDesigner = variableFieldData.Value as DoubleFieldDesigner;
                doubleField.FieldName = variableFieldData.VariableFieldName;
                doubleField.Value     = doubleFieldDesigner.Value;
                data = doubleField;
                break;

            case FieldType.StringField:
                BTData.StringField  stringField         = new BTData.StringField();
                StringFieldDesigner stringFieldDesigner = variableFieldData.Value as StringFieldDesigner;
                stringField.FieldName = variableFieldData.VariableFieldName;
                stringField.Value     = stringFieldDesigner.Value;
                data = stringField;
                break;

            case FieldType.BooleanField:
                BTData.BooleanField  booleanField         = new BTData.BooleanField();
                BooleanFieldDesigner booleanFieldDesigner = variableFieldData.Value as BooleanFieldDesigner;
                booleanField.FieldName = variableFieldData.VariableFieldName;
                booleanField.Value     = booleanFieldDesigner.Value;
                data = booleanField;
                break;
            }

            return(data);
        }
Exemplo n.º 6
0
        private void Delete()
        {
            if (listView1.SelectedIndices.Count == 0)
            {
                MainForm.Instance.ShowInfo("请选择一条记录进行删除");
                return;
            }

            if (listView1.SelectedIndices.Count == 1)
            {
                int                   selectIdx    = listView1.SelectedIndices[0];
                ListViewItem          selectedItem = listView1.Items[selectIdx];
                VariableFieldDesigner variableItem = selectedItem.Tag as VariableFieldDesigner;

                if (MessageBox.Show(string.Format("确定删除变量选项{0}吗?", variableItem.VariableFieldName), "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    listView1.Items.RemoveAt(selectIdx);
                    m_EditContextVariable.Remove(variableItem.VariableFieldName);
                    MainForm.Instance.ShowInfo(string.Format("删除变量选项{0} 时间:{1}", variableItem.VariableFieldName, DateTime.Now));
                    if (listView1.Items.Count > selectIdx)
                    {
                        listView1.Items[selectIdx].Selected = true;
                    }
                }
            }
            else
            {
                if (MessageBox.Show("确定批量删除选中的变量选项吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    List <ListViewItem> removeItems = new List <ListViewItem>();

                    for (int i = 0; i < listView1.SelectedIndices.Count; i++)
                    {
                        int          index        = listView1.SelectedIndices[i];
                        ListViewItem listViewItem = listView1.Items[index];
                        removeItems.Add(listViewItem);
                    }

                    while (removeItems.Count > 0)
                    {
                        ListViewItem listViewItem = removeItems[0];
                        removeItems.RemoveAt(0);
                        VariableFieldDesigner variableField = listViewItem.Tag as VariableFieldDesigner;
                        listView1.Items.Remove(listViewItem);
                        m_EditContextVariable.Remove(variableField);
                    }
                }
            }

            //更新序号
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                listView1.Items[i].Text = (i + 1).ToString();
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// 判断行为树变量是否已存在
 /// </summary>
 /// <param name="fieldName"></param>
 /// <returns></returns>
 public bool ExistBehaviorTreeVar(string varName)
 {
     for (int i = 0; i < m_BehaviorTreeVariables.Count; i++)
     {
         VariableFieldDesigner temp = m_BehaviorTreeVariables[i];
         if (temp.VariableFieldName == varName)
         {
             return(true);
         }
     }
     return(false);
 }
Exemplo n.º 8
0
        private void SwapBehaviorTreeVar(bool up)
        {
            if (listView2.SelectedIndices.Count > 1)
            {
                MainForm.Instance.ShowInfo("请选择一条记录进行交换");
                MainForm.Instance.ShowMessage("请选择一条记录进行交换", "警告");
                return;
            }

            int selectIdx = listView2.SelectedIndices[0];

            if (up)
            {
                //第一个不能往上交换
                if (selectIdx == 0)
                {
                    return;
                }

                int preIdx = selectIdx - 1;

                VariableFieldDesigner preField      = m_EditBehaviorTree.BehaviorTreeVariableFields[preIdx];
                VariableFieldDesigner selectedField = m_EditBehaviorTree.BehaviorTreeVariableFields[selectIdx];

                m_EditBehaviorTree.BehaviorTreeVariableFields[preIdx]    = selectedField;
                m_EditBehaviorTree.BehaviorTreeVariableFields[selectIdx] = preField;

                selectIdx = preIdx;
            }
            else
            {
                //最后一个不能往下交换
                if (selectIdx == listView2.Items.Count - 1)
                {
                    return;
                }

                int nextIdx = selectIdx + 1;

                VariableFieldDesigner preField      = m_EditBehaviorTree.BehaviorTreeVariableFields[nextIdx];
                VariableFieldDesigner selectedField = m_EditBehaviorTree.BehaviorTreeVariableFields[selectIdx];

                m_EditBehaviorTree.BehaviorTreeVariableFields[nextIdx]   = selectedField;
                m_EditBehaviorTree.BehaviorTreeVariableFields[selectIdx] = preField;

                selectIdx = nextIdx;
            }

            Exec("Refresh_BehaviorTreeVar");
            MainForm.Instance.ShowInfo("交换成功 时间:" + DateTime.Now);
            listView2.Items[selectIdx].Selected = true;
        }
Exemplo n.º 9
0
        private void New()
        {
            VariableFieldDesigner field = new VariableFieldDesigner();
            InputValueDialogForm  form  = new InputValueDialogForm("添加变量", field);

            if (form.ShowDialog() == DialogResult.OK)
            {
                if (m_EditContextVariable.Add(field))
                {
                    AddVariableFieldItem(field);
                }
            }
        }
Exemplo n.º 10
0
 private void BindVariable()
 {
     listView1.Items.Clear();
     for (int i = 0; i < m_EditContextVariable.VariableFields.Count; i++)
     {
         VariableFieldDesigner variableField = m_EditContextVariable.VariableFields[i];
         ListViewItem          listViewItem  = listView1.Items.Add((i + 1).ToString());
         listViewItem.Tag = variableField;
         listViewItem.SubItems.Add(variableField.VariableFieldName);
         listViewItem.SubItems.Add(variableField.VariableFieldType.ToString());
         listViewItem.SubItems.Add(variableField.Value == null ? string.Empty : variableField.Value.ToString());
         listViewItem.SubItems.Add(variableField.Describe);
     }
 }
Exemplo n.º 11
0
        private void Edit()
        {
            if (listView1.SelectedIndices.Count == 1)
            {
                int                   selectIdx    = listView1.SelectedIndices[0];
                ListViewItem          selectedItem = listView1.Items[selectIdx];
                VariableFieldDesigner variableItem = selectedItem.Tag as VariableFieldDesigner;

                InputValueDialogForm testForm = new InputValueDialogForm("编辑", variableItem);
                if (testForm.ShowDialog() == DialogResult.OK)
                {
                    UpdateVariableFieldItem(variableItem);
                }
            }
        }
Exemplo n.º 12
0
        public void UpdateVariableFieldItem(VariableFieldDesigner variableItem)
        {
            if (variableItem == null)
            {
                return;
            }

            ListViewItem listViewItem = GetListViewItem(variableItem);

            listViewItem.Tag = variableItem;
            listViewItem.SubItems.Add(variableItem.VariableFieldType.ToString());
            listViewItem.SubItems.Add(variableItem.Value == null ? string.Empty : variableItem.Value.ToString());
            listViewItem.SubItems.Add(variableItem.Describe);

            listViewItem.Selected = true;
        }
Exemplo n.º 13
0
        public void AddVariableFieldItem(VariableFieldDesigner variableItem)
        {
            if (variableItem == null)
            {
                return;
            }

            ListViewItem listViewItem = listView1.Items.Add((listView1.Items.Count + 1).ToString());

            listViewItem.Tag = variableItem;
            listViewItem.SubItems.Add(variableItem.VariableFieldName);
            listViewItem.SubItems.Add(variableItem.VariableFieldType.ToString());
            listViewItem.SubItems.Add(variableItem.Value == null ? string.Empty : variableItem.Value.ToString());
            listViewItem.SubItems.Add(variableItem.Describe);
            listViewItem.Selected = true;
        }
        public void Remove(VariableFieldDesigner variable)
        {
            if (variable == null)
            {
                throw new Exception("VariableField为空");
            }

            for (int i = 0; i < m_VariableFields.Count; i++)
            {
                VariableFieldDesigner variableField = m_VariableFields[i];
                if (variableField == variable || variableField.VariableFieldName == variable.VariableFieldName)
                {
                    m_VariableFields.RemoveAt(i);
                    break;
                }
            }
        }
Exemplo n.º 15
0
 private void EditBehaviorTreeVar()
 {
     if (listView2.SelectedItems.Count == 1)
     {
         VariableFieldDesigner field = listView2.SelectedItems[0].Tag as VariableFieldDesigner;
         InputValueDialogForm  dlg   = new InputValueDialogForm("编辑行为树变量", listView2.SelectedItems[0].Tag);
         if (dlg.ShowDialog() == DialogResult.OK)
         {
             Exec("Refresh_BehaviorTreeVar");
             ListViewItem listViewItem = GetListViewItem(listView2, field);
             if (listViewItem != null)
             {
                 listViewItem.Selected = true;
             }
         }
     }
 }
        public bool ExistVariableStr(string variableName)
        {
            if (string.IsNullOrEmpty(variableName))
            {
                throw new Exception("变量名为空");
            }

            for (int i = 0; i < m_VariableFields.Count; i++)
            {
                VariableFieldDesigner variableField = m_VariableFields[i];
                if (variableField != null && variableField.VariableFieldName == variableName)
                {
                    return(true);
                }
            }

            return(false);
        }
        public VariableFieldDesigner Get(string variableName)
        {
            if (string.IsNullOrEmpty(variableName))
            {
                throw new Exception("变量名为空");
            }

            for (int i = 0; i < m_VariableFields.Count; i++)
            {
                VariableFieldDesigner variableField = m_VariableFields[i];
                if (variableField != null && variableField.VariableFieldName == variableName)
                {
                    return(variableField);
                }
            }

            return(null);
        }
Exemplo n.º 18
0
 private void BindBehaviorTreeVar()
 {
     listView2.Items.Clear();
     for (int i = 0; i < m_EditBehaviorTree.BehaviorTreeVariableFields.Count; i++)
     {
         VariableFieldDesigner field        = m_EditBehaviorTree.BehaviorTreeVariableFields[i];
         ListViewItem          listViewItem = listView2.Items.Add(field.VariableFieldName);
         listViewItem.Tag = field;
         listViewItem.SubItems.Add(EditorUtility.GetFieldTypeName(field.VariableFieldType));
         string content = string.Empty;
         if (field.Value != null)
         {
             content += field.Value;
         }
         listViewItem.SubItems.Add(content);
         listViewItem.SubItems.Add(field.Describe);
     }
 }
Exemplo n.º 19
0
        private void NewBehaviorTreeVar()
        {
            VariableFieldDesigner field = new VariableFieldDesigner();
            InputValueDialogForm  form  = new InputValueDialogForm("添加行为树变量", field);

            if (form.ShowDialog() == DialogResult.OK)
            {
                if (m_EditBehaviorTree.AddBehaviorTreeVar(field))
                {
                    Exec("Refresh_BehaviorTreeVar");
                    ListViewItem listViewItem = GetListViewItem(listView2, field);
                    if (listViewItem != null)
                    {
                        listViewItem.Selected = true;
                    }
                }
            }
        }
        public void Remove(string variableName)
        {
            if (string.IsNullOrEmpty(variableName))
            {
                string msg = "变量名为空";
                MainForm.Instance.ShowMessage(msg);
                MainForm.Instance.ShowInfo(msg);
                return;
            }

            for (int i = 0; i < m_VariableFields.Count; i++)
            {
                VariableFieldDesigner variableField = m_VariableFields[i];
                if (variableField.VariableFieldName == variableName)
                {
                    m_VariableFields.RemoveAt(i);
                    break;
                }
            }
        }
Exemplo n.º 21
0
        /// <summary>
        /// 添加行为树变量
        /// </summary>
        /// <param name="field">行为树变量</param>
        /// <returns></returns>
        public bool AddBehaviorTreeVar(VariableFieldDesigner field)
        {
            if (field == null)
            {
                return(false);
            }

            if (field.VariableFieldType == FieldType.None)
            {
                MainForm.Instance.ShowInfo("行为树变量类型为None,添加失败!!!");
                MainForm.Instance.ShowMessage("行为树变量类型为None,添加失败!!!", "警告");
                return(false);
            }

            if (string.IsNullOrEmpty(field.VariableFieldName))
            {
                MainForm.Instance.ShowInfo("行为树变量名为空,添加失败!!!");
                MainForm.Instance.ShowMessage("行为树变量名为空,添加失败!!!", "警告");
                return(false);
            }

            for (int i = 0; i < m_BehaviorTreeVariables.Count; i++)
            {
                VariableFieldDesigner temp = m_BehaviorTreeVariables[i];
                if (temp.VariableFieldName == field.VariableFieldName)
                {
                    MainForm.Instance.ShowInfo(string.Format("行为树变量名字{0}相同,添加失败!!!", temp.VariableFieldName));
                    MainForm.Instance.ShowMessage(string.Format("行为树变量名字{0}相同,添加失败!!!", temp.VariableFieldName), "警告");
                    return(false);
                }
            }

            m_BehaviorTreeVariables.Add(field);

            return(true);
        }
        public bool Add(VariableFieldDesigner variable)
        {
            if (variable == null)
            {
                throw new Exception("VariableField为空");
            }

            if (string.IsNullOrEmpty(variable.VariableFieldName))
            {
                string msg = "变量名为空";
                MainForm.Instance.ShowMessage(msg);
                MainForm.Instance.ShowInfo(msg);
                return(false);
            }

            if (m_VariableFields.Contains(variable))
            {
                MainForm.Instance.ShowMessage(string.Format("已存在变量:{0}", variable.VariableFieldName));
                return(false);
            }

            m_VariableFields.Add(variable);
            return(true);
        }