Element transitions also editable now

This commit is contained in:
Simon Robertshaw 2011-12-09 16:30:33 +00:00
parent f5a58d14f2
commit e519aa911b
2 changed files with 127 additions and 9 deletions

View File

@ -35,7 +35,10 @@ int luacon_partread(lua_State* l);
int luacon_partwrite(lua_State* l);
int luacon_elementread(lua_State* l);
int luacon_elementwrite(lua_State* l);
int luacon_transitionread(lua_State* l);
int luacon_transitionwrite(lua_State* l);
int luacon_particle_getproperty(char * key, int * format);
int luacon_transition_getproperty(char * key, int * format);
int luacon_element_getproperty(char * key, int * format);
int process_command_lua(pixel *vid_buf, char *console, char *console_error);

View File

@ -13,7 +13,7 @@ int *mouseclick_functions = NULL;
int tptProperties; //Table for some TPT properties
int tptPropertiesVersion;
int tptElements; //Table for TPT element names
int tptParts, tptPartsMeta;
int tptParts, tptPartsMeta, tptElementTransitions;
void luacon_open(){
int i = 0, j;
char tmpname[12];
@ -134,19 +134,12 @@ void luacon_open(){
lua_newtable(l);
tptElements = lua_gettop(l);
/*lua_pushinteger(l, PT_NONE);
lua_setfield(l, tptElements, "none");
lua_pushinteger(l, PT_PLEX);
lua_setfield(l, tptElements, "c4");
lua_pushinteger(l, PT_C5);
lua_setfield(l, tptElements, "c5");*/
for(i = 1; i < PT_NUM; i++)
{
int currentElementMeta, currentElement;
for(j = 0; j < strlen(ptypes[i].name); j++)
tmpname[j] = tolower(ptypes[i].name[j]);
tmpname[strlen(ptypes[i].name)] = 0;
/*lua_pushinteger(l, i);*/
lua_newtable(l);
currentElement = lua_gettop(l);
@ -166,7 +159,31 @@ void luacon_open(){
lua_setfield(l, tptElements, tmpname);
}
lua_setfield(l, tptProperties, "el");
//lua_setglobal(l, "pel");
lua_newtable(l);
tptElementTransitions = lua_gettop(l);
for(i = 1; i < PT_NUM; i++)
{
int currentElementMeta, currentElement;
for(j = 0; j < strlen(ptypes[i].name); j++)
tmpname[j] = tolower(ptypes[i].name[j]);
tmpname[strlen(ptypes[i].name)] = 0;
lua_newtable(l);
currentElement = lua_gettop(l);
lua_newtable(l);
currentElementMeta = lua_gettop(l);
lua_pushinteger(l, i);
lua_setfield(l, currentElement, "value");
lua_pushcfunction(l, luacon_transitionwrite);
lua_setfield(l, currentElementMeta, "__newindex");
lua_pushcfunction(l, luacon_transitionread);
lua_setfield(l, currentElementMeta, "__index");
lua_setmetatable(l, currentElement);
lua_setfield(l, tptElementTransitions, tmpname);
}
lua_setfield(l, tptProperties, "eltransition");
lua_el_func = calloc(PT_NUM, sizeof(int));
lua_el_mode = calloc(PT_NUM, sizeof(int));
@ -318,6 +335,104 @@ int luacon_particle_getproperty(char * key, int * format)
}
return offset;
}
int luacon_transition_getproperty(char * key, int * format)
{
int offset;
if (strcmp(key, "presHighValue")==0){
offset = offsetof(part_transition, phv);
*format = 1;
} else if (strcmp(key, "presHighType")==0){
offset = offsetof(part_transition, pht);
*format = 0;
} else if (strcmp(key, "presLowValue")==0){
offset = offsetof(part_transition, plv);
*format = 1;
} else if (strcmp(key, "presLowType")==0){
offset = offsetof(part_transition, plt);
*format = 0;
} else if (strcmp(key, "tempHighValue")==0){
offset = offsetof(part_transition, thv);
*format = 1;
} else if (strcmp(key, "tempHighType")==0){
offset = offsetof(part_transition, tht);
*format = 0;
} else if (strcmp(key, "tempLowValue")==0){
offset = offsetof(part_transition, tlv);
*format = 1;
} else if (strcmp(key, "tempLowType")==0){
offset = offsetof(part_transition, tlt);
*format = 0;
} else {
offset = -1;
}
return offset;
}
int luacon_transitionread(lua_State* l){
int format, offset;
int tempinteger;
float tempfloat;
int i;
char * key = mystrdup(luaL_optstring(l, 2, ""));
offset = luacon_transition_getproperty(key, &format);
//Get Raw Index value for element
lua_pushstring(l, "value");
lua_rawget(l, 1);
i = lua_tointeger(l, lua_gettop(l));
lua_pop(l, 1);
if(i < 0 || i >= PT_NUM || offset==-1)
{
return luaL_error(l, "Invalid property");
}
switch(format)
{
case 0:
tempinteger = *((int*)(((void*)&ptransitions[i])+offset));
lua_pushnumber(l, tempinteger);
break;
case 1:
tempfloat = *((float*)(((void*)&ptransitions[i])+offset));
lua_pushnumber(l, tempfloat);
break;
}
free(key);
return 1;
}
int luacon_transitionwrite(lua_State* l){
int format, offset;
int tempinteger;
float tempfloat;
int i;
char * key = mystrdup(luaL_optstring(l, 2, ""));
offset = luacon_transition_getproperty(key, &format);
//Get Raw Index value for element
lua_pushstring(l, "value");
lua_rawget(l, 1);
i = lua_tointeger (l, lua_gettop(l));
lua_pop(l, 1);
if(i < 0 || i >= PT_NUM || offset==-1)
{
return luaL_error(l, "Invalid property");
}
switch(format)
{
case 0:
*((int*)(((void*)&ptransitions[i])+offset)) = luaL_optinteger(l, 3, 0);
break;
case 1:
*((float*)(((void*)&ptransitions[i])+offset)) = luaL_optnumber(l, 3, 0);
break;
}
free(key);
return 0;
}
int luacon_element_getproperty(char * key, int * format)
{
int offset;