fix "i" argument to graphics functions.

Also, they don't overwrite the default one, you can pass in nil to tpt.element/graphics_func for the function to restore the original.
This commit is contained in:
jacob1 2013-01-23 16:48:21 -05:00
parent 7475a49e0b
commit c5eecff131
4 changed files with 38 additions and 7 deletions

View File

@ -671,16 +671,29 @@ int luatpt_element_func(lua_State *l)
return luaL_error(l, "Invalid element"); return luaL_error(l, "Invalid element");
} }
} }
else if(lua_isnil(l, 1))
{
int element = luaL_optint(l, 2, 0);
if(element > 0 && element < PT_NUM)
{
lua_el_func[element] = 0;
lua_el_mode[element] = 0;
}
else
{
return luaL_error(l, "Invalid element");
}
}
else else
return luaL_error(l, "Not a function"); return luaL_error(l, "Not a function");
return 0; return 0;
} }
int luacon_graphicsReplacement(GRAPHICS_FUNC_ARGS) int luacon_graphicsReplacement(GRAPHICS_FUNC_ARGS, int i)
{ {
int cache = 0, callret; int cache = 0, callret;
lua_rawgeti(luacon_ci->l, LUA_REGISTRYINDEX, lua_gr_func[cpart->type]); lua_rawgeti(luacon_ci->l, LUA_REGISTRYINDEX, lua_gr_func[cpart->type]);
lua_pushinteger(luacon_ci->l, 0); lua_pushinteger(luacon_ci->l, i);
lua_pushinteger(luacon_ci->l, *colr); lua_pushinteger(luacon_ci->l, *colr);
lua_pushinteger(luacon_ci->l, *colg); lua_pushinteger(luacon_ci->l, *colg);
lua_pushinteger(luacon_ci->l, *colb); lua_pushinteger(luacon_ci->l, *colb);
@ -715,7 +728,20 @@ int luatpt_graphics_func(lua_State *l)
{ {
lua_gr_func[element] = function; lua_gr_func[element] = function;
luacon_ren->graphicscache[element].isready = 0; luacon_ren->graphicscache[element].isready = 0;
luacon_sim->elements[element].Graphics = &luacon_graphicsReplacement; return 0;
}
else
{
return luaL_error(l, "Invalid element");
}
}
else if (lua_isnil(l, 1))
{
int element = luaL_optint(l, 2, 0);
if(element > 0 && element < PT_NUM)
{
lua_gr_func[element] = 0;
luacon_ren->graphicscache[element].isready = 0;
return 0; return 0;
} }
else else

View File

@ -55,7 +55,7 @@ int luacon_element_getproperty(char * key, int * format, unsigned int * modified
int luatpt_test(lua_State* l); int luatpt_test(lua_State* l);
int luatpt_getelement(lua_State *l); int luatpt_getelement(lua_State *l);
int luacon_graphicsReplacement(GRAPHICS_FUNC_ARGS); int luacon_graphicsReplacement(GRAPHICS_FUNC_ARGS, int i);
int luatpt_graphics_func(lua_State *l); int luatpt_graphics_func(lua_State *l);
int luacon_elementReplacement(UPDATE_FUNC_ARGS); int luacon_elementReplacement(UPDATE_FUNC_ARGS);

View File

@ -315,6 +315,7 @@ tpt.partsdata = nil");
for(i = 0; i < PT_NUM; i++) for(i = 0; i < PT_NUM; i++)
{ {
lua_el_mode[i] = 0; lua_el_mode[i] = 0;
lua_gr_func[i] = 0;
} }
} }
@ -1163,7 +1164,6 @@ int LuaScriptInterface::elements_element(lua_State * l)
if(lua_type(l, -1) == LUA_TFUNCTION) if(lua_type(l, -1) == LUA_TFUNCTION)
{ {
lua_gr_func[id] = luaL_ref(l, LUA_REGISTRYINDEX); lua_gr_func[id] = luaL_ref(l, LUA_REGISTRYINDEX);
luacon_sim->elements[id].Graphics = &luacon_graphicsReplacement;
} }
else if(lua_type(l, -1) == LUA_TBOOLEAN && !lua_toboolean(l, -1)) else if(lua_type(l, -1) == LUA_TBOOLEAN && !lua_toboolean(l, -1))
{ {
@ -1332,7 +1332,6 @@ int LuaScriptInterface::elements_property(lua_State * l)
{ {
lua_pushvalue(l, 3); lua_pushvalue(l, 3);
lua_gr_func[id] = luaL_ref(l, LUA_REGISTRYINDEX); lua_gr_func[id] = luaL_ref(l, LUA_REGISTRYINDEX);
luacon_sim->elements[id].Graphics = &luacon_graphicsReplacement;
} }
else if(lua_type(l, 3) == LUA_TBOOLEAN && !lua_toboolean(l, -1)) else if(lua_type(l, 3) == LUA_TBOOLEAN && !lua_toboolean(l, -1))
{ {

View File

@ -15,6 +15,8 @@
#include "simulation/Elements.h" #include "simulation/Elements.h"
#include "simulation/ElementGraphics.h" #include "simulation/ElementGraphics.h"
#include "simulation/Air.h" #include "simulation/Air.h"
#include "cat/LuaScriptInterface.h"
#include "cat/LuaScriptHelper.h"
extern "C" extern "C"
{ {
#include "hmap.h" #include "hmap.h"
@ -1158,7 +1160,11 @@ void Renderer::render_parts()
{ {
if (elements[t].Graphics) if (elements[t].Graphics)
{ {
if ((*(elements[t].Graphics))(this, &(sim->parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb)) //That's a lot of args, a struct might be better if (lua_gr_func[t])
{
luacon_graphicsReplacement(this, &(sim->parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb, i);
}
else if ((*(elements[t].Graphics))(this, &(sim->parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb)) //That's a lot of args, a struct might be better
{ {
graphicscache[t].isready = 1; graphicscache[t].isready = 1;
graphicscache[t].pixel_mode = pixel_mode; graphicscache[t].pixel_mode = pixel_mode;