diff options
Diffstat (limited to 'src/cat/LuaScriptInterface.cpp')
| -rw-r--r-- | src/cat/LuaScriptInterface.cpp | 177 |
1 files changed, 166 insertions, 11 deletions
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp index 4561d5d..229064f 100644 --- a/src/cat/LuaScriptInterface.cpp +++ b/src/cat/LuaScriptInterface.cpp @@ -7,6 +7,7 @@ #include <string> #include <iomanip> +#include <vector> #include "Config.h" #include "Format.h" #include "LuaScriptInterface.h" @@ -20,18 +21,31 @@ #include "LuaScriptHelper.h" #include "client/HTTP.h" - #ifdef WIN +#ifdef WIN #include <direct.h> #else #include <sys/stat.h> #endif - #include <time.h> +#include <time.h> LuaScriptInterface::LuaScriptInterface(GameModel * m): CommandInterface(m), currentCommand(false), legacy(new TPTScriptInterface(m)) { + luacon_model = m; + luacon_sim = m->GetSimulation(); + luacon_g = ui::Engine::Ref().g; + luacon_ren = m->GetRenderer(); + luacon_ci = this; + + //New TPT API + l = lua_open(); + luaL_openlibs(l); + + initRendererAPI(); + + //Old TPT API int i = 0, j; char tmpname[12]; int currentElementMeta, currentElement; @@ -105,15 +119,6 @@ LuaScriptInterface::LuaScriptInterface(GameModel * m): luacon_currentCommand = ¤tCommand; luacon_lastError = &lastError; - luacon_model = m; - luacon_sim = m->GetSimulation(); - luacon_g = ui::Engine::Ref().g; - luacon_ren = m->GetRenderer(); - luacon_ci = this; - - l = lua_open(); - luaL_openlibs(l); - //Replace print function with our screen logging thingy lua_pushcfunction(l, luatpt_log); lua_setglobal(l, "print"); @@ -244,6 +249,156 @@ tpt.partsdata = nil"); luacon_eval("dofile(\"autorun.lua\")"); //Autorun lua script } +//// Begin Renderer API + +void LuaScriptInterface::initRendererAPI() +{ + //Methods + struct luaL_reg rendererAPIMethods [] = { + {"renderModes", luatpt_renderer_renderModes}, + {"displayModes", luatpt_renderer_displayModes}, + {"colourMode", luatpt_renderer_colourMode}, + {"colorMode", luatpt_renderer_colourMode}, //Duplicate of above to make americans happy + {NULL, NULL} + }; + luaL_register(l, "renderer", rendererAPIMethods); + int rendererAPI = lua_gettop(l); + + //Static values + //Particle pixel modes/fire mode/effects + lua_pushinteger(l, PMODE); lua_setfield(l, rendererAPI, "PMODE"); + lua_pushinteger(l, PMODE_NONE); lua_setfield(l, rendererAPI, "PMODE_NONE"); + lua_pushinteger(l, PMODE_FLAT); lua_setfield(l, rendererAPI, "PMODE_FLAT"); + lua_pushinteger(l, PMODE_BLOB); lua_setfield(l, rendererAPI, "PMODE_BLOB"); + lua_pushinteger(l, PMODE_BLUR); lua_setfield(l, rendererAPI, "PMODE_BLUR"); + lua_pushinteger(l, PMODE_GLOW); lua_setfield(l, rendererAPI, "PMODE_GLOW"); + lua_pushinteger(l, PMODE_SPARK); lua_setfield(l, rendererAPI, "PMODE_SPARK"); + lua_pushinteger(l, PMODE_FLARE); lua_setfield(l, rendererAPI, "PMODE_FLARE"); + lua_pushinteger(l, PMODE_LFLARE); lua_setfield(l, rendererAPI, "PMODE_LFLARE"); + lua_pushinteger(l, PMODE_ADD); lua_setfield(l, rendererAPI, "PMODE_ADD"); + lua_pushinteger(l, PMODE_BLEND); lua_setfield(l, rendererAPI, "PMODE_BLEND"); + lua_pushinteger(l, PSPEC_STICKMAN); lua_setfield(l, rendererAPI, "PSPEC_STICKMAN"); + lua_pushinteger(l, OPTIONS); lua_setfield(l, rendererAPI, "OPTIONS"); + lua_pushinteger(l, NO_DECO); lua_setfield(l, rendererAPI, "NO_DECO"); + lua_pushinteger(l, DECO_FIRE); lua_setfield(l, rendererAPI, "DECO_FIRE"); + lua_pushinteger(l, FIREMODE); lua_setfield(l, rendererAPI, "FIREMODE"); + lua_pushinteger(l, FIRE_ADD); lua_setfield(l, rendererAPI, "FIRE_ADD"); + lua_pushinteger(l, FIRE_BLEND); lua_setfield(l, rendererAPI, "FIRE_BLEND"); + lua_pushinteger(l, EFFECT); lua_setfield(l, rendererAPI, "EFFECT"); + lua_pushinteger(l, EFFECT_GRAVIN); lua_setfield(l, rendererAPI, "EFFECT_GRAVIN"); + lua_pushinteger(l, EFFECT_GRAVOUT); lua_setfield(l, rendererAPI, "EFFECT_GRAVOUT"); + lua_pushinteger(l, EFFECT_LINES); lua_setfield(l, rendererAPI, "EFFECT_LINES"); + lua_pushinteger(l, EFFECT_DBGLINES); lua_setfield(l, rendererAPI, "EFFECT_DBGLINES"); + + //Display/Render/Colour modes + lua_pushinteger(l, RENDER_EFFE); lua_setfield(l, rendererAPI, "RENDER_EFFE"); + lua_pushinteger(l, RENDER_FIRE); lua_setfield(l, rendererAPI, "RENDER_FIRE"); + lua_pushinteger(l, RENDER_GLOW); lua_setfield(l, rendererAPI, "RENDER_GLOW"); + lua_pushinteger(l, RENDER_BLUR); lua_setfield(l, rendererAPI, "RENDER_BLUR"); + lua_pushinteger(l, RENDER_BLOB); lua_setfield(l, rendererAPI, "RENDER_BLOB"); + lua_pushinteger(l, RENDER_BASC); lua_setfield(l, rendererAPI, "RENDER_BASC"); + lua_pushinteger(l, RENDER_NONE); lua_setfield(l, rendererAPI, "RENDER_NONE"); + lua_pushinteger(l, COLOUR_HEAT); lua_setfield(l, rendererAPI, "COLOUR_HEAT"); + lua_pushinteger(l, COLOUR_LIFE); lua_setfield(l, rendererAPI, "COLOUR_LIFE"); + lua_pushinteger(l, COLOUR_GRAD); lua_setfield(l, rendererAPI, "COLOUR_GRAD"); + lua_pushinteger(l, COLOUR_BASC); lua_setfield(l, rendererAPI, "COLOUR_BASC"); + lua_pushinteger(l, COLOUR_DEFAULT); lua_setfield(l, rendererAPI, "COLOUR_DEFAULT"); + lua_pushinteger(l, DISPLAY_AIRC); lua_setfield(l, rendererAPI, "DISPLAY_AIRC"); + lua_pushinteger(l, DISPLAY_AIRP); lua_setfield(l, rendererAPI, "DISPLAY_AIRP"); + lua_pushinteger(l, DISPLAY_AIRV); lua_setfield(l, rendererAPI, "DISPLAY_AIRV"); + lua_pushinteger(l, DISPLAY_AIRH); lua_setfield(l, rendererAPI, "DISPLAY_AIRH"); + lua_pushinteger(l, DISPLAY_AIR); lua_setfield(l, rendererAPI, "DISPLAY_AIR"); + lua_pushinteger(l, DISPLAY_WARP); lua_setfield(l, rendererAPI, "DISPLAY_WARP"); + lua_pushinteger(l, DISPLAY_PERS); lua_setfield(l, rendererAPI, "DISPLAY_PERS"); + lua_pushinteger(l, DISPLAY_EFFE); lua_setfield(l, rendererAPI, "DISPLAY_EFFE"); +} + +//get/set render modes list +int LuaScriptInterface::luatpt_renderer_renderModes(lua_State * l) +{ + int args = lua_gettop(l); + if(args) + { + int size = 0; + luaL_checktype(l, 1, LUA_TTABLE); + size = luaL_getn(l, 1); + + std::vector<unsigned int> renderModes; + for(int i = 1; i <= size; i++) + { + lua_rawgeti(l, 1, i); + renderModes.push_back(lua_tointeger(l, -1)); + lua_pop(l, 1); + } + luacon_ren->SetRenderMode(renderModes); + return 0; + } + else + { + lua_newtable(l); + std::vector<unsigned int> renderModes = luacon_ren->GetRenderMode(); + int i = 1; + for(std::vector<unsigned int>::iterator iter = renderModes.begin(), end = renderModes.end(); iter != end; ++iter) + { + lua_pushinteger(l, *iter); + lua_rawseti(l, -2, i++); + } + return 1; + } +} + +int LuaScriptInterface::luatpt_renderer_displayModes(lua_State * l) +{ + int args = lua_gettop(l); + if(args) + { + int size = 0; + luaL_checktype(l, 1, LUA_TTABLE); + size = luaL_getn(l, 1); + + std::vector<unsigned int> displayModes; + for(int i = 1; i <= size; i++) + { + lua_rawgeti(l, 1, i); + displayModes.push_back(lua_tointeger(l, -1)); + lua_pop(l, 1); + } + luacon_ren->SetDisplayMode(displayModes); + return 0; + } + else + { + lua_newtable(l); + std::vector<unsigned int> displayModes = luacon_ren->GetDisplayMode(); + int i = 1; + for(std::vector<unsigned int>::iterator iter = displayModes.begin(), end = displayModes.end(); iter != end; ++iter) + { + lua_pushinteger(l, *iter); + lua_rawseti(l, -2, i++); + } + return 1; + } +} + +int LuaScriptInterface::luatpt_renderer_colourMode(lua_State * l) +{ + int args = lua_gettop(l); + if(args) + { + luaL_checktype(l, 1, LUA_TNUMBER); + luacon_ren->SetColourMode(lua_tointeger(l, 1)); + lua_pop(l, 1); + return 0; + } + else + { + lua_pushinteger(l, luacon_ren->GetColourMode()); + return 1; + } + return luaL_error(l, "Not implemented"); +} + + bool LuaScriptInterface::OnBrushChanged(int brushType, int rx, int ry) { luacon_brushx = rx; |
