Пример #1
0
        /// <summary>
        /// 获取Tip字符串
        /// </summary>
        /// <returns>Tip字符串</returns>
        public string ToFullText()
        {
            if (Action == null || Action.Name == null || Action.Ename == null)
            {
                return("");
            }

            StringBuilder description = new StringBuilder();

            description.AppendLine("<bold>参数");

            for (int i = 0; i < Action.Args.Count; i++)
            {
                AI_Parm parm = Action.Args[i];

                description.AppendLine(string.Format("{0}:{1}", parm.Name, parm.Value.ToString()));
            }

            description.AppendLine("<split>");

            string[] returnInfo = Action.rettype.Split(new char[] { ',' });
            description.AppendLine("<bold>返回值");

            for (int i = 0; i < returnInfo.Length; i++)
            {
                description.AppendLine(string.Format("{0}:{1}", i + 1, returnInfo[i]));
            }

            return(description.ToString());
        }
Пример #2
0
        /// <summary>
        /// 检查是否需要重新编辑
        /// </summary>
        /// <returns>是否需要重新编辑</returns>
        public bool RequestEdit()
        {
            bool      result = false;
            AI_Action action = ActionTable.FindItemByDBID(this.DBID);

            if (action != null)
            {
                if (this.Args.Count == action.Args.Count)
                {
                    for (int i = 0; i < this.Args.Count; i++)
                    {
                        AI_Parm parameter1 = this.Args[i];
                        AI_Parm parameter2 = action.Args[i];

                        if (parameter1.m_type != parameter2.m_type)
                        {
                            result = true;
                            break;
                        }
                    }
                }
                else
                {
                    result = true;
                }
            }

            return(result);
        }
Пример #3
0
        /// <summary>
        /// 复制参数
        /// </summary>
        /// <returns>参数副本</returns>
        public object Clone()
        {
            AI_Parm newParm = new AI_Parm(this.Name, this.m_Value, this.m_type, this.m_IsTemplateParm);

            newParm.IsVar = isVar;

            return(newParm);
        }
Пример #4
0
        /// <summary>
        /// 复制参数
        /// </summary>
        /// <returns>参数副本</returns>
        public object Clone()
        {
            AI_Parm newParm = new AI_Parm(this.Name, this.m_Value, this.m_type, this.m_IsTemplateParm);
            newParm.IsVar = isVar;

            return newParm;
        }
