]> git.lizzy.rs Git - minetest.git/blobdiff - src/script/cpp_api/s_base.h
Merge pull request #8776 from osjc/FixGetNode
[minetest.git] / src / script / cpp_api / s_base.h
index a170f82dc7113d128d0fd884c05137cb244c51a7..697e5f5563e5f7b06ef7575f788da6df2eb8ba9b 100644 (file)
@@ -23,15 +23,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <string>
 #include <thread>
 #include <mutex>
+#include <unordered_map>
+#include "common/helper.h"
 #include "util/basic_macros.h"
 
 extern "C" {
 #include <lua.h>
+#include <lualib.h>
 }
 
 #include "irrlichttypes.h"
 #include "common/c_types.h"
 #include "common/c_internal.h"
+#include "debug.h"
+#include "config.h"
 
 #define SCRIPTAPI_LOCK_DEBUG
 #define SCRIPTAPI_DEBUG
@@ -54,9 +59,10 @@ extern "C" {
        setOriginFromTableRaw(index, __FUNCTION__)
 
 enum class ScriptingType: u8 {
+       Async,
        Client,
-       Server,
-       MainMenu
+       MainMenu,
+       Server
 };
 
 class Server;
@@ -67,10 +73,16 @@ class IGameDef;
 class Environment;
 class GUIEngine;
 class ServerActiveObject;
+struct PlayerHPChangeReason;
 
-class ScriptApiBase {
+class ScriptApiBase : protected LuaHelper {
 public:
-       ScriptApiBase();
+       ScriptApiBase(ScriptingType type);
+       // fake constructor to allow script API classes (e.g ScriptApiEnv) to virtually inherit from this one.
+       ScriptApiBase()
+       {
+               FATAL_ERROR("ScriptApiBase created without ScriptingType!");
+       }
        virtual ~ScriptApiBase();
        DISABLE_CLASS_COPY(ScriptApiBase);
 
@@ -91,7 +103,6 @@ class ScriptApiBase {
 
        IGameDef *getGameDef() { return m_gamedef; }
        Server* getServer();
-       void setType(ScriptingType type) { m_type = type; }
        ScriptingType getType() { return m_type; }
 #ifndef SERVER
        Client* getClient();
@@ -101,6 +112,8 @@ class ScriptApiBase {
        void setOriginDirect(const char *origin);
        void setOriginFromTableRaw(int index, const char *fxn);
 
+       void clientOpenLibs(lua_State *L);
+
 protected:
        friend class LuaABM;
        friend class LuaLBM;
@@ -128,11 +141,13 @@ class ScriptApiBase {
 
        void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj);
 
+       void pushPlayerHPChangeReason(lua_State *L, const PlayerHPChangeReason& reason);
+
        std::recursive_mutex m_luastackmutex;
        std::string     m_last_run_mod;
        bool            m_secure = false;
 #ifdef SCRIPTAPI_LOCK_DEBUG
-       int             m_lock_recursion_count;
+       int             m_lock_recursion_count{};
        std::thread::id m_owning_thread;
 #endif