Beispiel #1
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
}