//这个函数展示最简单的计算 void Eval1() { CQuarkParagraph block = new CQuarkParagraph(); CQuark.CQ_Value ret = block.Execute("1+2"); Debug.Log("return = " + ret); }
//这个函数展示了先从外部向env赋值,再做计算 void Eval2() { CQuarkParagraph block = new CQuarkParagraph(); block.SetValue("HP1", 200); block.SetValue("HP2", 300); CQuark.CQ_Value d = block.Execute("HP1 + HP2 * 0.5"); Debug.Log("d = " + d); CQuark.CQ_Value f = block.Execute("HP1 + HP2 * 0.5f"); Debug.Log("f = " + f); }
//这个函数展示了执行一个函数块,且函数块再调用Unity的Debug类 void Execute1() { CQuarkParagraph block = new CQuarkParagraph(); block.Execute( "int a = 2;\n" + "if(a == 0)\n" + "UnityEngine.Debug.Log(\"a is zero!\");\n" + "else\n" + "UnityEngine.Debug.Log(\"a is not zero!\");"); }
// 这个函数展示了如何执行一个文件(作为函数块) void ExecuteFile() { CQuarkParagraph block = new CQuarkParagraph(); block.SetValue("HP1", 200); block.SetValue("HP2", 300); string text = LoadMgr.LoadFromStreaming(m_blockFilePath); CQuark.CQ_Value obj = block.Execute(text); Debug.Log("result = " + obj); }
//这个函数展示了执行一个函数块 void ExecuteBlock() { string method = "string ret = \"\";\n" + "for(int i = 0; i < 10; i++){\n" + "ret = ret + i;\n" + "};\n" + "return ret"; CQuarkParagraph block = new CQuarkParagraph(); CQuark.CQ_Value s = block.Execute(method); Debug.Log(s); }
//这个函数展示了执行一个函数块,且函数块再调用一个方法 void Execute2() { CQuarkParagraph block = new CQuarkParagraph(); CQuark.CQ_Value ret = block.Execute( // "UnityEngine.Debug.Log(\"V\" + (UnityEngine.Vector3.up + UnityEngine.Vector3.back));\n" + // "UnityEngine.Debug.Log(UnityEngine.Vector3.up.ToString());\n" + //TODO 括号的识别有问题 "UnityEngine.Debug.Log((UnityEngine.Vector3.up + UnityEngine.Vector3.back).ToString());\n" + "UnityEngine.Debug.Log(\"Today is \" + Demo2.Today());\n" + "return Demo2.Today();"); // "Debug.Log(\"V\" + (Vector3.up + Vector3.back));\n" + // "Debug.Log(\"Today is \" + Demo2.Today());\n" + // "return Demo2.Today();"); Debug.Log("return = " + ret); }
void OnGUI() { if (GUI.Button(new Rect(0, 0, 200, 50), "Eval use String")) { string callExpr = "ScriptClass4 sc =new ScriptClass4();\n" + "sc.defHP1=100;\n" + "sc.defHP2=200;\n" + "return sc.GetHP();"; CQuarkParagraph block = new CQuarkParagraph(); CQuark.CQ_Value i = block.Execute(callExpr); result = "result=" + i; } if (GUI.Button(new Rect(200, 0, 200, 50), "Eval use Code")) { //得到类型 CQuark.IType typeOfScript = CQuark.AppDomain.GetTypeByKeyword("ScriptClass4"); CQuark.CQ_Content content = new CQuark.CQ_Content(); //调用脚本类构造创造一个实例 var thisOfScript = typeOfScript._class.New(content, new CQuark.CQ_Value[0]).GetObject(); //调用脚本类成员变量赋值 //Debug.LogWarning(thisOfScript+","+ typeOfScript+","+ typeOfScript.function); CQuark.CQ_Value v1 = new CQuark.CQ_Value(); v1.SetNumber(typeof(int), 150); CQuark.CQ_Value v2 = new CQuark.CQ_Value(); v2.SetNumber(typeof(int), 300); typeOfScript._class.MemberValueSet(content, thisOfScript, "defHP1", v1); typeOfScript._class.MemberValueSet(content, thisOfScript, "defHP2", v2); //调用脚本类成员函数 var returnvalue = typeOfScript._class.MemberCall(content, thisOfScript, "GetHP", new CQuark.CQ_Value[0]); result = "result=" + returnvalue; } GUI.Label(new Rect(0, 50, 200, 50), result); }