Exemple #1
0
// 向Lua注册结构 : AppBase
func regLua_appBase(struct_name string, L *lua.LState) error {

	mt := L.NewTypeMetatable(struct_name)
	L.SetGlobal(struct_name, mt)

	// 检查Lua首个参数是不是对象指针
	check := func(L *lua.LState) *AppBase {
		ud := L.CheckUserData(1)
		if v, ok := ud.Value.(*AppBase); ok {
			return v
		}
		L.ArgError(1, struct_name+" expected")

		return nil
	}

	// 成员函数
	// L.SetField(mt, "new", L.NewFunction(newAppBase))

	// 成员变量
	L.SetField(mt, "__index", L.SetFuncs(L.NewTable(),

		map[string]lua.LGFunction{

			// lua投递事件
			"PostEvent": func(L *lua.LState) int {
				p := check(L)
				m := L.CheckString(2)
				f := L.CheckString(3)
				t := uint64(L.CheckInt64(4))
				param := L.CheckAny(5)
				ret := p.PostEventFromLua(m, f, t, param)
				L.Push(lua.LBool(ret))
				return 1
			},

			// LogDebug
			"LogDebug": func(L *lua.LState) int {
				p := check(L)
				data := L.CheckString(2)
				p.LogDebug(data)
				return 1
			},

			// LogInfo
			"LogInfo": func(L *lua.LState) int {
				p := check(L)
				data := L.CheckString(2)
				p.LogInfo(data)
				return 1
			},

			// LogWarn
			"LogWarn": func(L *lua.LState) int {
				p := check(L)
				data := L.CheckString(2)
				p.LogWarn(data)
				return 1
			},

			// LogError
			"LogError": func(L *lua.LState) int {
				p := check(L)
				data := L.CheckString(2)
				p.LogError(data)
				return 1
			},

			// LogFatal
			"LogFatal": func(L *lua.LState) int {
				p := check(L)
				data := L.CheckString(2)
				p.LogFatal(data)
				return 1
			},
		}))

	return nil
}
Exemple #2
0
// 向Lua注册结构 : ScreenThread
func regLua_screen_thread(struct_name string, L *lua.LState) error {

	mt := L.NewTypeMetatable(struct_name)
	L.SetGlobal(struct_name, mt)

	// 检查Lua首个参数是不是对象指针
	check := func(L *lua.LState) *ScreenThread {
		ud := L.CheckUserData(1)
		if v, ok := ud.Value.(*ScreenThread); ok {
			return v
		}
		L.ArgError(1, struct_name+" expected")

		return nil
	}

	// 成员函数
	// L.SetField(mt, "new", L.NewFunction(newScreenThread))

	// 成员变量
	L.SetField(mt, "__index", L.SetFuncs(L.NewTable(),

		map[string]lua.LGFunction{

			// 增加场景
			"Add_screen": func(L *lua.LState) int {
				p := check(L)
				name := L.CheckString(2)
				oid := int32(L.CheckInt(3))

				ret := p.Add_screen(name, oid)

				L.Push(lua.LBool(ret))
				return 1
			},

			// 获取线程号
			"Get_thread_id": func(L *lua.LState) int {
				p := check(L)

				ret := p.Get_thread_id()

				L.Push(lua.LNumber(ret))

				return 1
			},
		}))

	return nil
}
Exemple #3
0
// 向Lua注册结构 : Screen
func regLua_screen(struct_name string, L *lua.LState) error {

	mt := L.NewTypeMetatable(struct_name)
	L.SetGlobal(struct_name, mt)

	// 检查Lua首个参数是不是对象指针
	check := func(L *lua.LState) *Screen {
		ud := L.CheckUserData(1)
		if v, ok := ud.Value.(*Screen); ok {
			return v
		}
		L.ArgError(1, struct_name+" expected")

		return nil
	}

	// 成员函数
	// L.SetField(mt, "new", L.NewFunction(newScreenThread))

	// 成员变量
	L.SetField(mt, "__index", L.SetFuncs(L.NewTable(),

		map[string]lua.LGFunction{

			"Get_data": func(L *lua.LState) int {
				p := check(L)

				ret := p.Get_data()

				L.Push(ret)
				return 1
			},

			"Get_thread": func(L *lua.LState) int {
				p := check(L)

				ret := L.GetUserData("ScreenThread", p.Get_thread())

				L.Push(ret)
				return 1
			},
		}))

	return nil
}