58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
#include "luamatrix.h"
|
|
#include "matrix.h"
|
|
#include "lua.hpp"
|
|
|
|
// CREATE ARRAY TYPE AND EXPOSE matrixpanel TO LUA.
|
|
// metatable method for handling "array[index]"
|
|
/* static int matrixpanel_index (lua_State* L) {
|
|
CRGB** parray = (CRGB **) luaL_checkudata(L, 1, "matrixpanel");
|
|
int index = luaL_checkint(L, 2);
|
|
lua_pushnumber(L, (*parray)[index-1]);
|
|
return 1;
|
|
}
|
|
|
|
// metatable method for handle "array[index] = value"
|
|
static int matrixpanel_newindex (lua_State* L) {
|
|
CRGB** parray = (CRGB **) luaL_checkudata(L, 1, "matrixpanel");
|
|
int index = luaL_checkint(L, 2);
|
|
int value = luaL_checkint(L, 3);
|
|
(*parray)[index-1] = value;
|
|
return 0;
|
|
} */
|
|
|
|
static const struct luaL_Reg matrixpanel_metamethods[] = {
|
|
// { "__index", matrixpanel_index },
|
|
// { "__newindex", matrixpanel_newindex },
|
|
{NULL, NULL}
|
|
};
|
|
|
|
|
|
// create a metatable for our array type
|
|
static void create_matrixpanel_type(lua_State* L) {
|
|
luaL_newmetatable(L, "matrixpanel");
|
|
luaL_setfuncs(L, matrixpanel_metamethods, 0);
|
|
//lua_setglobal(L, "matrixpanel");
|
|
}
|
|
|
|
|
|
// expose an array to lua, by storing it in a userdata with the array metatable
|
|
static int expose_array(lua_State* L) {
|
|
RGBmatrixPanel **pmatrix = (RGBmatrixPanel **) lua_newuserdata(L, sizeof(RGBmatrixPanel **));
|
|
*pmatrix = &matrixpanel;
|
|
luaL_getmetatable(L, "matrixpanel");
|
|
lua_setmetatable(L, -2);
|
|
return 1;
|
|
}
|
|
|
|
// test routine which exposes our test array to Lua
|
|
static int getmatrixpanel (lua_State* L) {
|
|
return expose_array( L );
|
|
}
|
|
|
|
int luaopen_matrixpanel (lua_State* L) {
|
|
create_matrixpanel_type(L);
|
|
|
|
// make our test routine available to Lua
|
|
lua_register(L, "matrixpanel", getmatrixpanel);
|
|
return 0;
|
|
}
|