X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=1e4d4f5f33df68ab649e41bb75a9611c7b802d61;hb=209871b6f17880f98d41cf7d7953f6bf2227a16c;hp=2adf93c8233d7ddd2195736af529013660c88660;hpb=1d5a33fc89d071c8e8a242ff3b51258f1b6b0e1e;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 2adf93c8..1e4d4f5f 100644 --- a/src/editor.c +++ b/src/editor.c @@ -101,7 +101,7 @@ #define ED_CTRL_ID_RANDOM_PLACEMENT 12 #define ED_CTRL_ID_BRUSH 13 #define ED_CTRL_ID_WRAP_DOWN 14 -#define ED_CTRL_ID_UNUSED2 15 +#define ED_CTRL_ID_PICK_ELEMENT 15 #define ED_CTRL_ID_UNDO 16 #define ED_CTRL_ID_INFO 17 #define ED_CTRL_ID_SAVE 18 @@ -153,6 +153,7 @@ static struct GadgetInfo *level_editor_gadget[ED_NUM_GADGETS]; static boolean level_editor_gadgets_created = FALSE; static int drawing_function = ED_CTRL_ID_SINGLE_ITEMS; +static int last_drawing_function = ED_CTRL_ID_SINGLE_ITEMS; static int properties_element = 0; static short ElementContent[MAX_ELEMCONT][3][3]; @@ -364,6 +365,11 @@ int editor_element[] = EL_MAUER_Y, EL_MAUER_XY, + EL_SPEED_PILL, + EL_LEERRAUM, + EL_LEERRAUM, + EL_LEERRAUM, + EL_CHAR_A + ('S' - 'A'), EL_CHAR_A + ('O' - 'A'), EL_CHAR_A + ('K' - 'A'), @@ -379,6 +385,71 @@ int editor_element[] = EL_SOKOBAN_FELD_VOLL, EL_BETON, + EL_LEERRAUM, + EL_LEERRAUM, + EL_LEERRAUM, + EL_LEERRAUM, + + EL_CHAR('S'), + EL_CHAR('U'), + EL_CHAR('P'), + EL_CHAR('A'), + + EL_CHAR('P'), + EL_CHAR('L'), + EL_CHAR('E'), + EL_CHAR('X'), + + EL_SP_EMPTY, + EL_SP_ZONK, + EL_SP_BASE, + EL_SP_MURPHY, + + EL_SP_INFOTRON, + EL_SP_CHIP_SINGLE, + EL_SP_HARD_GRAY, + EL_SP_EXIT, + + EL_SP_DISK_ORANGE, + EL_SP_PORT1_RIGHT, + EL_SP_PORT1_DOWN, + EL_SP_PORT1_LEFT, + + EL_SP_PORT1_UP, + EL_SP_PORT2_RIGHT, + EL_SP_PORT2_DOWN, + EL_SP_PORT2_LEFT, + + EL_SP_PORT2_UP, + EL_SP_SNIKSNAK, + EL_SP_DISK_YELLOW, + EL_SP_TERMINAL, + + EL_SP_DISK_RED, + EL_SP_PORT_Y, + EL_SP_PORT_X, + EL_SP_PORT_XY, + + EL_SP_ELECTRON, + EL_SP_BUG, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + + EL_SP_HARD_BASE1, + EL_SP_HARD_GREEN, + EL_SP_HARD_BLUE, + EL_SP_HARD_RED, + + EL_SP_HARD_YELLOW, + EL_SP_HARD_BASE2, + EL_SP_HARD_BASE3, + EL_SP_HARD_BASE4, + + EL_SP_HARD_BASE5, + EL_SP_HARD_BASE6, + EL_SP_CHIP_UPPER, + EL_SP_CHIP_LOWER, + /* EL_CHAR_A + ('D' - 'A'), EL_CHAR_A + ('Y' - 'A'), @@ -474,62 +545,7 @@ int editor_element[] = EL_CHAR_OE, EL_CHAR_UE, EL_CHAR_COPY, - EL_LEERRAUM, - - EL_LEERRAUM, - EL_LEERRAUM, - EL_LEERRAUM, - EL_LEERRAUM, - - EL_LEERRAUM, - EL_SP_ZONK, - EL_SP_BASE, - EL_SP_MURPHY, - - EL_SP_INFOTRON, - EL_SP_CHIP_SINGLE, - EL_SP_HARD_GRAY, - EL_SP_EXIT, - - EL_SP_DISK_ORANGE, - EL_SP_PORT1_RIGHT, - EL_SP_PORT1_DOWN, - EL_SP_PORT1_LEFT, - - EL_SP_PORT1_UP, - EL_SP_PORT2_RIGHT, - EL_SP_PORT2_DOWN, - EL_SP_PORT2_LEFT, - - EL_SP_PORT2_UP, - EL_SP_SNIKSNAK, - EL_SP_DISK_YELLOW, - EL_SP_TERMINAL, - - EL_SP_DISK_RED, - EL_SP_PORT_Y, - EL_SP_PORT_X, - EL_SP_PORT_XY, - - EL_SP_ELECTRON, - EL_SP_BUG, - EL_SP_CHIP_LEFT, - EL_SP_CHIP_RIGHT, - - EL_SP_HARD_BASE1, - EL_SP_HARD_GREEN, - EL_SP_HARD_BLUE, - EL_SP_HARD_RED, - - EL_SP_HARD_YELLOW, - EL_SP_HARD_BASE2, - EL_SP_HARD_BASE3, - EL_SP_HARD_BASE4, - - EL_SP_HARD_BASE5, - EL_SP_HARD_BASE6, - EL_SP_CHIP_UPPER, - EL_SP_CHIP_LOWER + EL_LEERRAUM }; int elements_in_list = sizeof(editor_element)/sizeof(int); @@ -592,7 +608,8 @@ static void CreateControlButtons() id == ED_CTRL_ID_RECTANGLE || id == ED_CTRL_ID_FILLED_BOX || id == ED_CTRL_ID_FLOOD_FILL || - id == ED_CTRL_ID_BRUSH) + id == ED_CTRL_ID_BRUSH || + id == ED_CTRL_ID_PICK_ELEMENT) { button_type = GD_TYPE_RADIO_BUTTON; radio_button_nr = 1; @@ -1134,6 +1151,39 @@ void AdjustLevelScrollPosition() level_ypos = -1; } +static void PickDrawingElement(int button, int element) +{ + if (button < 1 || button > 3) + return; + + if (button == 1) + { + new_element1 = element; + DrawMiniGraphicExt(drawto, gc, + DX + ED_WIN_MB_LEFT_XPOS, + DY + ED_WIN_MB_LEFT_YPOS, + el2gfx(new_element1)); + } + else if (button == 2) + { + new_element2 = element; + DrawMiniGraphicExt(drawto, gc, + DX + ED_WIN_MB_MIDDLE_XPOS, + DY + ED_WIN_MB_MIDDLE_YPOS, + el2gfx(new_element2)); + } + else + { + new_element3 = element; + DrawMiniGraphicExt(drawto, gc, + DX + ED_WIN_MB_RIGHT_XPOS, + DY + ED_WIN_MB_RIGHT_YPOS, + el2gfx(new_element3)); + } + + redraw_mask |= REDRAW_DOOR_1; +} + void LevelEd(int mx, int my, int button) { static int last_button = 0; @@ -1234,26 +1284,7 @@ void LevelEd(int mx, int my, int button) else new_element = EL_LEERRAUM; - if (last_button==1) - new_element1 = new_element; - else if (last_button==2) - new_element2 = new_element; - else if (last_button==3) - new_element3 = new_element; - - DrawMiniGraphicExt(drawto,gc, - DX+ED_WIN_MB_LEFT_XPOS, - DY+ED_WIN_MB_LEFT_YPOS, - el2gfx(new_element1)); - DrawMiniGraphicExt(drawto,gc, - DX+ED_WIN_MB_MIDDLE_XPOS, - DY+ED_WIN_MB_MIDDLE_YPOS, - el2gfx(new_element2)); - DrawMiniGraphicExt(drawto,gc, - DX+ED_WIN_MB_RIGHT_XPOS, - DY+ED_WIN_MB_RIGHT_YPOS, - el2gfx(new_element3)); - redraw_mask |= REDRAW_DOOR_1; + PickDrawingElement(last_button, new_element); if (!HAS_CONTENT(properties_element)) { @@ -2627,6 +2658,13 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) } break; + case ED_CTRL_ID_PICK_ELEMENT: + if (button_press_event) + PickDrawingElement(button, Feld[lx][ly]); + if (button_release_event) + ClickOnGadget(level_editor_gadget[last_drawing_function]); + break; + default: break; } @@ -2701,6 +2739,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) case ED_CTRL_ID_FILLED_BOX: case ED_CTRL_ID_FLOOD_FILL: case ED_CTRL_ID_BRUSH: + case ED_CTRL_ID_PICK_ELEMENT: + last_drawing_function = drawing_function; drawing_function = id; break;