Decoration has a color menu. GoL uses less memory(17MB less), and probably a bit faster.

This commit is contained in:
Cracker64 2011-05-10 15:32:00 -04:00 committed by Simon Robertshaw
parent e675fb3cc1
commit 9d20d6af82
6 changed files with 110 additions and 34 deletions

View File

@ -159,8 +159,8 @@ int ISWIRE;
int GSPEED; int GSPEED;
int love[XRES/9][YRES/9]; int love[XRES/9][YRES/9];
int lolz[XRES/9][YRES/9]; int lolz[XRES/9][YRES/9];
int gol[XRES][YRES]; unsigned char gol[XRES][YRES];
int gol2[XRES][YRES][NGOL+1]; unsigned char gol2[XRES][YRES][NGOL+1];
int SEC; int SEC;
int SEC2; int SEC2;
int console_mode; int console_mode;

View File

@ -26,7 +26,7 @@ typedef struct menu_section menu_section;
#define SC_CRACKER2 13 #define SC_CRACKER2 13
#define SC_TOTAL 10 #define SC_TOTAL 10
static menu_section msections[] = //itemcount and doshow do not do anything currently. static menu_section msections[] = //doshow does not do anything currently.
{ {
{"\xC1", "Walls", 0, 1}, {"\xC1", "Walls", 0, 1},
{"\xC2", "Electronics", 0, 1}, {"\xC2", "Electronics", 0, 1},
@ -44,6 +44,23 @@ static menu_section msections[] = //itemcount and doshow do not do anything curr
{"\xC8", "Cracker!", 0, 0}, {"\xC8", "Cracker!", 0, 0},
}; };
static menu_section colorsections[] = //doshow does not do anything currently.
{
{"\xD1", "Colors", 7, 1},
{"\xC5", "Tools", 0, 1},
};
static menu_wall colorlist[] =
{
{PIXPACK(0xFF0000), "Red"},
{PIXPACK(0x00FF00), "Green"},
{PIXPACK(0x0000FF), "Blue"},
{PIXPACK(0xFFFF00), "Yellow"},
{PIXPACK(0xFF00FF), "Pink"},
{PIXPACK(0x00FFFF), "Cyan"},
{PIXPACK(0xFFFFFF), "White"},
};
struct ui_edit struct ui_edit
{ {
int x, y, w, nx, h; int x, y, w, nx, h;
@ -177,6 +194,8 @@ void menu_ui(pixel *vid_buf, int i, int *sl, int *sr);
void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int *dae, int b, int bq, int mx, int my); void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int *dae, int b, int bq, int mx, int my);
int color_menu_ui(pixel *vid_buf, int i, int *cr, int *cg, int *cb, int b, int bq, int mx, int my);
int sdl_poll(void); int sdl_poll(void);
void set_cmode(int cm); void set_cmode(int cm);

View File

