X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Feditor.c;h=454fb74e88981448c75eabbd3181e0fa25bbf3ca;hp=ee7fe4e58942403d9a98ae51274dee45b79c515f;hb=c3d03cdffce070695ba0520d00667b42b8460087;hpb=d0893e6987c21c25ec137438a18cfe1288362139 diff --git a/src/editor.c b/src/editor.c index ee7fe4e5..454fb74e 100644 --- a/src/editor.c +++ b/src/editor.c @@ -10,24 +10,24 @@ * q99492@pbhrzx.uni-paderborn.de * *----------------------------------------------------------* * editor.c * -* * -* Letzte Aenderung: 15.06.1995 * ***********************************************************/ #include "editor.h" #include "screens.h" -#include "game.h" #include "tools.h" #include "misc.h" +#include "buttons.h" +#include "files.h" static int level_xpos,level_ypos; static BOOL edit_mode; static BOOL name_typing; -static int element_shift; static int new_element1 = EL_MAUERWERK; static int new_element2 = EL_LEERRAUM; static int new_element3 = EL_ERDREICH; -static int editor_element[] = + +int element_shift; +int editor_element[] = { EL_SPIELFIGUR, EL_LEERRAUM, @@ -70,20 +70,24 @@ static int editor_element[] = EL_UNSICHTBAR, EL_TROPFEN, - EL_AMOEBE1, - EL_AMOEBE2, - EL_AMOEBE3, + EL_AMOEBE_TOT, + EL_AMOEBE_NASS, + EL_AMOEBE_NORM, + + EL_AMOEBE_VOLL, +/* EL_LIFE, +*/ EL_LIFE_ASYNC, - EL_ERZ_1, - EL_ERZ_2, + EL_ERZ_EDEL, + EL_ERZ_DIAM, -/* + EL_ZEIT_VOLL, + EL_ZEIT_LEER, EL_BIRNE_AUS, EL_BIRNE_EIN, -*/ EL_SCHLUESSEL1, EL_SCHLUESSEL2, @@ -189,7 +193,7 @@ static int editor_element[] = EL_CHAR_UE, EL_CHAR_COPY }; -static int elements_in_list = sizeof(editor_element)/sizeof(int); +int elements_in_list = sizeof(editor_element)/sizeof(int); void DrawLevelEd() { @@ -275,20 +279,21 @@ void DrawControlWindow() ClearWindow(); + /* Inhalt der Mampfer */ DrawText(ED_COUNT_GADGET_XPOS+1,SY+6, "Contents of a smashed cruncher:",FS_SMALL,FC_YELLOW); for(i=0;i<4;i++) for(y=0;y<4;y++) for(x=0;x<4;x++) { DrawMiniElement(1+5*i+x,2+y,EL_ERDREICH); XFillRectangle(display,drawto,gc, - SX+(2+5*i)*MINI_TILEX-MINI_TILEX/2-1, - SY+(3)*MINI_TILEY-MINI_TILEY/2-1, + SX+(1+5*i)*MINI_TILEX+MINI_TILEX/2-1, + SY+(2)*MINI_TILEY+MINI_TILEY/2-1, 3*MINI_TILEX+2,3*MINI_TILEY+2); } XCopyArea(display,drawto,drawto,gc, - SX+MINI_TILEX,SY+2*MINI_TILEY, + SX+1*MINI_TILEX,SY+2*MINI_TILEY, 4*5*MINI_TILEX,5*MINI_TILEY, - SX+MINI_TILEX-MINI_TILEX/2,SY+2*MINI_TILEY-MINI_TILEY/2); + SX+1*MINI_TILEX-MINI_TILEX/2,SY+2*MINI_TILEY-MINI_TILEY/2); for(i=0;i<4;i++) { for(y=0;y<3;y++) for(x=0;x<3;x++) @@ -299,6 +304,21 @@ void DrawControlWindow() int2str(i+1,1),FS_SMALL,FC_YELLOW); } + /* Inhalt der Amöbe */ + for(y=0;y<2;y++) for(x=0;x<2;x++) + { + DrawMiniElement(29+x,26+y,EL_ERDREICH); + XFillRectangle(display,drawto,gc, + SX+29*MINI_TILEX+MINI_TILEX/2-1, + SY+26*MINI_TILEY+MINI_TILEY/2-1, + MINI_TILEX+2,MINI_TILEY+2); + } + XCopyArea(display,drawto,drawto,gc, + SX+29*MINI_TILEX,SY+26*MINI_TILEY, + 3*MINI_TILEX,3*MINI_TILEY, + SX+29*MINI_TILEX-MINI_TILEX/2,SY+26*MINI_TILEY-MINI_TILEY/2); + DrawMiniElement(29,26,level.amoebe_inhalt); + for(i=0;i<11+3+2;i++) { XCopyArea(display,pix[PIX_DOOR],drawto,gc, @@ -357,7 +377,7 @@ void DrawControlWindow() DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+10*ED_COUNT_TEXT_YSIZE, "Score for each 10 seconds left",FS_SMALL,FC_YELLOW); DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+11*ED_COUNT_TEXT_YSIZE, - "Speed of the amoeba",FS_SMALL,FC_YELLOW); + "Speed of the amoeba / Content",FS_SMALL,FC_YELLOW); DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+12*ED_COUNT_TEXT_YSIZE, "Time for magic wall",FS_SMALL,FC_YELLOW); DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+13*ED_COUNT_TEXT_YSIZE, @@ -952,6 +972,25 @@ void LevelEd(int mx, int my, int button) } } + if (mx>=SX+29*MINI_TILEX && mx=SY+26*MINI_TILEY && my3) + return; + + new_element = (button==1 ? new_element1 : + button==2 ? new_element2 : + button==3 ? new_element3 : 0); + + if (new_element != level.amoebe_inhalt) + { + level.amoebe_inhalt = new_element; + DrawMiniElement(29,26,new_element); + } + } + if (mx>=SX+1*MINI_TILEX && mx=SY+2*MINI_TILEY && my=0 && pressed) - { - pressed = FALSE; - DrawEditButton(edit_button[choice] | ED_BUTTON_RELEASED); - } - else if (ON_EDIT_BUTTON(mx,my) && EDIT_BUTTON(mx,my)==choice) - { - if (!pressed) - DrawEditButton(edit_button[choice] | ED_BUTTON_PRESSED); - pressed = TRUE; - if (edit_button[choice]!=ED_BUTTON_CTRL && - edit_button[choice]!=ED_BUTTON_FILL) - return_code = 1<=0 && pressed) - { - pressed = FALSE; - DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_RELEASED); - } - else if (ON_CTRL_BUTTON(mx,my) && CTRL_BUTTON(mx,my)==choice && !pressed) - { - pressed = TRUE; - DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_PRESSED); - } - } - } - else /* Maustaste wieder losgelassen */ - { - if (ON_CTRL_BUTTON(mx,my) && CTRL_BUTTON(mx,my)==choice && pressed) - { - DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_RELEASED); - return_code = 1<<(choice+6); - choice = -1; - pressed = FALSE; - } - else - { - choice = -1; - pressed = FALSE; - } - } - - BackToFront(); - return(return_code); -} - -int CheckElemButtons(int mx, int my, int button) -{ - int return_code = -1; - static int choice = -1; - static BOOL pressed = FALSE; - - if (button) - { - if (!motion_status) /* Maustaste neu gedrückt */ - { - if (ON_ELEM_BUTTON(mx,my)) - { - choice = ELEM_BUTTON(mx,my); - pressed = TRUE; - DrawElemButton(choice,ED_BUTTON_PRESSED); - if (choice==ED_BUTTON_EUP || - choice==ED_BUTTON_EDOWN) - return_code = choice; - } - } - else /* Mausbewegung bei gedrückter Maustaste */ - { - if ((!ON_ELEM_BUTTON(mx,my) || ELEM_BUTTON(mx,my)!=choice) && - choice>=0 && pressed) - { - pressed = FALSE; - DrawElemButton(choice,ED_BUTTON_RELEASED); - } - else if (ON_ELEM_BUTTON(mx,my) && ELEM_BUTTON(mx,my)==choice) - { - if (!pressed) - DrawElemButton(choice,ED_BUTTON_PRESSED); - pressed = TRUE; - if (choice==ED_BUTTON_EUP || - choice==ED_BUTTON_EDOWN) - return_code = choice; - } - } - } - else /* Maustaste wieder losgelassen */ - { - if (ON_ELEM_BUTTON(mx,my) && ELEM_BUTTON(mx,my)==choice && pressed) - { - DrawElemButton(choice,ED_BUTTON_RELEASED); - if (choice!=ED_BUTTON_EUP && - choice!=ED_BUTTON_EDOWN) - return_code = choice; - choice = -1; - pressed = FALSE; - } - else - { - choice = -1; - pressed = FALSE; - } - } - - BackToFront(); - return(return_code); -} - -int CheckCountButtons(int mx, int my, int button) -{ - int return_code = -1; - static int choice = -1; - static BOOL pressed = FALSE; - - if (button) - { - if (!motion_status) /* Maustaste neu gedrückt */ - { - if (ON_COUNT_BUTTON(mx,my)) - { - choice = COUNT_BUTTON(mx,my); - pressed = TRUE; - DrawCountButton(choice,ED_BUTTON_PRESSED); - return_code = choice; - } - } - else /* Mausbewegung bei gedrückter Maustaste */ - { - if ((!ON_COUNT_BUTTON(mx,my) || COUNT_BUTTON(mx,my)!=choice) && - choice>=0 && pressed) - { - pressed = FALSE; - DrawCountButton(choice,ED_BUTTON_RELEASED); - } - else if (ON_COUNT_BUTTON(mx,my) && COUNT_BUTTON(mx,my)==choice) - { - if (!pressed) - DrawCountButton(choice,ED_BUTTON_PRESSED); - pressed = TRUE; - return_code = choice; - } - } - } - else /* Maustaste wieder losgelassen */ - { - if (ON_COUNT_BUTTON(mx,my) && COUNT_BUTTON(mx,my)==choice && pressed) - { - DrawCountButton(choice,ED_BUTTON_RELEASED); - choice = -1; - pressed = FALSE; - } - else - { - choice = -1; - pressed = FALSE; - } - } - - BackToFront(); - return(return_code); -}