diff --git a/src/lua_colorlib.c b/src/lua_colorlib.c index 47ce79de28f2d2b6647229c8eb3dfe3e10e72eb1..0133a526de60d6a4bfc0408f534febaf180fc7cb 100644 --- a/src/lua_colorlib.c +++ b/src/lua_colorlib.c @@ -469,13 +469,45 @@ UINT8* LUA_CheckColormap(lua_State *L, int ud) return NULL; } +static int lib_colormapGenerate(lua_State *L); +static int lib_colormapMix(lua_State *L); +static int lib_colormapBlend(lua_State *L); +static int lib_colormapTint(lua_State *L); +static int lib_colormapCopy(lua_State *L); +static int lib_colormapCopySkinColor(lua_State *L); + +static const char *const colormap_fn_opt[] = { + "generate", + "mix", + "blend", + "tint", + "copy", + "copySkincolor", + NULL}; + +static int (*colormap_fn_list[6])(lua_State *L) = { + lib_colormapGenerate, + lib_colormapMix, + lib_colormapBlend, + lib_colormapTint, + lib_colormapCopy, + lib_colormapCopySkinColor +}; + static int colormap_get(lua_State *L) { colormap_t *colormap = *((colormap_t **)luaL_checkudata(L, 1, META_COLORMAP)); - UINT32 i = luaL_checkinteger(L, 2); - if (i >= 256) - return luaL_error(L, "colormap index %d out of range (0 - %d)", i, 255); - lua_pushinteger(L, colormap->map[i]); + + if (lua_isnumber(L, 2)) + { + UINT32 i = luaL_checkinteger(L, 2); + if (i >= 256) + return luaL_error(L, "colormap index %d out of range (0 - %d)", i, 255); + lua_pushinteger(L, colormap->map[i]); + } + else + lua_pushcfunction(L, colormap_fn_list[luaL_checkoption(L, 2, NULL, colormap_fn_opt)]); + return 1; }