Пример #5
0
        /// <summary>
        /// 显示AI动作的数据
        /// </summary>
        /// <param name="action">AI动作</param>
        private void ShowActionData(AI_Action action)
        {
            this.textBoxX1.Text = action.Info;

            for (int i = 0; i < 5; i++)
            {
                // 多余的参数,禁止掉
                if (i >= action.Args.Count)
                {
                    labelArray[i].Text       = "-";
                    comboBoxArray[i].Text    = "";
                    comboBoxArray[i].Enabled = false;
                    checkBoxArray[i].Checked = false;
                    checkBoxArray[i].Enabled = false;
                }
                else
                {
                    AI_Parm parm = action.Args[i];

                    // 步骤1:初始化枚举(常数)列表 如果是枚举,则添加枚举项进来。
                    comboBoxArray[i].Enabled = true;
                    comboBoxArray[i].Items.Clear();

                    if (parm.m_type > 0)
                    {
                        comboBoxArray[i].Items.AddRange(EnumTable.GetEnumTypeByID(parm.m_type.ToString()).Items.ToArray());
                    }

                    // 改标签
                    string strLab = null;

                    switch (parm.m_type)
                    {
                    case -1:
                    {
                        strLab = "数字";

                        // 目前只支持数字的变量类型
                        checkBoxArray[i].Enabled = true;

                        break;
                    }

                    case -2:
                    {
                        strLab = "字符串";

                        // 暂时不支持字符串的变量类型
                        checkBoxArray[i].Enabled = false;

                        break;
                    }

                    default:
                    {
                        strLab = "枚举";

                        // 暂时不支持枚举的变量类型
                        checkBoxArray[i].Enabled = false;

                        break;
                    }
                    }

                    if (parm.Name.Length > 10)
                    {
                        labelArray[i].Text = string.Format("{0}... ({1})", parm.Name.Substring(0, 8), strLab);
                    }
                    else
                    {
                        labelArray[i].Text = string.Format("{0} ({1})", parm.Name, strLab);
                    }

                    // 步骤2:初始化 模板参数,如果定义了这种类型的模板变量,就加进来。
                    comboBoxArray[i].Items.AddRange(AI_TemplateParmTable.GetAIParamTemplateTable().AIParamItemList.ToArray());

                    // 步骤3:设值
                    if (parm.Value != null)
                    {
                        comboBoxArray[i].Text = parm.Value.ToString();
                    }
                    else
                    {
                        comboBoxArray[i].Text = "";
                    }

                    // 步骤4:读取参数类型
                    checkBoxArray[i].Checked = parm.IsVar;
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 选择确定
        /// </summary>
        /// <param name="sender">事件发送者</param>
        /// <param name="e">事件参数</param>
        private void buttonX1_Click(object sender, EventArgs e)
        {
            AI_Action newAction = null;

            if (tabControl1.SelectedTabIndex == 0) // 选择系统Action
            {
                Node currentNode = actionTree.SelectedNode;

                if (currentNode != null && currentNode.Level == 1)
                {
                    AI_Action selectedAction = actionTable[currentNode.Tag.ToString()] as AI_Action;

                    if (selectedAction != null)
                    {
                        // 第一步,检查输入数据正确性
                        for (int i = 0; i < selectedAction.Args.Count; i++)
                        {
                            if (!CheckParameterValid(selectedAction.Args[i].m_type, comboBoxArray[i].Text, checkBoxArray[i].Checked))
                            {
                                MessageBox.Show(string.Format("{0}参数值无效!", labelArray[i].Text), "参数检查",
                                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                                comboBoxArray[i].Focus();

                                return;
                            }
                        }

                        // 第二步,把输入数据存到Action里
                        newAction = selectedAction.Clone() as AI_Action;

                        for (int i = 0; i < newAction.Args.Count; i++)
                        {
                            AI_Parm parm      = newAction.Args[i];
                            object  objSelect = comboBoxArray[i].SelectedItem;

                            if (comboBoxArray[i].Text.StartsWith("<") && comboBoxArray[i].Text.EndsWith(">")) // 模板参数
                            {
                                if (checkBoxArray[i].Checked)
                                {
                                    MessageBox.Show("模板参数不能为变量类型!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    comboBoxArray[i].Focus();

                                    return;
                                }

                                parm.m_IsTemplateParm = true;
                                AI_TemplateParmItem tpitem = objSelect as AI_TemplateParmItem;

                                if (objSelect == null)
                                {
                                    MessageBox.Show("参数错误", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    comboBoxArray[i].Focus();

                                    return;
                                }

                                int index = AI_TemplateParmTable.GetAIParamTemplateTable().GetAIParamIndex(tpitem.Name);
                                parm.SetTemplateValue(index.ToString());
                            }
                            else // 非模板参数
                            {
                                parm.m_IsTemplateParm = false;

                                if (objSelect == null) // 是填的,不是选的,那就是字符串或者数字了
                                {
                                    parm.m_Value = comboBoxArray[i].Text;
                                }
                                else if (objSelect is EnumItem) // 是枚举
                                {
                                    EnumItem ei = objSelect as EnumItem;
                                    parm.m_Value = ei.m_asParentsPos.ToString();
                                }
                            }

                            // 记录下是否是变量类型
                            parm.IsVar = checkBoxArray[i].Checked;
                        }
                    }
                }
                else
                {
                    MessageBox.Show("请先选择动作!", "参数检查", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
            }
            else // 选择自定义Action
            {
                string functionName = actionNameBox.Text;
                string functionText = codeEditBox.Text;
                string returnValue  = "";

                if (functionName == "")
                {
                    MessageBox.Show("动作名不能为空!", "参数检查", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                if (functionText == "")
                {
                    MessageBox.Show("自定义脚本不能为空!", "参数检查", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                for (int i = 0; i < 3; i++)
                {
                    if (returnValueBoxArray[i].Text.Trim() != "")
                    {
                        returnValue += string.Format("{0},", returnValueBoxArray[i].Text.Trim());
                    }
                    else
                    {
                        break;
                    }
                }
                returnValue = returnValue.TrimEnd(new char[] { ',' });

                if (returnValue == "")
                {
                    MessageBox.Show("至少需要有一个返回值!", "参数检查", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                int actionID = graphElementID + 2000;

                if (inActionGroup) // 动作组内的自定义动作需要重新分配ID
                {
                    actionID = (graphElementID + 2000) * 10 + groupIndex;
                }

                string englishName = GetFunctionName(functionText);

                if (!CheckScriptValid(functionText)) // 检查脚本有效性
                {
                    MessageBox.Show("脚本必须在最后明确返回执行结果(如:return 1)!", "脚本检查", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                if (!AIDiagramHelper.CheckScript(codeEditBox, functionText)) // 没有通过脚本检查
                {
                    if (MessageBox.Show("没有通过脚本检查,是否重新编辑脚本?", "脚本检查",
                                        MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        return;
                    }
                }

                newAction          = new AI_Action();
                newAction.ActionID = actionID.ToString();
                newAction.Name     = functionName;
                newAction.Info     = functionText;
                newAction.Ename    = englishName;
                newAction.Args     = new List <AI_Parm>();
                newAction.rettype  = returnValue;
            }

            singleAction.Action = newAction;
            editSuccess         = true;
            this.DialogResult   = DialogResult.OK;
            this.Close();
        }