Support for element names and hex constants for the PROP tool

This commit is contained in:
Simon Robertshaw 2011-12-21 16:47:46 +00:00
parent 0f59a82ade
commit fcac7dbe09

View File

@ -1018,7 +1018,7 @@ char *input_ui(pixel *vid_buf, char *title, char *prompt, char *text, char *shad
void prop_edit_ui(pixel *vid_buf, int x, int y) void prop_edit_ui(pixel *vid_buf, int x, int y)
{ {
float valuef; float valuef;
char valuec; unsigned char valuec;
int valuei; int valuei;
int format; int format;
size_t propoffset; size_t propoffset;
@ -1100,7 +1100,6 @@ void prop_edit_ui(pixel *vid_buf, int x, int y)
break; break;
} }
sscanf(ed2.str, "%f", &valuef);
if(ed.selected!=-1) if(ed.selected!=-1)
{ {
if (strcmp(ed.str,"type")==0){ if (strcmp(ed.str,"type")==0){
@ -1135,7 +1134,7 @@ void prop_edit_ui(pixel *vid_buf, int x, int y)
format = 2; format = 2;
} else if (strcmp(ed.str,"dcolour")==0){ } else if (strcmp(ed.str,"dcolour")==0){
propoffset = offsetof(particle, dcolour); propoffset = offsetof(particle, dcolour);
format = 0; format = 3;
} }
} else { } else {
error_ui(vid_buf, 0, "Invalid property"); error_ui(vid_buf, 0, "Invalid property");
@ -1143,16 +1142,64 @@ void prop_edit_ui(pixel *vid_buf, int x, int y)
} }
if(format==0){ if(format==0){
valuei = (int)valuef; sscanf(ed2.str, "%d", &valuei);
flood_prop(x, y, propoffset, &valuei, format); flood_prop(x, y, propoffset, &valuei, format);
} }
if(format==1){ if(format==1){
valuec = (char)valuef; int isint = 1, i;
//Check if it's an element name
for(i = 0; i < strlen(ed2.str); i++)
{
if(!(ed2.str[i] >= '0' && ed2.str[i] <= '9'))
{
isint = 0;
break;
}
}
if(isint)
{
sscanf(ed2.str, "%u", &valuei);
}
else
{
if(!console_parse_type(ed2.str, &valuei, NULL))
{
error_ui(vid_buf, 0, "Invalid element name");
goto exit;
}
}
valuec = (unsigned char)valuei;
flood_prop(x, y, propoffset, &valuec, format); flood_prop(x, y, propoffset, &valuec, format);
} }
if(format==2){ if(format==2){
sscanf(ed2.str, "%f", &valuef);
flood_prop(x, y, propoffset, &valuef, format); flood_prop(x, y, propoffset, &valuef, format);
} }
if(format==3){
int j;
unsigned int valueui;
if(ed2.str[0] == '#') // #FFFFFFFF
{
//Convert to lower case
for(j = 0; j < strlen(ed2.str); j++)
ed2.str[j] = tolower(ed2.str[j]);
sscanf(ed2.str, "#%x", &valueui);
printf("%s, %u\n", ed2.str, valueui);
}
else if(ed2.str[0] == '0' && ed2.str[1] == 'x') // 0xFFFFFFFF
{
//Convert to lower case
for(j = 0; j < strlen(ed2.str); j++)
ed2.str[j] = tolower(ed2.str[j]);
sscanf(ed2.str, "0x%x", &valueui);
printf("%s, %u\n", ed2.str, valueui);
}
else
{
sscanf(ed2.str, "%d", &valueui);
}
flood_prop(x, y, propoffset, &valueui, 0);
}
exit: exit:
while (!sdl_poll()) while (!sdl_poll())
{ {