X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=bfea8ee4ecf41ee3fd9e44f09d0a9a3989e269f6;hb=4096fcbae692bfbf2f6506786659872a60b31693;hp=a08724725fde0ed647c8800701bdc6704a605a35;hpb=9de8eede744c45187c7011543ef8097d1ebc879c;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index a0872472..bfea8ee4 100644 --- a/src/editor.c +++ b/src/editor.c @@ -366,9 +366,10 @@ #define GADGET_ID_LEVEL_NAME (GADGET_ID_TEXT_INPUT_FIRST + 0) #define GADGET_ID_LEVEL_AUTHOR (GADGET_ID_TEXT_INPUT_FIRST + 1) +#define GADGET_ID_ELEMENT_NAME (GADGET_ID_TEXT_INPUT_FIRST + 2) /* selectbox identifiers */ -#define GADGET_ID_SELECTBOX_FIRST (GADGET_ID_TEXT_INPUT_FIRST + 2) +#define GADGET_ID_SELECTBOX_FIRST (GADGET_ID_TEXT_INPUT_FIRST + 3) #define GADGET_ID_CUSTOM_WALK_TO_ACTION (GADGET_ID_SELECTBOX_FIRST + 0) #define GADGET_ID_CUSTOM_CONSISTENCY (GADGET_ID_SELECTBOX_FIRST + 1) @@ -377,16 +378,17 @@ #define GADGET_ID_CUSTOM_MOVE_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 4) #define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 5) #define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 6) -#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 7) -#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 8) -#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 9) -#define GADGET_ID_CHANGE_PLAYER_ACTION (GADGET_ID_SELECTBOX_FIRST + 10) -#define GADGET_ID_CHANGE_COLLIDE_ACTION (GADGET_ID_SELECTBOX_FIRST + 11) -#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 12) -#define GADGET_ID_CHANGE_POWER (GADGET_ID_SELECTBOX_FIRST + 13) +#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 7) +#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 8) +#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 9) +#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 10) +#define GADGET_ID_CHANGE_PLAYER_ACTION (GADGET_ID_SELECTBOX_FIRST + 11) +#define GADGET_ID_CHANGE_COLLIDE_ACTION (GADGET_ID_SELECTBOX_FIRST + 12) +#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 13) +#define GADGET_ID_CHANGE_POWER (GADGET_ID_SELECTBOX_FIRST + 14) /* textbutton identifiers */ -#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 14) +#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 15) #define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 0) #define GADGET_ID_PROPERTIES_CONFIG (GADGET_ID_TEXTBUTTON_FIRST + 1) @@ -512,8 +514,9 @@ /* values for text input gadgets */ #define ED_TEXTINPUT_ID_LEVEL_NAME 0 #define ED_TEXTINPUT_ID_LEVEL_AUTHOR 1 +#define ED_TEXTINPUT_ID_ELEMENT_NAME 2 -#define ED_NUM_TEXTINPUT 2 +#define ED_NUM_TEXTINPUT 3 #define ED_TEXTINPUT_ID_LEVEL_FIRST ED_TEXTINPUT_ID_LEVEL_NAME #define ED_TEXTINPUT_ID_LEVEL_LAST ED_TEXTINPUT_ID_LEVEL_AUTHOR @@ -526,15 +529,16 @@ #define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION 4 #define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE 5 #define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS 6 -#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 7 -#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 8 -#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 9 -#define ED_SELECTBOX_ID_CHANGE_PLAYER_ACTION 10 -#define ED_SELECTBOX_ID_CHANGE_COLLIDE_ACTION 11 -#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 12 -#define ED_SELECTBOX_ID_CHANGE_POWER 13 +#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE 7 +#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 8 +#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 9 +#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 10 +#define ED_SELECTBOX_ID_CHANGE_PLAYER_ACTION 11 +#define ED_SELECTBOX_ID_CHANGE_COLLIDE_ACTION 12 +#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 13 +#define ED_SELECTBOX_ID_CHANGE_POWER 14 -#define ED_NUM_SELECTBOX 14 +#define ED_NUM_SELECTBOX 15 #define ED_SELECTBOX_ID_CUSTOM_FIRST ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION #define ED_SELECTBOX_ID_CUSTOM_LAST ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER @@ -881,6 +885,13 @@ static struct MAX_LEVEL_AUTHOR_LEN, level.author, "Author" + }, + { + 5 * MINI_TILEX, 5 * MINI_TILEY - ED_BORDER_SIZE, + GADGET_ID_ELEMENT_NAME, + MAX_ELEMENT_NAME_LEN - 2, /* currently 2 chars less editable */ + custom_element.description, + NULL } }; @@ -953,6 +964,16 @@ static struct ValueTextInfo options_smash_targets[] = { -1, NULL } }; +static struct ValueTextInfo options_slippery_type[] = +{ + { SLIPPERY_ANY_RANDOM, "random" }, + { SLIPPERY_ANY_LEFT_RIGHT, "left, right" }, + { SLIPPERY_ANY_RIGHT_LEFT, "right, left" }, + { SLIPPERY_ONLY_LEFT, "only left" }, + { SLIPPERY_ONLY_RIGHT, "only right" }, + { -1, NULL } +}; + static struct ValueTextInfo options_deadliness[] = { { EP_DONT_RUN_INTO, "running into" }, @@ -1079,6 +1100,14 @@ static struct &custom_element.smash_targets, "can smash", NULL, "elements that can be smashed" }, + { + ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(10), + GADGET_ID_CUSTOM_SLIPPERY_TYPE, + -1, + options_slippery_type, + &custom_element.slippery_type, + "slippery", NULL, "where other elements fall down" + }, { ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(11), GADGET_ID_CUSTOM_DEADLINESS, @@ -1358,7 +1387,7 @@ static struct ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(10), GADGET_ID_CUSTOM_SLIPPERY, &custom_element_properties[EP_SLIPPERY], - "slippery", "other elements can fall down from it" + NULL, "other elements can fall down from it" }, { ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(11), @@ -2375,7 +2404,9 @@ static char *getElementInfoText(int element) if (element < NUM_FILE_ELEMENTS) { - if (element_info[element].custom_description != NULL) + if (strlen(element_info[element].description) > 0) + info_text = element_info[element].description; + else if (element_info[element].custom_description != NULL) info_text = element_info[element].custom_description; else if (element_info[element].editor_description != NULL) info_text = element_info[element].editor_description; @@ -3422,9 +3453,12 @@ static void MapTextInputGadget(int id) int x = textinput_info[id].x + xoffset_above; int y = textinput_info[id].y + yoffset_above; - sprintf(infotext, "%s:", textinput_info[id].infotext); - infotext[max_infotext_len] = '\0'; - DrawTextF(x, y, FONT_TEXT_1, infotext); + if (textinput_info[id].infotext) + { + sprintf(infotext, "%s:", textinput_info[id].infotext); + infotext[max_infotext_len] = '\0'; + DrawTextF(x, y, FONT_TEXT_1, infotext); + } ModifyGadget(level_editor_gadget[textinput_info[id].gadget_id], GDI_TEXT_VALUE, textinput_info[id].value, GDI_END); @@ -4811,6 +4845,9 @@ static void DrawPropertiesConfig() /* draw drawing area gadgets */ DrawCustomContentArea(); + + /* draw text input gadgets */ + MapTextInputGadget(ED_TEXTINPUT_ID_ELEMENT_NAME); } } @@ -5683,6 +5720,8 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) ModifyEditorElementList(); RedrawDrawingElements(); + DrawPropertiesAdvancedDrawingAreas(); + FrameCounter = 0; /* restart animation frame counter */ } else if (id == GADGET_ID_CUSTOM_CONTENT) @@ -5902,7 +5941,16 @@ static void HandleCounterButtons(struct GadgetInfo *gi) static void HandleTextInputGadgets(struct GadgetInfo *gi) { - strcpy(textinput_info[gi->custom_type_id].value, gi->text.value); + int type_id = gi->custom_type_id; + + strcpy(textinput_info[type_id].value, gi->text.value); + + if (type_id == ED_TEXTINPUT_ID_ELEMENT_NAME) + { + CopyCustomElementPropertiesToGame(properties_element); + + ModifyEditorElementList(); /* update changed button info text */ + } } static void HandleSelectboxGadgets(struct GadgetInfo *gi)