diff options
| author | chai <chaifix@163.com> | 2018-12-07 20:17:10 +0800 | 
|---|---|---|
| committer | chai <chaifix@163.com> | 2018-12-07 20:17:10 +0800 | 
| commit | 39f653eb882dffa2f69209d192093f23588ff176 (patch) | |
| tree | 22ba778f6c8832f257d1792912877331ee347b2d /src/lua/je_lua_jin.cpp | |
| parent | 354507a4970874bf658ac00fb5d2388c46332fd3 (diff) | |
*修改文件名
Diffstat (limited to 'src/lua/je_lua_jin.cpp')
| -rw-r--r-- | src/lua/je_lua_jin.cpp | 104 | 
1 files changed, 104 insertions, 0 deletions
| diff --git a/src/lua/je_lua_jin.cpp b/src/lua/je_lua_jin.cpp new file mode 100644 index 0000000..3e80015 --- /dev/null +++ b/src/lua/je_lua_jin.cpp @@ -0,0 +1,104 @@ +#include "common/je_lua.h" +#include "common/je_lua_common.h" +#include "modules/je_lua_modules.h" +#include "embed/embed.h" +#include "je_lua_jin.h" + +namespace JinEngine +{ +    namespace Lua +    { +     +        LUA_IMPLEMENT int l_getversion(lua_State* L) +        { +            luax_pushstring(L, VERSION); +            return 1;  +        } + +        LUA_IMPLEMENT int l_getAuthor(lua_State* L) +        { +            luax_pushstring(L, AUTHOR); +            return 1;  +        } + +        LUA_IMPLEMENT int l_getOS(lua_State* L) +        { +        #ifdef _WIN32  +            luax_pushstring(L, "windows"); +        #elif defined __unix__ +            luax_pushstring(L, "unix"); +        #elif defined __APPLE__ +            luax_pushstring(L, "macos"); +        #endif +            return 1; +        }  +     +        LUA_IMPLEMENT int l_revision(lua_State* L) +        { +            luax_pushnumber(L, REVISION); +            return 1; +        } + +        LUA_IMPLEMENT const luax_Str s[] = { +            { "version",  VERSION   }, +            { "author",   AUTHOR    }, +            { "codename", CODE_NAME }, +            { 0,          0         } +        }; + +        LUA_IMPLEMENT const luax_Num n[] = { +            { "revision", REVISION }, +            { 0,          0        } +        }; + +        // Register jin module, keep it on the top of stack. +        LUA_EXPORT void open(lua_State* L) +        { +            luax_globaltable(L, MODULE_NAME); + +            // Register values. +            luax_setfieldstrings(L, s); +            luax_setfieldnumbers(L, n); + +            luax_Reg modules[] = { +                { "core",       luaopen_core       }, +                { "event",      luaopen_event      }, +                { "graphics",   luaopen_graphics   }, +                { "time",       luaopen_time       }, +                { "mouse",      luaopen_mouse      }, +                { "keyboard",   luaopen_keyboard   }, +                { "filesystem", luaopen_filesystem }, +                { "net",        luaopen_net        }, +                { "audio",      luaopen_audio      }, +                { "joypad",     luaopen_joypad     }, +                { "math",       luaopen_math       }, +                { "thread",     luaopen_thread     }, +                { "bit",        luaopen_bit        }, +                //{"ai",          luaopen_ai         }, +                { 0,            0                  } +            }; + +            // Register sub modules. +            for (int i = 0; modules[i].name; ++i) +            { +                modules[i].func(L); +                luax_setfield(L, -2, modules[i].name); +            } + +            // Pop jin table. +            luax_pop(L, 1); +        } + +        LUA_EXPORT void boot(lua_State* L, const char* cwd) +        { +            luax_getglobal(L, MODULE_NAME); +            luax_newtable(L); +            luax_setfieldstring(L, "cwd", cwd); +            luax_setfield(L, -2, "args"); +            Embed::load(L); +            luax_clearstack(L); +            Embed::run(L); +        } + +    } // namespace Lua +} // namespace JinEngine
\ No newline at end of file | 
