From bb3b1a52ac2e5ad935640558f312c767a8ad9f15 Mon Sep 17 00:00:00 2001 From: Philip Date: Thu, 28 Oct 2010 19:31:06 -0400 Subject: [PATCH] added specific element eraser again for my own uses sinces everyone else thinks its useless. alt-click to pick and then alt-click in the game to erase the picked element. you could then have right and left click be two different elements and alt-click on the eraser to keep two elements selected and an easy to use eraser as well --- includes/interface.h | 1 + src/interface.c | 43 +++++++++++++++++++++++++++++++++++++++++-- src/powder.c | 23 +++++++++++++++++++---- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/includes/interface.h b/includes/interface.h index 0f4dd3fd6..ddc260db0 100644 --- a/includes/interface.h +++ b/includes/interface.h @@ -100,6 +100,7 @@ struct ui_checkbox }; typedef struct ui_checkbox ui_checkbox; +int SLALT; extern SDLMod sdl_mod; extern int sdl_key, sdl_wheel, sdl_caps, sdl_ascii, sdl_zoom_trig; extern char *shift_0; diff --git a/src/interface.c b/src/interface.c index 4ab7bf4ac..2c6664512 100644 --- a/src/interface.c +++ b/src/interface.c @@ -1484,6 +1484,15 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx, drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); h = n; } + if(!bq && mx>=x+32 && mx=y && my< y+15&&(sdl_mod & (KMOD_LALT))) + { + drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255); + h = n; + } + else if(n==SLALT) + { + drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255); + } else if(n==*sl) { drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); @@ -1509,6 +1518,15 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx, drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); h = n; } + if(!bq && mx>=x+32 && mx=y && my< y+15&&(sdl_mod & (KMOD_LALT))) + { + drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255); + h = n; + } + else if(n==SLALT) + { + drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255); + } else if(n==*sl) { drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); @@ -1537,6 +1555,15 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx, drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); h = n; } + if(!bq && mx>=x+32 && mx=y && my< y+15&&(sdl_mod & (KMOD_LALT))) + { + drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255); + h = n; + } + else if(n==SLALT) + { + drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255); + } else if(n==*sl) { drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); @@ -1564,11 +1591,23 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx, if(b==1&&h!=-1) { - *sl = h; + if(sdl_mod & (KMOD_LALT)) + { + SLALT = h; + } + else{ + *sl = h; + } } if(b==4&&h!=-1) { - *sr = h; + if(sdl_mod & (KMOD_LALT)) + { + SLALT = h; + } + else{ + *sr = h; + } } } diff --git a/src/powder.c b/src/powder.c index fc645a5e5..526066377 100644 --- a/src/powder.c +++ b/src/powder.c @@ -663,9 +663,13 @@ inline void delete_part(int x, int y) i = pmap[y][x]; if(!i || (i>>8)>=NPART) return; - - kill_part(i>>8); - pmap[y][x] = 0; // just in case + if((parts[i>>8].type==SLALT)||SLALT==-1||SLALT==0) + { + kill_part(i>>8); + pmap[y][x] = 0; + } + else + return; } #ifdef WIN32 @@ -3580,7 +3584,7 @@ int flood_parts(int x, int y, int c, int cm, int bm) int create_parts(int x, int y, int r, int c) { - int i, j, f = 0, u, v, oy, ox, b = 0, dw = 0; //n; + int i, j, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0; //n; if(c == 125) { @@ -3691,6 +3695,14 @@ int create_parts(int x, int y, int r, int c) } return 1; } + if(sdl_mod & (KMOD_LALT)) + { + for(j=-r; j<=r; j++) + for(i=-r; i<=r; i++) + if(i*i+j*j<=r*r) + delete_part(x+i, y+j); + return 1; + } if(c == SPC_AIR || c == SPC_HEAT || c == SPC_COOL || c == SPC_VACUUM) { for(j=-r; j<=r; j++) @@ -3702,10 +3714,13 @@ int create_parts(int x, int y, int r, int c) if(c == 0) { + stemp = SLALT; + SLALT = -1; for(j=-r; j<=r; j++) for(i=-r; i<=r; i++) if(i*i+j*j<=r*r) delete_part(x+i, y+j); + SLALT = stemp; return 1; }