Пример #1
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            //定义事件
            GameEvent evt = new GameEvent(2);

            //创建一个空的表达式
            Exp exp = ExpManager.CreateNewExp(TypeDefine.NilType);

            //手工创建一个完整的表达式
            ActionExp expa = new ActionExp();

            expa.ReturnType       = exp.ReturnType;
            expa.strText          = "设置 使用者 等于 true";
            expa.API              = new GameAPI(1);
            expa.API.ArgValues[0] = evt.GetArgExp(1);
            expa.API.ArgValues[1] = new ConstExp("true", TypeDefine.BoolType);

            Application.Run(new ExpForm(expa, evt, true, expa.ReturnType, null));
        }
Пример #2
0
        //根据表达式显示标签
        public void SetComboText(ActionExp expAction, GameEvent gameEvent)
        {
            Trace.Assert(expAction != null);
            Trace.Assert(gameEvent != null);
            this.m_eventDefine = gameEvent;
            this.m_actionExp   = expAction;
            GameAPI api = expAction.API;

            this.Controls.Clear();
            isReady                 = true;
            m_actionExp.strText     = "";
            m_actionExp.strFullText = "";

            string strComboText = "}" + api.combText;

            string[] tmp = strComboText.Split(new string[] { "{" }, StringSplitOptions.None);
            for (int i = -1; i < tmp.Length - 1; i++)
            {
                string[] strcs = tmp[i + 1].Split(new string[] { "}" }, StringSplitOptions.None);

                //添加热文本
                if (strcs[0] != "")
                {
                    LinkLabel link = new LinkLabel();
                    link.Margin   = new System.Windows.Forms.Padding(0);
                    link.AutoSize = true;
                    link.Tag      = new Hashtable();
                    int nReali = Convert.ToInt32(strcs[0].ToString()) - 1;

                    TypeDefine typed = api.ArgList[nReali].ArgType;
                    if (typed.isEnum || typed.DBID == FixedValueProvider.TYPE_STRING_ID)
                    {
                        //右键菜单
                        ConstExp[] exps = ExpManager.ScanConstantFromHistory(typed);
                        if (exps.Length > 0)
                        {
                            link.ContextMenu = new ContextMenu();
                            for (int it = 0; it < exps.Length; it++)
                            {
                                MenuItem mi = new MenuItem(exps[it].ToString());
                                mi.Tag    = new object[] { nReali, exps[it] };
                                mi.Click += new EventHandler(mi_Click);
                                link.ContextMenu.MenuItems.Add(mi);
                            }
                        }
                    }

                    if (/*api.ArgValues.Count <= i || */ api.ArgValues[nReali] == null)
                    {
                        link.Text      = "<" + api.ArgList[nReali].ArgName + ">";
                        link.LinkColor = Color.Red;
                        (link.Tag as Hashtable)["exp"] = ExpManager.CreateNewExp(api.ArgList[nReali].ArgType);
                        (link.Tag as Hashtable)["pos"] = nReali;
                        isReady = false;
                    }
                    else
                    {
                        link.Text      = api.ArgValues[nReali].ToString();
                        link.LinkColor = Color.Blue;
                        (link.Tag as Hashtable)["exp"] = api.ArgValues[nReali];
                        (link.Tag as Hashtable)["pos"] = nReali;
                    }

                    link.MouseClick     += new MouseEventHandler(link_MouseClick);
                    link.PreviewKeyDown += new PreviewKeyDownEventHandler(link_PreviewKeyDown);
                    this.Controls.Add(link);

                    //追加到显示内容区域
                    //if(link.Text.Length > 25)
                    //    m_actionExp.strText += link.Text.Substring(0,23) + "...";
                    //else
                    //    m_actionExp.strText += link.Text + "";
                    m_actionExp.strText     += link.Text;
                    m_actionExp.strFullText += link.Text;
                }

                //正常文本
                if (strcs[1] != "")
                {
                    Label l = new Label();
                    l.Margin   = new System.Windows.Forms.Padding(0);
                    l.AutoSize = true;
                    l.Text     = strcs[1];
                    this.Controls.Add(l);
                    m_actionExp.strText     += l.Text + "";
                    m_actionExp.strFullText += l.Text;
                    l.Text = l.Text.Replace("\r\n", "");
                }
            }

            //添加换行
            Control br = new Label();

            br.Width  = this.Width - 23;
            br.Height = 0;
            this.Controls.Add(br);

            //添加Tip注释
            Control ltip = new Label();

            ltip.Text      = "\r\n" + expAction.API.strTip;
            ltip.ForeColor = Color.Gray;
            ltip.AutoSize  = true;
            this.Controls.Add(ltip);

            //专门处理比较API
            if (expAction.API.DBID == FixedValueProvider.COMPARE_API_ID)
            {
                LinkLabel left    = this.Controls[0] as LinkLabel;
                LinkLabel right   = this.Controls[2] as LinkLabel;
                Hashtable htleft  = left.Tag as Hashtable;
                Hashtable htright = right.Tag as Hashtable;
                if (left.LinkColor == Color.Red)
                {
                    //左值类型清空
                    htleft["exp"] = ExpManager.CreateUnknownExp();

                    //右侧变灰
                    right.LinkColor = Color.Gray;
                }
                else
                {
                    //右侧的类型跟左侧走
                    (htright["exp"] as Exp).ReturnType = (htleft["exp"] as Exp).ReturnType;

                    //右侧变红
                    if ((htright["exp"] as Exp).strText == null)
                    {
                        right.LinkColor = Color.Red;
                    }
                }
            }
        }