]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_base.h
Log deprecated Lua function calls (#7491)
[dragonfireclient.git] / src / script / lua_api / l_base.h
index f2e0d59a9ecfc55e542e4f84f27163c55f939eda..b46b5b567b04b5c3da28aeb88e3cd0084c78d6b6 100644 (file)
@@ -17,47 +17,65 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#ifndef L_BASE_H_
-#define L_BASE_H_
+#pragma once
 
-#include "biome.h"
 #include "common/c_types.h"
+#include "common/c_internal.h"
+#include "common/helper.h"
+#include "gamedef.h"
+#include <unordered_map>
 
 extern "C" {
-#include "lua.h"
+#include <lua.h>
+#include <lauxlib.h>
 }
 
-extern struct EnumString es_BiomeTerrainType[];
+#ifndef SERVER
+class Client;
+#endif
 
-class ScriptApi;
+class ScriptApiBase;
 class Server;
 class Environment;
+class GUIEngine;
 
-typedef class ModApiBase {
+class ModApiBase : protected LuaHelper {
 
 public:
-       ModApiBase();
-
-       virtual bool Initialize(lua_State* L, int top) = 0;
-       virtual ~ModApiBase() {};
-
-protected:
-       static Server* getServer(      lua_State* L);
-       static Environment* getEnv(    lua_State* L);
-       static bool registerFunction(   lua_State* L,
-                                                                       const char* name,
-                                                                       lua_CFunction fct,
-                                                                       int top
-                                                                       );
-} ModApiBase;
-
-#if (defined(WIN32) || defined(_WIN32_WCE))
-#define NO_MAP_LOCK_REQUIRED
-#else
-#include "main.h"
-#include "profiler.h"
-#define NO_MAP_LOCK_REQUIRED ScopeProfiler nolocktime(g_profiler,"Scriptapi: unlockable time",SPT_ADD)
-//#define NO_ENVLOCK_REQUIRED assert(getServer(L).m_env_mutex.IsLocked() == false)
-#endif
+       static ScriptApiBase*   getScriptApiBase(lua_State *L);
+       static Server*          getServer(lua_State *L);
+       #ifndef SERVER
+       static Client*          getClient(lua_State *L);
+       #endif // !SERVER
+
+       static IGameDef*        getGameDef(lua_State *L);
+
+       static Environment*     getEnv(lua_State *L);
+       static GUIEngine*       getGuiEngine(lua_State *L);
+       // When we are not loading the mod, this function returns "."
+       static std::string      getCurrentModPath(lua_State *L);
+
+       // Get an arbitrary subclass of ScriptApiBase
+       // by using dynamic_cast<> on getScriptApiBase()
+       template<typename T>
+       static T* getScriptApi(lua_State *L) {
+               ScriptApiBase *scriptIface = getScriptApiBase(L);
+               T *scriptIfaceDowncast = dynamic_cast<T*>(scriptIface);
+               if (!scriptIfaceDowncast) {
+                       throw LuaError("Requested unavailable ScriptApi - core engine bug!");
+               }
+               return scriptIfaceDowncast;
+       }
+
+       static bool registerFunction(lua_State *L,
+                       const char* name,
+                       lua_CFunction func,
+                       int top);
 
-#endif /* L_BASE_H_ */
+       static int l_deprecated_function(lua_State *L);
+       static void markAliasDeprecated(luaL_Reg *reg);
+private:
+       // <old_name> = { <new_name>, <new_function> }
+       static std::unordered_map<std::string, luaL_Reg> m_deprecated_wrappers;
+       static bool m_error_deprecated_calls;
+};