From 3bced067a4144381e59ce4bd0eb749eeff5ad1f4 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 28 Mar 2019 08:56:15 +0800 Subject: *misc --- source/libs/asura-lib-utils/scripting/lua_env.h | 56 ++++++++++++++++++++++ source/libs/asura-lib-utils/scripting/portable.hpp | 7 +-- 2 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 source/libs/asura-lib-utils/scripting/lua_env.h (limited to 'source/libs/asura-lib-utils/scripting') diff --git a/source/libs/asura-lib-utils/scripting/lua_env.h b/source/libs/asura-lib-utils/scripting/lua_env.h new file mode 100644 index 0000000..a467479 --- /dev/null +++ b/source/libs/asura-lib-utils/scripting/lua_env.h @@ -0,0 +1,56 @@ +#ifndef __ASURA_LUA_ENV_H__ +#define __ASURA_LUA_ENV_H__ + +extern "C" +{ +#include +#include +} +#include + +#include "../singleton.hpp" + +namespace AsuraEngine +{ + namespace Scripting + { + + /// + /// 程序通过这个接口访问主lua state。 + /// + class LuaEnv ASURA_FINAL : public Singleton + { + public: + + LuaEnv() : mMainState(0){}; + ~LuaEnv() {}; + + /// + /// 设置主虚拟机的主执行栈。 + /// + inline void Init(lua_State* L) { ASSERT(!mMainState); mMainState = L; }; + + inline lua_State* GetMainState() { return mMainState; }; + + private: + + /// + /// 主线程保存一个主lua虚拟机。一个Asura程序永远只有一个主虚拟机,大部分代码都在这个虚拟机中运行,且只能设置一次。 + /// 主线程\主执行栈对应的是global_State里面的: + /// + /// struct lua_State *mainthread; + /// + /// 使用lua_newstate(),会创建一个虚拟机,包含一个global_State结构,并创建一个这个虚拟机的主线程lua_State并返回。 + /// global_State由这个虚拟机的所有线程共享,除了第一个主线程由lua_newstate()创建外,其余线程由lua_newthread() + /// 创建。 + /// + lua_State* mMainState; + + }; + + } +} + +namespace AEScripting = AsuraEngine::Scripting; + +#endif \ No newline at end of file diff --git a/source/libs/asura-lib-utils/scripting/portable.hpp b/source/libs/asura-lib-utils/scripting/portable.hpp index 097a9fe..5badf8d 100644 --- a/source/libs/asura-lib-utils/scripting/portable.hpp +++ b/source/libs/asura-lib-utils/scripting/portable.hpp @@ -3,12 +3,7 @@ #include "../type.h" -extern "C" -{ - #include - #include -} -#include +#include "lua_env.h" namespace AsuraEngine { -- cgit v1.1-26-g67d0