X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=52df4dfacefce6feeb3f311cf2cb39f4ac3f60ec;hb=84c888496c5bf6f9e649882d77400c47634e177a;hp=718d42fa5f0ac6e945cbcc5bcfa1f42fccd37863;hpb=999e2a38bf1d15bda69df5896b8537023ac681ce;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 718d42fa..52df4dfa 100644 --- a/src/editor.c +++ b/src/editor.c @@ -3973,6 +3973,7 @@ static boolean getDrawModeHiRes(void); static int getTabulatorBarWidth(void); static int getTabulatorBarHeight(void); static Pixel getTabulatorBarColor(void); +static int numHiresTiles(int); static int num_editor_gadgets = 0; // dynamically determined @@ -5742,9 +5743,18 @@ static void InitDynamicEditorElementList(int **elements, int *num_elements) // find all elements used in current level for (y = 0; y < lev_fieldy; y++) + { for (x = 0; x < lev_fieldx; x++) - if (Tile[x][y] < NUM_FILE_ELEMENTS) // should always be true + { + if (Tile[x][y] >= NUM_FILE_ELEMENTS) // should never happen + continue; + + if (IS_MM_WALL(Tile[x][y])) + element_found[map_mm_wall_element(Tile[x][y])] = TRUE; + else element_found[Tile[x][y]] = TRUE; + } + } *num_elements = 0; @@ -5764,14 +5774,18 @@ static void InitDynamicEditorElementList(int **elements, int *num_elements) *num_elements = 0; - // add all elements used in current level (non-custom/group elements) + // add all elements used in current level (non-custom/group/empty elements) for (i = 0; i < NUM_FILE_ELEMENTS; i++) - if (element_found[i] && !(IS_CUSTOM_ELEMENT(i) || IS_GROUP_ELEMENT(i))) + if (element_found[i] && !(IS_CUSTOM_ELEMENT(i) || + IS_GROUP_ELEMENT(i) || + IS_EMPTY_ELEMENT(i))) (*elements)[(*num_elements)++] = i; - // add all elements used in current level (custom/group elements) + // add all elements used in current level (custom/group/empty elements) for (i = 0; i < NUM_FILE_ELEMENTS; i++) - if (element_found[i] && (IS_CUSTOM_ELEMENT(i) || IS_GROUP_ELEMENT(i))) + if (element_found[i] && (IS_CUSTOM_ELEMENT(i) || + IS_GROUP_ELEMENT(i) || + IS_EMPTY_ELEMENT(i))) (*elements)[(*num_elements)++] = i; while (*num_elements % 4) // pad with empty elements, if needed @@ -9756,6 +9770,7 @@ static void DrawPropertiesInfo(void) float percentage; int num_elements_in_level = 0; int num_similar_in_level = 0; + int num_hires_tiles_in_level = 0; int num_standard_properties = 0; int font1_nr = FONT_TEXT_1; int font2_nr = FONT_TEXT_2; @@ -9785,15 +9800,29 @@ static void DrawPropertiesInfo(void) // ----- print number of elements / percentage of this element in level for (y = 0; y < lev_fieldy; y++) + { for (x = 0; x < lev_fieldx; x++) + { if (Tile[x][y] == properties_element) + { num_elements_in_level++; + } + else if (IS_MM_WALL(Tile[x][y]) && + map_mm_wall_element(Tile[x][y]) == properties_element) + { + num_hires_tiles_in_level += numHiresTiles(Tile[x][y]); + } + } + } percentage = num_elements_in_level * 100.0 / (lev_fieldx * lev_fieldy); DrawTextS(xpos, ypos, font1_nr, num_elements_text); - if (num_elements_in_level > 0) + if (num_hires_tiles_in_level > 0) + DrawTextF(xpos + num_elements_text_len, ypos + font2_yoffset, font2_nr, + "%d wall tiles", num_hires_tiles_in_level); + else if (num_elements_in_level > 0) DrawTextF(xpos + num_elements_text_len, ypos + font2_yoffset, font2_nr, "%d (%.2f %%)", num_elements_in_level, percentage); else @@ -9803,10 +9832,16 @@ static void DrawPropertiesInfo(void) // ----- print number of similar elements / percentage of them in level for (y = 0; y < lev_fieldy; y++) + { for (x = 0; x < lev_fieldx; x++) + { if (strEqual(element_info[Tile[x][y]].class_name, element_info[properties_element].class_name)) + { num_similar_in_level++; + } + } + } if (num_similar_in_level != num_elements_in_level) { @@ -11967,6 +12002,23 @@ static boolean isHiresDrawElement(int element) return (IS_MM_WALL_EDITOR(element) || element == EL_EMPTY); } +static int numHiresTiles(int element) +{ + if (!IS_MM_WALL(element)) + return 1; + + int bits = MM_WALL_BITS(element); + int num_bits = 0; + + while (bits) + { + bits &= bits - 1; + num_bits++; + } + + return num_bits; +} + static void SetDrawModeHiRes(int element) { draw_mode_hires =