using XLua; using System; #if !XLUA_GENERAL using UnityEngine; #endif [LuaCallCSharp] public class LongStatic { public static long LONG_MAX = System.Int64.MaxValue; public static ulong ULONG_MAX = System.UInt64.MaxValue; } [LuaCallCSharp] public enum LuaTestType { ABC = 0, DEF, GHI, JKL }; [LuaCallCSharp] public enum FirstPushEnum { E1 }; [CSharpCallLua] public delegate int TestDelegate(int x); [CSharpCallLua] public delegate int TestEvtHandler1(float y); [CSharpCallLua] public delegate int TestEvtHandler2(byte y, float z); [LuaCallCSharp] public class LuaTestObj { public static LuaEnv luaEnv = LuaEnvSingletonForTest.Instance; public int testVar { get; set; } public int[] testArr = new int[3]; public static LuaTestObj operator + (LuaTestObj a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar + b.testVar; return ret; } public static LuaTestObj operator +(LuaTestObj a, int b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar + b; return ret; } public static LuaTestObj operator +(int a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a + b.testVar; return ret; } public static LuaTestObj operator - (LuaTestObj a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar - b.testVar; return ret; } public static LuaTestObj operator -(LuaTestObj a, int b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar - b; return ret; } public static LuaTestObj operator -(int a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a - b.testVar; return ret; } public static LuaTestObj operator * (LuaTestObj a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar * b.testVar; return ret; } public static LuaTestObj operator *(LuaTestObj a, int b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar * b; return ret; } public static LuaTestObj operator *(int a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a * b.testVar; return ret; } public static LuaTestObj operator /(LuaTestObj a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar / b.testVar; return ret; } public static LuaTestObj operator /(LuaTestObj a, int b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar / b; return ret; } public static LuaTestObj operator /(int a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a / b.testVar; return ret; } public static LuaTestObj operator % (LuaTestObj a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar % b.testVar; return ret; } public static LuaTestObj operator %(int a, LuaTestObj b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a % b.testVar; return ret; } public static LuaTestObj operator %(LuaTestObj a, int b) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar % b; return ret; } public static LuaTestObj operator - (LuaTestObj a) { LuaTestObj ret = new LuaTestObj(); ret.testVar = a.testVar * (-1); return ret; } public static bool operator < (LuaTestObj a, LuaTestObj b) { return (a.testVar < b.testVar); } public static bool operator <= (LuaTestObj a, LuaTestObj b) { return (a.testVar <= b.testVar); } public static bool operator > (LuaTestObj a, LuaTestObj b) { return (a.testVar > b.testVar); } public static bool operator >=(LuaTestObj a, LuaTestObj b) { return (a.testVar >= b.testVar); } public int this[int i] { get { return testArr[i]; } set { testArr[i] = value; } } public event TestEvtHandler1 TestEvent1; public event TestEvtHandler2 TestEvent2; public static event TestEvtHandler1 TestStaticEvent1; public int CallEvent(float y) { return TestEvent1(y); } public static int CallStaticEvent(float y) { return TestStaticEvent1(y); } public static int DefaultParaFuncSingle(int i, string str = "abc") { return i; } public static int DefaultParaFuncMulti(int i, string str = "abc", double d = 0, byte c = 97) { return (i + 1); } public static int VariableParamFunc(int i, params string[] strs) { return 0; } public static int VariableParamFunc2(params int[] strs) { return strs.Length; } public static int TestEnumFunc(LuaTestType x) { return (int)x; } public static string TestGetType(Type x) { return x.ToString (); } public static ulong ulX1 = 1; public static ulong ulX2 = 1; public static long lY1 = 1; public static long lY2 = 1; public static Int64 i64Z1 = 1; public static Int64 i64Z2 = 1; public static long lY3 = 1; public static long lY4 = 123; public static long lY5 = 12345; public static long lY6 = 54321; public static void Gen64BitInt() { ulX1 = ulX2 = 1; lY1 = lY2 = lY3 = 1; i64Z1 = i64Z2 = 1; ulX1 = ulX1 << 62; ulX2 = ulX2 << 61; lY1 = lY1 << 62; lY2 = lY2 << 61; i64Z1 = i64Z1 << 62; i64Z2 = i64Z2 << 61; lY3 = lY3 << 50; } public static ITestLuaClass CreateTestLuaObj() { return new TestLuaClass (); } public static TestDelegate csDelegate; public static TestDelegate csDelegate1; public static TestDelegate csDelegate2; public static TestDelegate csDelegate3; public static TestDelegate csDelegate4; public static TestDelegate csDelegate11; public static TestDelegate csDelegate12; public static TestDelegate csDelegate13; public static int initNumber = 5; public static int CalcAdd(int x) { initNumber += x; return initNumber; } public static int calcadd(int x) { initNumber += x; return initNumber; } public static int CalcDel(int x) { initNumber -= x; return initNumber; } public static int CalcMul(int x) { initNumber *= x; return initNumber; } public static void GenDelegate() { csDelegate1 = new TestDelegate(CalcAdd); csDelegate2 = new TestDelegate(CalcDel); csDelegate3 = new TestDelegate(CalcMul); } public static int OverLoad1(int x, int y) { return 1; } public static int OverLoad1(int x) { return 2; } public static int OverLoad1(params int[] vars) { int ret = 0; foreach (int var in vars) { ret += var; } return ret; } public static int OverLoad2(int x, float y) { return 3; } public static int OverLoad2(string x, string y) { return 4; } public static int OverLoad3(int x) { return 5; } public static int OverLoad3(short y) { return 6; } public static void OutRefFunc1(int x, out int y, ref int z) { y = 100; } public static void OutRefFunc2(ref int x, int y, out int z) { z = 200; } public static void OutRefFunc3(int x, out int y, ref int z) { y = 300; } public static int OutRefFunc4(int x, out int y, ref int z) { y = 400; return y; } public static int OutRefFunc5(ref int x, int y, out int z) { z = 500; return z; } public static int OutRefFunc6(int x, int y) { return 600; } public static void OutRefFunc11(ITestLuaClass x, out ITestLuaClass y, ref ITestLuaClass z) { y = CreateTestLuaObj(); y.cmpTarget = 100; } public static void OutRefFunc12(ref ITestLuaClass x, ITestLuaClass y, out ITestLuaClass z) { z = CreateTestLuaObj(); z.cmpTarget = 200; } public static void OutRefFunc13(ITestLuaClass x, out ITestLuaClass y, ref ITestLuaClass z) { y = CreateTestLuaObj(); y.cmpTarget = 300; } public static int OutRefFunc14(ITestLuaClass x, out ITestLuaClass y, ref ITestLuaClass z) { y = CreateTestLuaObj(); y.cmpTarget = 400; return y.cmpTarget; } public static int OutRefFunc15(ref ITestLuaClass x, ITestLuaClass y, out ITestLuaClass z) { z = CreateTestLuaObj(); z.cmpTarget = 500; return z.cmpTarget; } public static int OutRefFunc16(ITestLuaClass x, ITestLuaClass y) { return 600; } public static void OutRefFunc21(TestDelegate x, out TestDelegate y, ref TestDelegate z) { y = new TestDelegate(CalcAdd); } public static void OutRefFunc22(ref TestDelegate x, TestDelegate y, out TestDelegate z) { z = new TestDelegate(CalcAdd); } public static void OutRefFunc23(TestDelegate x, out TestDelegate y, ref TestDelegate z) { y = new TestDelegate(CalcAdd); } public static int OutRefFunc24(TestDelegate x, out TestDelegate y, ref TestDelegate z) { y = new TestDelegate(CalcAdd); return y(1); } public static int OutRefFunc25(ref TestDelegate x, TestDelegate y, out TestDelegate z) { z = new TestDelegate(CalcAdd); return z(1); } public static int OutRefFunc26(TestDelegate x, TestDelegate y) { return 600; } public int Sum(int a, int b, int c) { return a + b + c; } public static int Sum(int a, int b) { return a + b; } public void GenericMethod() { LuaTestCommon.Log("GenericMethod<" + typeof(T) +">"); } public IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(100); public IntPtr GetPtr() { byte[] abc = new byte[] { 97, 98, 99 }; System.Runtime.InteropServices.Marshal.Copy(abc, 0, ptr, abc.Length); return ptr; } public byte PrintPtr(IntPtr p) { LuaTestCommon.Log("p == ptr?" + (p == ptr)); byte[] abc = new byte[] { 0, 0, 0 }; System.Runtime.InteropServices.Marshal.Copy(p, abc, 0, abc.Length); LuaTestCommon.Log(string.Format("{0},{1},{2}", abc[0], abc[1], abc[2])); return abc[0]; } public int VariableParamFuncDefault(int d, int i = 1, params string[] strs) { return i + d; } public static double StaticVariableParamFuncDefault(double d, double i = 1.0, params string[] strs) { return i + d; } public static byte[] FuncReturnByteArray() { byte[] abc = new byte[] { 97, 98, 99 }; return abc; } public static byte FuncReturnByte() { byte abc = 97; return abc; } public static int[] FuncReturnIntArray() { int[] abc = new int[] { 97, 98, 99 }; return abc; } public static int FuncReturnInt() { int abc = 97; return abc; } #if !XLUA_GENERAL public static LayerMask TestImplicit() { return new LayerMask(); } #endif public static int VariableParamFunc(int i, params int[] strs) { return 0; } public static string FirstPushEnumFunc(int i) { string luaScript = @" function first_push(t,obj) if t==1 then if obj == CS.FirstPushEnum.E1 then return 1 else return 2 end elseif t==2 then if obj == CS.FirstPushEnum.self then return 3 else return 4 end else return 5 end end"; luaEnv.DoString(luaScript); LuaFunction f1 = luaEnv.Global.Get("first_push"); LuaTestCommon.Log("LuaFunction<" + f1); object[] ret = f1.Call(i, FirstPushEnum.E1); return ret[0].ToString(); } } [LuaCallCSharp] public class TestCastClass { public bool TestFunc1() { return true; } } [LuaCallCSharp] public interface ITestLuaClass { bool TestFunc1(); int cmpTarget{ set; get; } } internal class TestLuaClass : ITestLuaClass { public bool TestFunc1() { return true; } public int cmpTarget { set; get; } } [LuaCallCSharp] public class TestChineseString { public string GetShortChinString() { return short_simple_string; } public string GetLongChineString() { return long_simple_string; } public string GetCombineString() { return combine_string; } public string GetComplexString() { return complex_string; } public string GetHuoxingString() { return huoxing_string; } public string short_simple_string = "中文字符串"; public string long_simple_string = "为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更新的可能,支持lua的所有基本类型,哈哈哈哈"; public string combine_string = "中文字符串.* ? [ ] ^ $~`!@#$%^&()_-+=[];',““〈〉〖【℃ $ ¤№ ☆ ★■ⅷ②㈣12345abc"; public string complex_string = "繁體國陸"; public string huoxing_string = "吙煋呅僦媞這樣孒"; } public class TestUlongAndLongType { public ulong UlongMax { get { return ulong_max; } set { ulong_max=value; } } public ulong UlongMin { get { return ulong_min; } set { ulong_min=value; } } public ulong UlongMid { get { return ulong_mid; } set { ulong_mid=value; } } public ulong UlongAdd() { return ulong_max - 1000 + 1; } public long LongMax { get { return long_max; } set { long_max=value; } } public long LongMin { get { return long_min; } set { long_min=value; } } public long LongMid { get { return long_mid; } set { long_mid=value; } } public long LongAdd() { return long_max - 1000 + 1; } ulong ulong_max = System.UInt64.MaxValue; ulong ulong_min = System.UInt64.MinValue; ulong ulong_mid = 9223372036854775808; long long_max = System.Int64.MaxValue; long long_min = System.Int64.MinValue; long long_mid = 4611686018427387904; } [LuaCallCSharp] public struct Employeestruct { private string name; public string Name { get { return name; } set { name = value; } } private int age; public int Age { get { return age; } set { age = value; } } private int salary; private int annual_bonus; public int Salary { get { return salary; } set { salary = value; } } public int AnnualBonus { get { return annual_bonus; } set { annual_bonus = value; } } } public struct ConStruct{ public int x; public int y; public string z; public ConStruct(int x, int y, string z) { this.x = x; this.y = y; this.z = z; } } [GCOptimize] [LuaCallCSharp] public struct StaticPusherStructA { public byte byteVar; public sbyte sbyteVar; public StaticPusherStructA(byte a, sbyte b) { this.byteVar = a; this.sbyteVar = b; } } [GCOptimize] [LuaCallCSharp] public struct StaticPusherStructB { public short shortVar; public ushort ushortVar; public int intVar; public uint uintVar; public StaticPusherStructB(short a, ushort b, int c, uint d) { this.shortVar = a; this.ushortVar = b; this.intVar = c; this.uintVar = d; } } [GCOptimize] [LuaCallCSharp] public struct StaticPusherStructAll { public long longVar; public ulong ulongVar; public float floatVar; public double doubleVar; public StaticPusherStructA structA; public StaticPusherStructB structB; } public interface ITest { int Add(int x,int y); } public struct NoGenCodeStruct:ITest{ private byte byte_var; private short short_var; private ushort ushort_var; private int int_var1; private int int_var2; private uint uint_var; private long long_var; private ulong ulong_var; private double double_var; private float float_var; private char char_var; private decimal decimal_var; private string string_var; public byte Byte { get { return byte_var; } set { byte_var = value; } } public short Short { get { return short_var; } set { short_var = value; } } public ushort UShort { get { return ushort_var; } set { ushort_var = value; } } public int IntVar1 { get { return int_var1; } set { int_var1 = value; } } public int IntVar2 { get { return int_var2; } set { int_var2 = value; } } public uint UInt { get { return uint_var; } set { uint_var = value; } } public long Long { get { return long_var; } set { long_var = value; } } public ulong ULong { get { return ulong_var; } set { ulong_var = value; } } public double Double { get { return double_var; } set { double_var = value; } } public float Float { get { return float_var; } set { float_var = value; } } public char Char { get { return char_var; } set { char_var = value; } } public decimal Decimal { get { return decimal_var; } set { decimal_var = value; } } public string String { get { return string_var; } set { string_var = value; } } public int Add(int x, int y) { return x + y; } private ConStruct con; public ConStruct IncludeStruct { get { return con; } set { con = value; } } } public class NoGenCodeBaseClass { public NoGenCodeStruct InitStruct(out int add){ struct_var.Byte = 10; struct_var.Char = 'a'; struct_var.Decimal = 12.33333333m; struct_var.Double = 10.111111111111; struct_var.Float = 11.1234f; struct_var.IntVar1 = 12345678; struct_var.IntVar2 = -12345678; struct_var.Long = System.Int64.MaxValue; struct_var.ULong = System.UInt64.MaxValue; struct_var.Short = 123; struct_var.String = "just for test"; struct_var.UInt = 12345; struct_var.UShort = 255; struct_var.IncludeStruct = new ConStruct (1, 2, "haha"); add = struct_var.Add (struct_var.IntVar1, struct_var.IntVar2); return struct_var; } public void SetStruct(ref NoGenCodeStruct var, out NoGenCodeStruct value) { struct_var.Byte = var.Byte; struct_var.Char = var.Char; struct_var.Decimal = var.Decimal; struct_var.Double = var.Double; struct_var.Float = var.Float; struct_var.IntVar1 = var.IntVar1; struct_var.IntVar2 = var.IntVar2; struct_var.Long = var.Long; struct_var.ULong = var.ULong; struct_var.Short = var.Short; struct_var.String = var.String; struct_var.UInt = var.UInt; struct_var.UShort = var.UShort; struct_var.IncludeStruct = new ConStruct(var.IncludeStruct.x, var.IncludeStruct.y, var.IncludeStruct.z); value = struct_var; } public NoGenCodeStruct GetStruct(){ return struct_var; } public void SetStruct(GenCodeStruct var, out int add, out NoGenCodeStruct value) { struct_var.Byte = var.Byte; struct_var.Char = var.Char; struct_var.Decimal = var.Decimal; struct_var.Double = var.Double; struct_var.Float = var.Float; struct_var.IntVar1 = var.IntVar1; struct_var.IntVar2 = var.IntVar2; struct_var.Long = var.Long; struct_var.ULong = var.ULong; struct_var.Short = var.Short; struct_var.String = var.String; struct_var.UInt = var.UInt; struct_var.UShort = var.UShort; struct_var.IncludeStruct = new ConStruct(var.IncludeStruct.x, var.IncludeStruct.y, var.IncludeStruct.z); add = struct_var.Add (var.IntVar1, var.IntVar2); value = struct_var; LuaTestCommon.Log ("NoGenCodeStruct Byte:" + struct_var.Byte); LuaTestCommon.Log ("NoGenCodeStruct Char:" + struct_var.Char); LuaTestCommon.Log ("NoGenCodeStruct Decimal:" + struct_var.Decimal); LuaTestCommon.Log ("NoGenCodeStruct Double:" + struct_var.Double); LuaTestCommon.Log ("NoGenCodeStruct Float:" + struct_var.Float); LuaTestCommon.Log ("NoGenCodeStruct IntVar1:" + struct_var.IntVar1); LuaTestCommon.Log ("NoGenCodeStruct IntVar2:" + struct_var.IntVar2); LuaTestCommon.Log ("NoGenCodeStruct Long:" + struct_var.Long); LuaTestCommon.Log ("NoGenCodeStruct ULong:" + struct_var.ULong); LuaTestCommon.Log ("NoGenCodeStruct Short:" + struct_var.Short); LuaTestCommon.Log ("NoGenCodeStruct String:" + struct_var.String); LuaTestCommon.Log ("NoGenCodeStruct UInt:" + struct_var.UInt); LuaTestCommon.Log ("NoGenCodeStruct UShort:" + struct_var.UShort); LuaTestCommon.Log ("NoGenCodeStruct IncludeStruct.x:" + struct_var.IncludeStruct.x + ", IncludeStruct.y:" + struct_var.IncludeStruct.y + ", IncludeStruct.z:" + struct_var.IncludeStruct.z); } public static NoGenCodeStruct GetStaticVar() { LuaTestCommon.Log ("static struct byte:" + struct_var1.Byte); return struct_var1; } public void SetStaticPusherStruct(StaticPusherStructAll inVar, ref StaticPusherStructAll refVar, out StaticPusherStructAll outVar) { static_pushstruct_var.longVar = inVar.longVar + refVar.longVar; static_pushstruct_var.ulongVar = inVar.ulongVar + refVar.ulongVar; static_pushstruct_var.floatVar = inVar.floatVar + refVar.floatVar; static_pushstruct_var.doubleVar = inVar.doubleVar + refVar.doubleVar; static_pushstruct_var.structA.byteVar = 10; static_pushstruct_var.structA.sbyteVar = 100; static_pushstruct_var.structB.intVar = inVar.structB.intVar + refVar.structB.intVar; static_pushstruct_var.structB.uintVar = inVar.structB.uintVar + refVar.structB.uintVar; static_pushstruct_var.structB.shortVar = refVar.structB.shortVar; static_pushstruct_var.structB.ushortVar = inVar.structB.ushortVar; outVar = static_pushstruct_var; refVar.longVar = refVar.longVar - 1; refVar.ulongVar = refVar.ulongVar - 1; refVar.floatVar = refVar.floatVar - 1.0f; refVar.doubleVar = refVar.doubleVar - 1.0; refVar.structA.byteVar = 98; refVar.structA.sbyteVar = 101; refVar.structB.intVar = refVar.structB.intVar + 1; refVar.structB.uintVar = refVar.structB.uintVar + 1; refVar.structB.shortVar = inVar.structB.shortVar; refVar.structB.ushortVar = inVar.structB.ushortVar; } private NoGenCodeStruct struct_var; public static NoGenCodeStruct struct_var1; public static ConStruct struct_var2 = new ConStruct (3, 4, "enen"); public static int GBS = 1; public StaticPusherStructAll static_pushstruct_var; } public class NoGenCodeDrivedClass:NoGenCodeBaseClass { public ConStruct SimpleConStruct { get { return simple_struct; } set { simple_struct = value; } } public int Add(int x, int y) { return x + y; } public void Add(ConStruct invar, ref ConStruct refvar, out ConStruct outvar) { outvar = invar; outvar.x = invar.x + refvar.x; refvar.x = invar.x; } private ConStruct simple_struct; } [LuaCallCSharp] public struct HasConstructStruct{ public int x; public int y; public string z; public HasConstructStruct(int x, int y, string z) { this.x = x; this.y = y; this.z = z; } } [LuaCallCSharp] public interface IGenCodeTest { int Add(int x,int y); } [LuaCallCSharp] public struct GenCodeStruct:IGenCodeTest{ private byte byte_var; private short short_var; private ushort ushort_var; private int int_var1; private int int_var2; private uint uint_var; private long long_var; private ulong ulong_var; private double double_var; private float float_var; private char char_var; private decimal decimal_var; private string string_var; public byte Byte { get { return byte_var; } set { byte_var = value; } } public short Short { get { return short_var; } set { short_var = value; } } public ushort UShort { get { return ushort_var; } set { ushort_var = value; } } public int IntVar1 { get { return int_var1; } set { int_var1 = value; } } public int IntVar2 { get { return int_var2; } set { int_var2 = value; } } public uint UInt { get { return uint_var; } set { uint_var = value; } } public long Long { get { return long_var; } set { long_var = value; } } public ulong ULong { get { return ulong_var; } set { ulong_var = value; } } public double Double { get { return double_var; } set { double_var = value; } } public float Float { get { return float_var; } set { float_var = value; } } public char Char { get { return char_var; } set { char_var = value; } } public decimal Decimal { get { return decimal_var; } set { decimal_var = value; } } public string String { get { return string_var; } set { string_var = value; } } public int Add(int x, int y) { return x + y; } private HasConstructStruct con; public HasConstructStruct IncludeStruct { get { return con; } set { con = value; } } } [LuaCallCSharp] public class GenCodeBaseClass { public GenCodeStruct InitStruct(out int add){ struct_var.Byte = 100; struct_var.Char = 'b'; struct_var.Decimal = 22.33333333m; struct_var.Double = 20.111111111111; struct_var.Float = 21.1234f; struct_var.IntVar1 = 22345678; struct_var.IntVar2 = -22345678; struct_var.Long = System.Int64.MinValue; struct_var.ULong = System.UInt64.MinValue; struct_var.Short = 223; struct_var.String = "2just for test"; struct_var.UInt = 22345; struct_var.UShort = 128; struct_var.IncludeStruct = new HasConstructStruct (2, 2, "2haha"); add = struct_var.Add (struct_var.IntVar1, struct_var.IntVar2); return struct_var; } public void SetStruct(ref GenCodeStruct var, out GenCodeStruct value) { struct_var.Byte = var.Byte; struct_var.Char = var.Char; struct_var.Decimal = var.Decimal; struct_var.Double = var.Double; struct_var.Float = var.Float; struct_var.IntVar1 = var.IntVar1; struct_var.IntVar2 = var.IntVar2; struct_var.Long = var.Long; struct_var.ULong = var.ULong; struct_var.Short = var.Short; struct_var.String = var.String; struct_var.UInt = var.UInt; struct_var.UShort = var.UShort; struct_var.IncludeStruct = new HasConstructStruct(var.IncludeStruct.x, var.IncludeStruct.y, var.IncludeStruct.z); value = struct_var; } public GenCodeStruct GetStruct(){ return struct_var; } public void SetStruct(NoGenCodeStruct var, out int add, out GenCodeStruct value) { struct_var.Byte = var.Byte; struct_var.Char = var.Char; struct_var.Decimal = var.Decimal; struct_var.Double = var.Double; struct_var.Float = var.Float; struct_var.IntVar1 = var.IntVar1; struct_var.IntVar2 = var.IntVar2; struct_var.Long = var.Long; struct_var.ULong = var.ULong; struct_var.Short = var.Short; struct_var.String = var.String; struct_var.UInt = var.UInt; struct_var.UShort = var.UShort; struct_var.IncludeStruct = new HasConstructStruct(var.IncludeStruct.x, var.IncludeStruct.y, var.IncludeStruct.z); add = struct_var.Add (var.IntVar1, var.IntVar2); value = struct_var; LuaTestCommon.Log ("GenCodeStruct Byte:" + struct_var.Byte); LuaTestCommon.Log ("GenCodeStruct Char:" + struct_var.Char); LuaTestCommon.Log ("GenCodeStruct Decimal:" + struct_var.Decimal); LuaTestCommon.Log ("GenCodeStruct Double:" + struct_var.Double); LuaTestCommon.Log ("GenCodeStruct Float:" + struct_var.Float); LuaTestCommon.Log ("GenCodeStruct IntVar1:" + struct_var.IntVar1); LuaTestCommon.Log ("GenCodeStruct IntVar2:" + struct_var.IntVar2); LuaTestCommon.Log ("GenCodeStruct Long:" + struct_var.Long); LuaTestCommon.Log ("GenCodeStruct ULong:" + struct_var.ULong); LuaTestCommon.Log ("GenCodeStruct Short:" + struct_var.Short); LuaTestCommon.Log ("GenCodeStruct String:" + struct_var.String); LuaTestCommon.Log ("GenCodeStruct UInt:" + struct_var.UInt); LuaTestCommon.Log ("GenCodeStruct UShort:" + struct_var.UShort); LuaTestCommon.Log ("GenCodeStruct IncludeStruct.x:" + struct_var.IncludeStruct.x + ", IncludeStruct.y:" + struct_var.IncludeStruct.y + ", IncludeStruct.z:" + struct_var.IncludeStruct.z); } public void SetStaticPusherStruct(StaticPusherStructAll inVar, ref StaticPusherStructAll refVar, out StaticPusherStructAll outVar) { static_pushstruct_var.longVar = inVar.longVar + refVar.longVar; static_pushstruct_var.ulongVar = inVar.ulongVar + refVar.ulongVar; static_pushstruct_var.floatVar = inVar.floatVar + refVar.floatVar; static_pushstruct_var.doubleVar = inVar.doubleVar + refVar.doubleVar; static_pushstruct_var.structA.byteVar = 97; static_pushstruct_var.structA.sbyteVar = 100; static_pushstruct_var.structB.intVar = inVar.structB.intVar + refVar.structB.intVar; static_pushstruct_var.structB.uintVar = inVar.structB.uintVar + refVar.structB.uintVar; static_pushstruct_var.structB.shortVar = refVar.structB.shortVar; static_pushstruct_var.structB.ushortVar = inVar.structB.ushortVar; outVar = static_pushstruct_var; refVar.longVar = refVar.longVar - 1; refVar.ulongVar = refVar.ulongVar - 1; refVar.floatVar = refVar.floatVar - 1.0f; refVar.doubleVar = refVar.doubleVar - 1.0; refVar.structA.byteVar = 98; refVar.structA.sbyteVar = 101; refVar.structB.intVar = refVar.structB.intVar + 1; refVar.structB.uintVar = refVar.structB.uintVar + 1; refVar.structB.shortVar = inVar.structB.shortVar; refVar.structB.ushortVar = inVar.structB.ushortVar; } private GenCodeStruct struct_var; public StaticPusherStructAll static_pushstruct_var; public static GenCodeStruct struct_var1; public static HasConstructStruct struct_var2 = new HasConstructStruct (4, 5, "enen"); public static int GBS = 1; } [LuaCallCSharp] public class GenCodeDrivedClass:GenCodeBaseClass { public HasConstructStruct SimpleConStruct { get { return simple_struct; } set { simple_struct = value; } } public int Add(int x, int y) { return x + y; } public void Add(HasConstructStruct invar, ref HasConstructStruct refvar, out HasConstructStruct outvar) { outvar = invar; outvar.x = invar.x + refvar.x; refvar.x = invar.x; } private HasConstructStruct simple_struct; } [LuaCallCSharp] public class CClass { public CClass(int x, int y, string z) { c_struct = new HasConstructStruct(x, y, z); } public HasConstructStruct CConStruct { get { return c_struct; } set { c_struct = value; } } public void Add(HasConstructStruct invar, ref HasConstructStruct refvar, out HasConstructStruct outvar) { outvar = invar; outvar.x = invar.x + refvar.x; refvar.x = invar.x; } public int VariableParamFunc(params HasConstructStruct[] structs) { int ret = 0; foreach (HasConstructStruct var in structs) { ret += var.x; } return ret; } private HasConstructStruct c_struct; } public class BClass:CClass { public BClass(int x, int y, string z):base(x, y, z) { b_struct = new HasConstructStruct(x, y, z); } public HasConstructStruct BConStruct { get { return b_struct; } set { b_struct = value; } } public void Sub(HasConstructStruct invar, ref HasConstructStruct refvar, out HasConstructStruct outvar) { outvar = invar; outvar.x = invar.x - refvar.x; refvar.x = invar.x; LuaTestCommon.Log ("refvar.x:" + refvar.x + ",refvar.y:" + refvar.y + ", refvar.z:" + refvar.z); } private HasConstructStruct b_struct; } [LuaCallCSharp] public class AClass:BClass { public AClass(int x, int y , string z):base(x, y, z) { LuaTestCommon.Log ("AClass Constructor"); } public int Div(int x, int y) { if (y == 0) { return 0; } else { return x / y; } } } public struct NoGen2FloatStruct{ public float a; public float b; public NoGen2FloatStruct(float a, float b) { this.a = a; this.b = b; } } public struct NoGen3FloatStruct{ public float a; public float b; public float c; public NoGen3FloatStruct(float a, float b, float c) { this.a = a; this.b = b; this.c = c; } } public struct NoGen4FloatStruct{ public float a; public float b; public float c; public float d; public NoGen4FloatStruct(float a, float b, float c, float d) { this.a = a; this.b = b; this.c = c; this.d = d; } } public struct NoGen5FloatStruct{ public float a; public float b; public float c; public float d; public float e; public NoGen5FloatStruct(float a, float b, float c, float d, float e) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; } } public struct NoGen6FloatStruct{ public float a; public float b; public float c; public float d; public float e; public float f; public NoGen6FloatStruct(float a, float b, float c, float d, float e, float f) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; this.f = f; } } public class TestNoGenFloatStructClass { public NoGen2FloatStruct Struct2{ set { struct_2 = value; } get { return struct_2; } } public NoGen3FloatStruct Struct3{ set { struct_3 = value; } get { return struct_3; } } public NoGen4FloatStruct Struct4{ set { struct_4 = value; } get { return struct_4; } } public NoGen5FloatStruct Struct5{ set { struct_5 = value; } get { return struct_5; } } public NoGen6FloatStruct Struct6{ set { struct_6 = value; } get { return struct_6; } } public void Add2(ref NoGen2FloatStruct x, ref Gen2FloatStruct y) { x.a = x.a + y.a; x.b = x.b + y.b; y.a = x.a; y.b = x.b; } public void Sub3(ref NoGen3FloatStruct x, ref Gen3FloatStruct y) { x.a = x.a - y.a; x.b = x.b - y.b; x.c = x.c - y.c; y.a = x.a; y.b = x.b; y.a = x.c; } public void Multiply4(ref NoGen4FloatStruct x, ref Gen4FloatStruct y) { x.a = x.a * y.a; x.b = x.b + y.b; x.c = x.c - y.c; x.d = x.d * y.d; y.a = x.a; y.b = x.b; y.c = x.c; y.d = x.d; } public void All5(ref NoGen5FloatStruct x, ref Gen5FloatStruct y) { x.a = x.a * y.a; x.b = x.b + y.b; x.c = x.c - y.c; x.d = x.d / y.d; x.e = y.e + x.e; y.a = x.a; y.b = x.b; y.c = x.c; y.d = x.d; y.e = x.e; } public void All6(ref NoGen6FloatStruct x, ref Gen6FloatStruct y) { x.a = x.a * y.a; x.b = x.b + y.b; x.c = x.c - y.c; x.d = x.d / y.d; x.e = y.e + x.e; x.f = x.f - y.f; y.a = x.a; y.b = x.b; y.c = x.c; y.d = x.d; y.e = x.e; y.f = x.f; } private NoGen2FloatStruct struct_2; private NoGen3FloatStruct struct_3; private NoGen4FloatStruct struct_4; private NoGen5FloatStruct struct_5; private NoGen6FloatStruct struct_6; } [GCOptimize] [LuaCallCSharp] public struct Gen2FloatStruct{ public float a; public float b; public Gen2FloatStruct(float a, float b) { this.a = a; this.b = b; } } [GCOptimize] [LuaCallCSharp] public struct Gen3FloatStruct{ public float a; public float b; public float c; public Gen3FloatStruct(float a, float b, float c) { this.a = a; this.b = b; this.c = c; } } [GCOptimize] [LuaCallCSharp] public struct Gen4FloatStruct{ public float a; public float b; public float c; public float d; public Gen4FloatStruct(float a, float b, float c, float d) { this.a = a; this.b = b; this.c = c; this.d = d; } } [GCOptimize] [LuaCallCSharp] public struct Gen5FloatStruct{ public float a; public float b; public float c; public float d; public float e; public Gen5FloatStruct(float a, float b, float c, float d, float e) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; } } [GCOptimize] [LuaCallCSharp] public struct Gen6FloatStruct{ public float a; public float b; public float c; public float d; public float e; public float f; public Gen6FloatStruct(float a, float b, float c, float d, float e, float f) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; this.f = f; } } [LuaCallCSharp] public class TestGenFloatStructClass { public Gen2FloatStruct Struct2{ set { struct_2 = value; } get { return struct_2; } } public Gen3FloatStruct Struct3{ set { struct_3 = value; } get { return struct_3; } } public Gen4FloatStruct Struct4{ set { struct_4 = value; } get { return struct_4; } } public Gen5FloatStruct Struct5{ set { struct_5 = value; } get { return struct_5; } } public Gen6FloatStruct Struct6{ set { struct_6 = value; } get { return struct_6; } } public void Add2(ref NoGen2FloatStruct x, ref Gen2FloatStruct y) { x.a = x.a + y.a; x.b = x.b + y.b; y.a = x.a; y.b = x.b; } public void Sub3(ref NoGen3FloatStruct x, ref Gen3FloatStruct y) { x.a = x.a - y.a; x.b = x.b - y.b; x.c = x.c - y.c; y.a = x.a; y.b = x.b; y.a = x.c; } public void Multiply4(ref NoGen4FloatStruct x, ref Gen4FloatStruct y) { x.a = x.a * y.a; x.b = x.b + y.b; x.c = x.c - y.c; x.d = x.d * y.d; y.a = x.a; y.b = x.b; y.c = x.c; y.d = x.d; } public void All5(ref NoGen5FloatStruct x, ref Gen5FloatStruct y) { x.a = x.a * y.a; x.b = x.b + y.b; x.c = x.c - y.c; x.d = x.d / y.d; x.e = y.e + x.e; y.a = x.a; y.b = x.b; y.c = x.c; y.d = x.d; y.e = x.e; } public void All6(ref NoGen6FloatStruct x, ref Gen6FloatStruct y) { x.a = x.a * y.a; x.b = x.b + y.b; x.c = x.c - y.c; x.d = x.d / y.d; x.e = y.e + x.e; x.f = x.f - y.f; y.a = x.a; y.b = x.b; y.c = x.c; y.d = x.d; y.e = x.e; y.f = x.f; } private Gen2FloatStruct struct_2; private Gen3FloatStruct struct_3; private Gen4FloatStruct struct_4; private Gen5FloatStruct struct_5; private Gen6FloatStruct struct_6; } public struct NoGen2IntStruct{ public int a; public int b; public NoGen2IntStruct(int a, int b) { this.a = a; this.b = b; } } [CSharpCallLua] public delegate int TestReflectEvtHandler1(float y); public class TestReflectEventClass{ public event TestReflectEvtHandler1 TestEvent1; public int CallEvent(float y) { return TestEvent1(y); } } namespace TestExtensionMethod { [LuaCallCSharp] public static class TestExtensionMethodForStruct { public static void PrintSalary(this Employeestruct i) { LuaTestCommon.Log("Salary:" + i.Salary); } public static int GetIncomeForOneYear(this Employeestruct i) { return i.Salary * 12 + i.AnnualBonus; } public static int Add(this Employeestruct i, Employeestruct d) { return i.Salary * 12 + i.AnnualBonus + d.Salary * 12 + d.AnnualBonus; } public static void Sub(this Employeestruct i, Employeestruct d, out Employeestruct e, ref Employeestruct a) { e = d; e.Salary = 10000; a.Salary = i.Salary - d.Salary; LuaTestCommon.Log ("e.name:" + e.Name +", e.salary:"+ e.Salary); LuaTestCommon.Log ("a.name:" + a.Name +", a.salary:"+ a.Salary); } } [LuaCallCSharp] public static class TestExtensionMethodFOrClass { public static void PrintAllString(this TestChineseString i) { LuaTestCommon.Log("GetLongChineString:" + i.GetLongChineString()); } public static int GetLongStringLength(this TestChineseString i) { return i.GetLongChineString ().Length; } public static int Add(this TestChineseString i, TestChineseString d) { return i.GetLongChineString ().Length + d.GetLongChineString ().Length; } public static void Replace(this TestChineseString i , TestChineseString d, out TestChineseString e, ref TestChineseString a) { e = i; a.combine_string = i.short_simple_string; a.short_simple_string = i.short_simple_string + d.short_simple_string; } } } [LuaCallCSharp] public abstract class EmployeeTemplate { public void GetSalary() { GetBasicSalary(); AddBonus(); } public abstract int GetBasicSalary(); public abstract int AddBonus(); } [LuaCallCSharp] public class Manager : EmployeeTemplate { public override int GetBasicSalary() { //Console.WriteLine("Get Manager Basic Salary"); return 1; } public override int AddBonus() { //Console.WriteLine("Add Manager Bonus"); return 2; } } [GCOptimize] [LuaCallCSharp] public class TableAutoTransSimpleClass { public TableAutoTransSimpleClass() { } public TableAutoTransSimpleClass(int x, string y, long z) { IntVar = x; StringVar = y; LongVar = z; } public int IntVar{ get { return x; } set { x = value; } } public string StringVar { get { return y; } set { y = value; } } public long LongVar { get { return z; } set { z = value; } } public int x; public string y; public long z; } [GCOptimize] [LuaCallCSharp] public class TableAutoTransComplexClass { public TableAutoTransComplexClass() { } public TableAutoTransComplexClass(int A, TableAutoTransSimpleClass B ) { IntVar = A; ClassVar = B; } public int IntVar { get { return A; } set { A = value; } } public TableAutoTransSimpleClass ClassVar { get { return B; } set { B = value; } } public int A; public TableAutoTransSimpleClass B; } [GCOptimize] [LuaCallCSharp] public struct TableAutoTransSimpleStruct { public byte a; } [GCOptimize] [LuaCallCSharp] public struct TableAutoTransComplexStruct { public int a; public int b; public decimal c; public TableAutoTransSimpleStruct d; } [GCOptimize] [LuaCallCSharp] public class TestTableAutoTransClass { public TableAutoTransSimpleClass SimpleClassMethod(TableAutoTransSimpleClass p) { return p; } public TableAutoTransComplexClass ComplexClassMethod(TableAutoTransComplexClass p) { return p; } public TableAutoTransSimpleStruct SimpleStructMethod(TableAutoTransSimpleStruct p) { return p; } public TableAutoTransComplexStruct ComplexStructMethod(TableAutoTransComplexStruct p) { return p; } public int OneListMethod(int[] args) { int value = 0; for (int i = 0; i < args.Length; i++) { value += args[i]; } return value; } public int TwoDimensionListMethod(int[][] args) { int value = 0; for (int i = 0; i < args.Length; i++) { foreach (int j in args[i]) { value += j; } } return value; } } //验证构造函数支持refer,out修饰符,add@2017.05.09 for v2.1.7 [LuaCallCSharp] public class ReferTestClass { public ReferTestClass(int x, ref int y, out string z) { var_x = x; var_y = y; y = y - 1; z = "test1"; var_z = z; } public ReferTestClass(int x, out string z) { var_x = x; var_y = 10; z = "test3"; var_z = z; } public int Get_X_Y_ADD() { return var_x + var_y; } private int var_x; private int var_y; private string var_z; }