diff options
| author | chai <chaifix@163.com> | 2019-03-29 22:51:04 +0800 |
|---|---|---|
| committer | chai <chaifix@163.com> | 2019-03-29 22:51:04 +0800 |
| commit | c302f5ae5f9e30a28e487e8a764d9cc31546bbea (patch) | |
| tree | 7f18bedeece950600336ea7ced7c52c468552c98 /source/modules/asura-utils/scripting | |
| parent | 157530b8b6e11efc5573d5a0db8987a440197aa1 (diff) | |
*rename
Diffstat (limited to 'source/modules/asura-utils/scripting')
| -rw-r--r-- | source/modules/asura-utils/scripting/lua_env.h | 72 | ||||
| -rw-r--r-- | source/modules/asura-utils/scripting/portable.hpp | 29 |
2 files changed, 101 insertions, 0 deletions
diff --git a/source/modules/asura-utils/scripting/lua_env.h b/source/modules/asura-utils/scripting/lua_env.h new file mode 100644 index 0000000..e2fc4fc --- /dev/null +++ b/source/modules/asura-utils/scripting/lua_env.h @@ -0,0 +1,72 @@ +#ifndef __ASURA_LUA_ENV_H__ +#define __ASURA_LUA_ENV_H__ + +extern "C" +{ +#include <Lua51/lua.h> +#include <Lua51/lauxlib.h> +} +#include <Luax/luax.h> + +#include "../singleton.hpp" + +namespace AsuraEngine +{ + namespace Scripting + { + + /// + /// ³ÌÐòͨ¹ýÕâ¸ö½Ó¿Ú·ÃÎÊÖ÷lua state¡£Asura³ÌÐòµÄ˼ÏëÊÇ£¬½ø³ÌÖ÷Ïß³Ìά»¤Ò»¸öluaÐéÄâ»ú£¬Ó¦Óà + /// µÄÖ÷ÒªÂß¼ÅÜÔÚ´ËÐéÄâ»úµÄÖ÷luaÏß³ÌÀ»òÕß½ÐÖ÷Õ»À¡£ + /// + class LuaEnv ASURA_FINAL : public Singleton<LuaEnv> + { + public: + + LuaEnv() : mVM(0) {}; + ~LuaEnv() {}; + + /// + /// ÉèÖÃÖ÷ÐéÄâ»úµÄÖ÷Ö´ÐÐÕ»¡£ + /// + inline void Init() + { + ASSERT(!mVM); + mVM = new Luax::LuaxVM(); + ASSERT(mVM); + mVM->Setup(); + }; + + inline lua_State* GetMainThread() + { + return mVM->GetMainThread(); + }; + + inline void Exit() + { + delete mVM; + mVM = nullptr; + } + + private: + + /// + /// Ö÷Ï̱߳£´æÒ»¸öÖ÷luaÐéÄâ»ú¡£Ò»¸öAsura³ÌÐòÓÀÔ¶Ö»ÓÐÒ»¸öÖ÷ÐéÄâ»ú£¬´ó²¿·Ö´úÂë¶¼ÔÚÕâ¸öÐé + /// Äâ»úÖÐÔËÐУ¬ÇÒÖ»ÄÜÉèÖÃÒ»´Î¡£Ö÷Ïß³Ì\Ö÷Ö´ÐÐÕ»¶ÔÓ¦µÄÊÇglobal_StateÀïÃæµÄ£º + /// + /// struct lua_State *mainthread; + /// + /// ʹÓÃlua_newstate()£¬»á´´½¨Ò»¸öÐéÄâ»ú£¬°üº¬Ò»¸öglobal_State½á¹¹£¬²¢´´½¨Ò»¸öÕâ¸öÐé + /// Äâ»úµÄÖ÷Ïß³Ìlua_State²¢·µ»Ø¡£global_StateÓÉÕâ¸öÐéÄâ»úµÄËùÓÐÏ̹߳²Ïí£¬³ýÁ˵ÚÒ»¸öÖ÷ + /// Ïß³ÌÓÉlua_newstate()´´½¨Í⣬ÆäÓàÏß³ÌÓÉlua_newthread()´´½¨¡£ + /// + Luax::LuaxVM* mVM; + + }; + + } +} + +namespace AEScripting = AsuraEngine::Scripting; + +#endif
\ No newline at end of file diff --git a/source/modules/asura-utils/scripting/portable.hpp b/source/modules/asura-utils/scripting/portable.hpp new file mode 100644 index 0000000..5badf8d --- /dev/null +++ b/source/modules/asura-utils/scripting/portable.hpp @@ -0,0 +1,29 @@ +#ifndef __ASURA_ENGINE_PORTABLE_H__ +#define __ASURA_ENGINE_PORTABLE_H__ + +#include "../type.h" + +#include "lua_env.h" + +namespace AsuraEngine +{ + namespace Scripting + { + + /// + /// Ҫע²á¸øluaµÄnativeÀàÐèÒª¼Ì³Ð´ËÄ£°å¡£ + /// + template<typename T> + using Portable = Luax::LuaxNativeClass<T>; + + /// + /// ÐèÒª×÷Ϊ»ùÀ࣬·ÃÎÊuserdataºÍmember refµÄÀà¼Ì³Ð´ËÀ࣬עÒâ±ØÐëÊÇÐé¼Ì³Ð¡£ + /// + using NativeAccessor = Luax::ILuaxNativeAccessor; + + } +} + +namespace AEScripting = AsuraEngine::Scripting; + +#endif
\ No newline at end of file |
