summaryrefslogtreecommitdiff
path: root/Source/Samples/LuaxTest/main.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-14 09:08:07 +0800
committerchai <chaifix@163.com>2019-03-14 09:08:07 +0800
commit8d8c4ff1664625e7428d0d31cd798d9321680cb2 (patch)
tree67af1dad8483ba1c886ae1bd00b9c664ee245385 /Source/Samples/LuaxTest/main.cpp
parent6016ece202eef94ed76bd20d4f7879ccc71cc2e6 (diff)
*luax
Diffstat (limited to 'Source/Samples/LuaxTest/main.cpp')
-rw-r--r--Source/Samples/LuaxTest/main.cpp69
1 files changed, 55 insertions, 14 deletions
diff --git a/Source/Samples/LuaxTest/main.cpp b/Source/Samples/LuaxTest/main.cpp
index 8dc7281..fdcf29a 100644
--- a/Source/Samples/LuaxTest/main.cpp
+++ b/Source/Samples/LuaxTest/main.cpp
@@ -59,25 +59,28 @@ void School::RegisterLuaxClass(LuaxState& state)
//----------------------------------------------------------------------------------------------------------------
-class Boy : public LuaxClass
+class Boy : public LuaxClass<Boy>
{
public:
- Boy(int age) : mAge(age) {}
+ Boy(int age, const char* name) : mAge(age), mName(name){}
-private:
+ int mAge;
+
+ const char* mName;
- int mAge;
+private:
public:
LUAX_DECL_FACTORY(SimBoy);
// member methods
- LUAX_DECL_METHOD(l_New);
LUAX_DECL_METHOD(l_GetAge);
+ LUAX_DECL_METHOD(l_GetName);
// class method
+ LUAX_DECL_METHOD(l_New);
LUAX_DECL_METHOD(l_GetGender);
};
@@ -87,8 +90,9 @@ int Boy::l_New(lua_State* L)
LUAX_STATE(L);
int age = state.GetValue(1, 0);
+ const char* name = state.GetValue(2, "");
- Boy* boy = new Boy(age);
+ Boy* boy = new Boy(age, name);
boy->PushLuaUserdata(state);
return 1;
@@ -97,6 +101,19 @@ int Boy::l_New(lua_State* L)
int Boy::l_GetAge(lua_State* L)
{
LUAX_SETUP(L, "U");
+
+ Boy* self = state.GetLuaUserdata<Boy>(1);
+
+ state.Push(self->mAge);
+
+ return 1;
+}
+
+int Boy::l_GetName(lua_State* L)
+{
+ LUAX_SETUP(L, "U");
+ Boy* self = state.GetLuaUserdata<Boy>(1);
+ state.Push(self->mName);
return 1;
}
@@ -113,8 +130,9 @@ void Boy::RegisterLuaxClass(LuaxState& state)
state.SetField(-1, "Gender", "Male"); // 101
luaL_Reg regTable[] = {
- {"GetGender", l_GetGender},
- {NULL, NULL}
+ { "New", l_New },
+ { "GetGender", l_GetGender },
+ {NULL, NULL}
};
state.Register(regTable);
@@ -123,8 +141,9 @@ void Boy::RegisterLuaxClass(LuaxState& state)
void Boy::RegisterLuaxInterface(LuaxState& state)
{
luaL_Reg regTable[] = {
- {"New", l_New},
- {NULL, NULL}
+ { "GetAge", l_GetAge },
+ { "GetName", l_GetName },
+ {NULL, NULL}
};
state.Register(regTable);
@@ -132,6 +151,11 @@ void Boy::RegisterLuaxInterface(LuaxState& state)
//----------------------------------------------------------------------------------------------------------------
+class Girl : public LuaxClass<Girl>
+{
+};
+
+//----------------------------------------------------------------------------------------------------------------
string script = R"(
function main()
local a = 19
@@ -144,7 +168,6 @@ function main()
-- print(Asura.SimSchool.GetName())
print(Asura.SimBoy.Class)
print(Asura.SimBoy.Gender)
- print(Asura.SimBoy.GetGender())
print(Asura.SimBoy.GetClassName())
print(Asura.School.GetName())
print(Asura.School.Region)
@@ -160,8 +183,27 @@ function main()
end
local kid = Kid.New(110, 12)
kid:GetHeight()
-]]
-end
+ ]]
+ local kid = Asura.SimBoy.New(23, "Chai")
+ print(kid:GetAge())
+ print(kid:GetName())
+ kid.fruit = function()
+ return "apple"
+ end
+ print(kid.fruit())
+ print(Asura.SimBoy.GetGender())
+ Asura.SimBoy.Havefun = function()
+ return "Boys have some fun!"
+ end
+ print(Asura.SimBoy.Havefun())
+
+-- ޸෽
+ Asura.SimBoy.Foo = function()
+ return "SimBoy.Foo"
+ end
+ print(Asura.SimBoy.Foo())
+
+end
function err(msg)
print(msg)
end
@@ -183,7 +225,6 @@ int main()
lua_State* L = runtime.Open();
Luax::LuaxState& state = runtime[L].state;
- LuaxRefTable& strong = runtime[L].strongRefTable;
state.OpenLibs();
state.PushNamespace("Asura");
state.PushNamespace("author");