@ -1,10 +1,8 @@
#include <element.h> #include <element.h>
#if defined(WIN32) && !defined(__GNUC__)
_inline int create_n_parts(int n, int x, int y, float vx, float vy, int t)
#else
inline int create_n_parts(int n, int x, int y, float vx, float vy, int t)//testing a new deut create part inline int create_n_parts(int n, int x, int y, float vx, float vy, int t)//testing a new deut create part
#endif
{ {
int i, c; int i, c;
n = (n/50); n = (n/50);
@ -82,7 +80,7 @@ int update_NEUT(UPDATE_FUNC_ARGS) {
#ifdef SDEUT #ifdef SDEUT
else if ((r&0xFF)==PT_DEUT && (pressureFactor+1+(parts[i].life/100))>(rand()%1000)) else if ((r&0xFF)==PT_DEUT && (pressureFactor+1+(parts[i].life/100))>(rand()%1000))
{ {
create_n_parts(parts[r>>8].life, x+rx, y+ry, parts[i].vx, parts[i].vy, PT_NEUT); //create_n_parts(parts[r>>8].life, x+rx, y+ry, parts[i].vx, parts[i].vy, PT_NEUT);
kill_part(r>>8); kill_part(r>>8);
} }
#else #else

View File

@ -448,7 +448,7 @@ void draw_tool(pixel *vid_buf, int b, int sl, int sr, unsigned pc, unsigned iswa
} }
} }
*/ */
//draw walls //draws walls and elements for menu
int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc) int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc)
{ {
int i, j, c; int i, j, c;
@ -3139,6 +3139,11 @@ void draw_decorations(pixel *vid_buf,pixel *decorations)
void create_decorations(pixel *decorations,int x, int y, int rx, int ry, int r, int g, int b) void create_decorations(pixel *decorations,int x, int y, int rx, int ry, int r, int g, int b)
{ {
int i,j; int i,j;
if (rx==0 && ry==0)
{
decorations[(y)*(XRES+BARSIZE)+(x)] = PIXRGB(r, g, b);
return;
}
for (j=-ry; j<=ry; j++) for (j=-ry; j<=ry; j++)
for (i=-rx; i<=rx; i++) for (i=-rx; i<=rx; i++)
if(y+j>=0 && x+i>=0 && x+i<XRES && y+j<YRES) if(y+j>=0 && x+i>=0 && x+i<XRES && y+j<YRES)

View File

@ -1918,6 +1918,52 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int *dae, int b, int bq
} }
} }
} }
int color_menu_ui(pixel *vid_buf, int i, int *cr, int *cg, int *cb, int b, int bq, int mx, int my)
{
int h,x,y,n=0,height,width,sy,rows=0,xoff=0,fwidth,a,c;
fwidth = colorsections[i].itemcount*31;
h = -1;
x = XRES-BARSIZE-18;
y = YRES+5;
sy = y;
if(i==1) //color menu
{
if (fwidth > XRES-BARSIZE) { //fancy scrolling
float overflow = fwidth-(XRES-BARSIZE), location = ((float)XRES-BARSIZE)/((float)(mx-(XRES-BARSIZE)));
xoff = (int)(overflow / location);
}
for (n = 0; n<7; n++)
{
for (a=1; a<15; a++)
{
for (c=1; c<27; c++)
{
vid_buf[(XRES+BARSIZE)*(y+a)+((x-xoff)+c)] = colorlist[n].colour;
}
}
x -= 26+5;
if (!bq && mx>=x+32-xoff && mx<x+58-xoff && my>=y && my< y+15)
{
drawrect(vid_buf, x+30-xoff, y-1, 29, 17, 255, 55, 55, 255);
h = n;
}
}
}
if(h!=-1)
{
drawtext(vid_buf, XRES-textwidth((char *)colorlist[h].descs)-BARSIZE, sy-14, (char *)colorlist[h].descs, 255, 255, 255, 255);
}
//these are click events, b=1 is left click, b=4 is right
//h has the value of the element it is over, and -1 if not over an element
if (b==1 && h!=-1)
{
*cr = PIXR(colorlist[h].colour);
*cg = PIXG(colorlist[h].colour);
*cb = PIXB(colorlist[h].colour);
return 1;
}
return 0;
}
int sdl_poll(void) int sdl_poll(void)
{ {
@ -4304,7 +4350,7 @@ void decorations_ui(pixel *vid_buf,pixel *decorations,int *bsx,int *bsy)
drawrect(vid_buf, window_offset_x + onleft_button_offset_x +1, window_offset_y +255+6, 12, 12, 255, 255, 255, 255); drawrect(vid_buf, window_offset_x + onleft_button_offset_x +1, window_offset_y +255+6, 12, 12, 255, 255, 255, 255);
drawrect(vid_buf, window_offset_x + 230, window_offset_y +255+6, 26, 12, 255, 255, 255, 255); drawrect(vid_buf, window_offset_x + 230, window_offset_y +255+6, 26, 12, 255, 255, 255, 255);
drawtext(vid_buf, window_offset_x + 232, window_offset_y +255+9, "Clear", 255, 255, 255, 255); drawtext(vid_buf, window_offset_x + 232, window_offset_y +255+9, "Clear", 255, 255, 255, 255);
drawtext(vid_buf, 2, 388, "Welcome to the decoration editor v.1 (by cracker64) \nThis space should be used for basic color swatches to click on, and maybe some other tool buttons.\nPro tip: click the current color to move the selector to the other side. ", 255, 255, 255, 255); drawtext(vid_buf, 2, 388, "Welcome to the decoration editor v.1 (by cracker64) \n\nPro tip: click the current color to move the selector to the other side. Left click is eraser. ", 255, 255, 255, 255);
ui_edit_draw(vid_buf, &box_R); ui_edit_draw(vid_buf, &box_R);
ui_edit_draw(vid_buf, &box_G); ui_edit_draw(vid_buf, &box_G);
ui_edit_draw(vid_buf, &box_B); ui_edit_draw(vid_buf, &box_B);
@ -4327,7 +4373,11 @@ void decorations_ui(pixel *vid_buf,pixel *decorations,int *bsx,int *bsy)
HSV_to_RGB(0,0,vv,&cr,&cg,&cb); HSV_to_RGB(0,0,vv,&cr,&cg,&cb);
vid_buf[(vv+grid_offset_y)*(XRES+BARSIZE)+(i+grid_offset_x+255+4)] = PIXRGB(cr, cg, cb); vid_buf[(vv+grid_offset_y)*(XRES+BARSIZE)+(i+grid_offset_x+255+4)] = PIXRGB(cr, cg, cb);
} }
if( color_menu_ui(vid_buf, 1, &cr, &cg, &cb, b, bq, mx, my) )
RGB_to_HSV(cr,cg,cb,&h,&s,&v);
HSV_to_RGB(h,s,v,&cr,&cg,&cb); HSV_to_RGB(h,s,v,&cr,&cg,&cb);
fillrect(vid_buf, window_offset_x + onleft_button_offset_x +1, window_offset_y +255+6, 12, 12, cr, cg, cb, 255); fillrect(vid_buf, window_offset_x + onleft_button_offset_x +1, window_offset_y +255+6, 12, 12, cr, cg, cb, 255);
sprintf(box_R.str,"%d",cr); sprintf(box_R.str,"%d",cr);
sprintf(box_G.str,"%d",cg); sprintf(box_G.str,"%d",cg);
@ -4374,6 +4424,10 @@ void decorations_ui(pixel *vid_buf,pixel *decorations,int *bsx,int *bsy)
if(b && mx >= window_offset_x + 230 && my >= window_offset_y +255+6 && mx <= window_offset_x + 230 +26 && my <= window_offset_y +255+5 +13) if(b && mx >= window_offset_x + 230 && my >= window_offset_y +255+6 && mx <= window_offset_x + 230 +26 && my <= window_offset_y +255+5 +13)
memset(decorations, 0,(XRES+BARSIZE)*YRES*PIXELSIZE); memset(decorations, 0,(XRES+BARSIZE)*YRES*PIXELSIZE);
} }
else if (mx > XRES || my > YRES)
{
//click outside normal drawing area
}
else if (b)//there is a click, outside window else if (b)//there is a click, outside window
{ {
if (!(b&1)) if (!(b&1))

View File

@ -556,53 +556,53 @@ void HSV_to_RGB(int h,int s,int v,int *r,int *g,int *b)//convert 0-255 HSV value
{ {
float hh, ss, vv, c, x; float hh, ss, vv, c, x;
int m; int m;
hh = h/42.667f;//normalize values hh = h/42.66667f;//normalize values
ss = s/256.0f; ss = s/255.0f;
vv = v/256.0f; vv = v/255.0f;
c = vv * ss; c = vv * ss;
x = c * ( 1 - fabsf(fmod(hh,2.0) -1) ); x = c * ( 1 - fabsf(fmod(hh,2.0) -1) );
if(hh<1){ if(hh<1){
*r = (int)(c*256.0); *r = (int)(c*255.0);
*g = (int)(x*256.0); *g = (int)(x*255.0);
*b = 0; *b = 0;
} }
else if(hh<2){ else if(hh<2){
*r = (int)(x*256.0); *r = (int)(x*255.0);
*g = (int)(c*256.0); *g = (int)(c*255.0);
*b = 0; *b = 0;
} }
else if(hh<3){ else if(hh<3){
*r = 0; *r = 0;
*g = (int)(c*256.0); *g = (int)(c*255.0);
*b = (int)(x*256.0); *b = (int)(x*255.0);
} }
else if(hh<4){ else if(hh<4){
*r = 0; *r = 0;
*g = (int)(x*256.0); *g = (int)(x*255.0);
*b = (int)(c*256.0); *b = (int)(c*255.0);
} }
else if(hh<5){ else if(hh<5){
*r = (int)(x*256.0); *r = (int)(x*255.0);
*g = 0; *g = 0;
*b = (int)(c*256.0); *b = (int)(c*255.0);
} }
else if(hh<6){ else if(hh<6){
*r = (int)(c*256.0); *r = (int)(c*255.0);
*g = 0; *g = 0;
*b = (int)(x*256.0); *b = (int)(x*255.0);
} }
m = (int)((vv-c)*256.0); m = (int)((vv-c)*255.0);
*r += m; *r += m;
*g += m; *g += m;
*b += m; *b += m;
} }
void RGB_to_HSV(int r,int g,int b,int *h,int *s,int *v)//convert 0-255 HSV values to 0-255 RGB void RGB_to_HSV(int r,int g,int b,int *h,int *s,int *v)//convert 0-255 RGB values to 0-255 HSV
{ {
float rr, gg, bb, a,x,c,d; float rr, gg, bb, a,x,c,d;
rr = r/256.0f;//normalize values rr = r/255.0f;//normalize values
gg = g/256.0f; gg = g/255.0f;
bb = b/256.0f; bb = b/255.0f;
a = fmin(rr,gg); a = fmin(rr,gg);
a = fmin(a,bb); a = fmin(a,bb);
x = fmax(rr,gg); x = fmax(rr,gg);
@ -611,15 +611,15 @@ void RGB_to_HSV(int r,int g,int b,int *h,int *s,int *v)//convert 0-255 HSV value
{ {
*h = 0; *h = 0;
*s = 0; *s = 0;
*v = a; *v = (int)(a*255.0);
} }
else else
{ {
c = (rr==a) ? gg-bb : ((bb==a) ? rr-gg : bb-rr); c = (rr==a) ? gg-bb : ((bb==a) ? rr-gg : bb-rr);
d = (rr==a) ? 3 : ((bb==a) ? 1 : 5); d = (rr==a) ? 3 : ((bb==a) ? 1 : 5);
*h = (int)(42.667*(d - c/(x - a))); *h = (int)(42.66667*(d - c/(x - a)));
*s = (int)(256.0*((x - a)/x)); *s = (int)(255.0*((x - a)/x));
*v = (int)(256.0*x); *v = (int)(255.0*x);
} }
} }
vector2d v2d_zero = {0,0}; vector2d v2d_zero = {0,0};