#include #include #include #include #include "LuaCustomTypes.hpp" #include "Example.hpp" #include static int Example_PrintMe(lua_State* L) { ememory::SharedPtr ex = luaWrapper::check(L, 1); TEST_PRINT( "Example="); TEST_PRINT( " m_boolean=" << ex->m_boolean); TEST_PRINT( " m_integer=" << ex->m_integer); TEST_PRINT( " m_uinteger=" << ex->m_uinteger); TEST_PRINT( " m_string='" << ex->m_cstring << "'"); TEST_PRINT( " m_cppstring='" << ex->m_cppstring << "'"); TEST_PRINT( " m_number=" << ex->m_number); TEST_PRINT( " m_floatnumber=" << ex->m_floatnumber); TEST_PRINT( " m_vec={x=" << ex->m_vec.x << ",y=" << ex->m_vec.y <<"}"); return 0; } static luaL_Reg Example_metatable[] = { // This function is { "printMe", Example_PrintMe }, // In many cases, all you need are simple getter or setter functions This // was such a common pattern for me that I wrote a huge set of templates // that generate these getter and setter functions for me. This is an // example of how they can be used // // Because everything in the Example class is marked public, you can access // them directly with these templates. // // Class | data type | class member { "getBoolean", luaWrapper::utils::get }, { "setBoolean", luaWrapper::utils::set }, { "m_boolean", luaWrapper::utils::getset }, { "getInteger", luaWrapper::utils::get }, { "setInteger", luaWrapper::utils::set }, { "m_integer", luaWrapper::utils::getset }, { "getUInteger", luaWrapper::utils::get }, { "setUInteger", luaWrapper::utils::set }, { "m_uinteger", luaWrapper::utils::getset }, { "getCString", luaWrapper::utils::get }, { "setCString", luaWrapper::utils::set }, { "m_string", luaWrapper::utils::getset }, { "getCPPString", luaWrapper::utils::get }, { "setCPPString", luaWrapper::utils::set }, { "m_cppstring", luaWrapper::utils::getset }, { "getVec", luaWrapper::utils::get }, { "setVec", luaWrapper::utils::set }, { "m_vec", luaWrapper::utils::getset }, { "getNumber", luaWrapper::utils::get }, { "setNumber", luaWrapper::utils::set }, { "m_number", luaWrapper::utils::getset }, { "getFloatNumber", luaWrapper::utils::get }, { "setFloatNumber", luaWrapper::utils::set }, { "m_floatnumber", luaWrapper::utils::getset }, { "getPtr", luaWrapper::utils::get }, { "setPtr", luaWrapper::utils::set }, { "Ptr", luaWrapper::utils::getset }, // The getters and setters above work on member variables directly, but // sometimes all you have are getter and setter functions instead of // variables. You can still automate the creation of Getter and Setter Lua // function wrappers. // Normally it would be silly to have getter and setter functions for both // the member variable AND the getter/setter function, I've included both // here as an example of how it works // Example of member access through getters and setters // Class | data type | getter // Class | data type | setter // Class | data type | getter | setter { "getBooleanFunc", luaWrapper::utils::get }, { "setBooleanFunc", luaWrapper::utils::set }, { "BooleanFunc", luaWrapper::utils::getset }, { "getIntegerFunc", luaWrapper::utils::get }, { "setIntegerFunc", luaWrapper::utils::set }, { "IntegerFunc", luaWrapper::utils::getset }, { "getUIntegerFunc", luaWrapper::utils::get }, { "setUIntegerFunc", luaWrapper::utils::set }, { "UIntegerFunc", luaWrapper::utils::getset }, { "getCStringFunc", luaWrapper::utils::get }, { "setCStringFunc", luaWrapper::utils::set }, { "CStringFunc", luaWrapper::utils::getset }, { "getNumberFunc", luaWrapper::utils::get }, { "setNumberFunc", luaWrapper::utils::set }, { "NumberFunc", luaWrapper::utils::getset }, { "getFloatNumberFunc", luaWrapper::utils::get }, { "setFloatNumberFunc", luaWrapper::utils::set }, { "FloatNumberFunc", luaWrapper::utils::getset }, { "getPtrFunc", luaWrapper::utils::get }, { "setPtrFunc", luaWrapper::utils::set }, { "PtrFunc", luaWrapper::utils::getset }, // In order to use luaWrapper::utils::get and luaWrapper::utils::set on non-primitive types, you must define luaWrapper::utils::to // and luaWrapper::utils::check for that type. // See LuaCustomTypes.hpp for an example involving etk::String and Vector2D { "getCPPStringFunc", luaWrapper::utils::get }, { "setCPPStringFunc", luaWrapper::utils::set }, { "CPPStringFunc", luaWrapper::utils::getset }, { "getVecFunc", luaWrapper::utils::get }, { "setSetFunc", luaWrapper::utils::set }, { "VecFunc", luaWrapper::utils::getset }, { "DoSomething", luaWrapperUtils_func(&Example::DoSomething) }, { "DoSomething2", luaWrapperUtils_func(&Example::DoSomething2) }, //{ "DoSomethingElse1", luaWrapper::utils::funcsig(int, Example, DoSomethingElse, int, int) }, //{ "DoSomethingElse2", luaWrapper::utils::funcsig(int, Example, DoSomethingElse, float) }, { NULL, NULL } }; int luaopen_Example(lua_State* _L) { luaWrapper::registerElement(_L, "Example", NULL, Example_metatable); return 1; }