]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/common/c_internal.h
Omnicleanup: header cleanup, add ModApiUtil shared between game and mainmenu
[dragonfireclient.git] / src / script / common / c_internal.h
index dafde5843aa6a3e8670283faaf7acaf8cd033318..9a50b8e960c18db32cd65a97cb9ac02c7f7ef96c 100644 (file)
@@ -27,34 +27,46 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef C_INTERNAL_H_
 #define C_INTERNAL_H_
 
-class Server;
-class ScriptApi;
-#include <iostream>
-
-#include "lua_api/l_base.h"
-
 extern "C" {
-#include "lua.h"
+#include <lua.h>
+#include <lauxlib.h>
 }
 
-#define luamethod(class, name) {#name, class::l_##name}
-#define STACK_TO_SERVER(L) get_scriptapi(L)->getServer()
-#define API_FCT(name) registerFunction(L,#name,l_##name,top)
-
-#define REGISTER_LUA_REF(cln)                                                  \
-class ModApi_##cln : public ModApiBase {                                       \
-       public:                                                                    \
-               ModApi_##cln() : ModApiBase() {};                                      \
-               bool Initialize(lua_State* L, int top) {                               \
-                       cln::Register(L);                                                  \
-                       return true;                                                       \
-               };                                                                     \
-};                                                                             \
-ModApi_##cln macro_generated_prototype__##cln;
+#include "common/c_types.h"
 
+// What script_run_callbacks does with the return values of callbacks.
+// Regardless of the mode, if only one callback is defined,
+// its return value is the total return value.
+// Modes only affect the case where 0 or >= 2 callbacks are defined.
+enum RunCallbacksMode
+{
+       // Returns the return value of the first callback
+       // Returns nil if list of callbacks is empty
+       RUN_CALLBACKS_MODE_FIRST,
+       // Returns the return value of the last callback
+       // Returns nil if list of callbacks is empty
+       RUN_CALLBACKS_MODE_LAST,
+       // If any callback returns a false value, the first such is returned
+       // Otherwise, the first callback's return value (trueish) is returned
+       // Returns true if list of callbacks is empty
+       RUN_CALLBACKS_MODE_AND,
+       // Like above, but stops calling callbacks (short circuit)
+       // after seeing the first false value
+       RUN_CALLBACKS_MODE_AND_SC,
+       // If any callback returns a true value, the first such is returned
+       // Otherwise, the first callback's return value (falseish) is returned
+       // Returns false if list of callbacks is empty
+       RUN_CALLBACKS_MODE_OR,
+       // Like above, but stops calling callbacks (short circuit)
+       // after seeing the first true value
+       RUN_CALLBACKS_MODE_OR_SC,
+       // Note: "a true value" and "a false value" refer to values that
+       // are converted by lua_toboolean to true or false, respectively.
+};
 
-ScriptApi*  get_scriptapi          (lua_State *L);
 std::string script_get_backtrace   (lua_State *L);
 void        script_error           (lua_State *L, const char *fmt, ...);
+void        script_run_callbacks   (lua_State *L, int nargs,
+                                    RunCallbacksMode mode);
 
 #endif /* C_INTERNAL_H_ */