diff --git a/Localization/TranslationsNeeded.txt b/Localization/TranslationsNeeded.txt index 226eb80..d58e96c 100644 --- a/Localization/TranslationsNeeded.txt +++ b/Localization/TranslationsNeeded.txt @@ -1,9 +1,9 @@ -en-US, 255/255, 100%, missing 0 -de-DE, 28/255, 11%, missing 227 -it-IT, 28/255, 11%, missing 227 -fr-FR, 95/255, 37%, missing 160 -es-ES, 49/255, 19%, missing 206 -ru-RU, 252/255, 99%, missing 3 -zh-Hans, 254/255, 100%, missing 1 -pt-BR, 95/255, 37%, missing 160 -pl-PL, 87/255, 34%, missing 168 +en-US, 260/260, 100%, missing 0 +de-DE, 28/260, 11%, missing 232 +it-IT, 28/260, 11%, missing 232 +fr-FR, 95/260, 37%, missing 165 +es-ES, 49/260, 19%, missing 211 +ru-RU, 252/260, 97%, missing 8 +zh-Hans, 254/260, 98%, missing 6 +pt-BR, 95/260, 37%, missing 165 +pl-PL, 87/260, 33%, missing 173 diff --git a/Localization/de-DE.hjson b/Localization/de-DE.hjson index 41a258d..f0ab1c2 100644 --- a/Localization/de-DE.hjson +++ b/Localization/de-DE.hjson @@ -52,6 +52,11 @@ Mods: { // HistoryEmpty: There is no query history yet // HistoryReachedStart: Query history start reached // HistoryReachedEnd: Query history end reached + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/en-US.hjson b/Localization/en-US.hjson index fc13d43..672e71e 100644 --- a/Localization/en-US.hjson +++ b/Localization/en-US.hjson @@ -52,6 +52,11 @@ Mods: { HistoryEmpty: There is no query history yet HistoryReachedStart: Query history start reached HistoryReachedEnd: Query history end reached + RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/es-ES.hjson b/Localization/es-ES.hjson index 0f4472b..07cede4 100644 --- a/Localization/es-ES.hjson +++ b/Localization/es-ES.hjson @@ -52,6 +52,11 @@ Mods: { // HistoryEmpty: There is no query history yet // HistoryReachedStart: Query history start reached // HistoryReachedEnd: Query history end reached + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/fr-FR.hjson b/Localization/fr-FR.hjson index d6ad402..9a00864 100644 --- a/Localization/fr-FR.hjson +++ b/Localization/fr-FR.hjson @@ -52,6 +52,11 @@ Mods: { // HistoryEmpty: There is no query history yet // HistoryReachedStart: Query history start reached // HistoryReachedEnd: Query history end reached + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/it-IT.hjson b/Localization/it-IT.hjson index 04f26c9..15c789b 100644 --- a/Localization/it-IT.hjson +++ b/Localization/it-IT.hjson @@ -52,6 +52,11 @@ Mods: { // HistoryEmpty: There is no query history yet // HistoryReachedStart: Query history start reached // HistoryReachedEnd: Query history end reached + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/pl-PL.hjson b/Localization/pl-PL.hjson index 52c4fa6..8d63829 100644 --- a/Localization/pl-PL.hjson +++ b/Localization/pl-PL.hjson @@ -52,6 +52,11 @@ Mods: { // HistoryEmpty: There is no query history yet // HistoryReachedStart: Query history start reached // HistoryReachedEnd: Query history end reached + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/pt-BR.hjson b/Localization/pt-BR.hjson index 14992e7..64ce1c3 100644 --- a/Localization/pt-BR.hjson +++ b/Localization/pt-BR.hjson @@ -52,6 +52,11 @@ Mods: { // HistoryEmpty: There is no query history yet // HistoryReachedStart: Query history start reached // HistoryReachedEnd: Query history end reached + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/ru-RU.hjson b/Localization/ru-RU.hjson index efef31b..728049e 100644 --- a/Localization/ru-RU.hjson +++ b/Localization/ru-RU.hjson @@ -52,6 +52,11 @@ Mods: { HistoryEmpty: У вас пока нет истории поиска HistoryReachedStart: Достигнуто начало истории поиска HistoryReachedEnd: Достигнут конец истории поиска + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/Localization/zh-Hans.hjson b/Localization/zh-Hans.hjson index 6e3b8ed..63f1574 100644 --- a/Localization/zh-Hans.hjson +++ b/Localization/zh-Hans.hjson @@ -52,6 +52,11 @@ Mods: { HistoryEmpty: 尚无查询历史 HistoryReachedStart: 抵达查询历史起点 HistoryReachedEnd: 抵达查询历史终点 + // RecipesFilteredByMod: "{0} {^0:recipe;recipes} filtered by mod filter." + // RecipesFilteredBySearch: "{0} {^0:recipe;recipes} filtered by search filter." + // RecipesFilteredByTooltip: "{0} {^0:recipe;recipes} filtered by tooltip filter." + // RecipesFilteredByCategory: "{0} {^0:recipe;recipes} filtered by category filter." + // RecipesFilteredByOtherFilters: "{0} {^0:recipe;recipes} filtered by other filters." } RecipeCatalogueFilters: { diff --git a/RecipeCatalogueUI.cs b/RecipeCatalogueUI.cs index 37147c0..ec4abad 100644 --- a/RecipeCatalogueUI.cs +++ b/RecipeCatalogueUI.cs @@ -498,10 +498,11 @@ private void UpdateGrid() { recipeGrid.Clear(); //int craftPathsCalculatedCount = 0; + var filterResults = new RecipeFilterResults(); for (int i = 0; i < Recipe.numRecipes; i++) { //if (recipeSlots[i].craftPathsCalculated) // craftPathsCalculatedCount++; - if (PassRecipeFilters(recipeSlots[i], Main.recipe[i], groups)) + if (PassRecipeFilters(recipeSlots[i], Main.recipe[i], groups, filterResults)) // all the filters //if (Main.projName[i].ToLower().IndexOf(searchFilter.Text, StringComparison.OrdinalIgnoreCase) != -1) { @@ -519,6 +520,38 @@ private void UpdateGrid() { recipeGrid._innerList.Append(box); } } + if (true && filterResults.AnyFiltered) { + var panel = new UIPanel(); + panel.Width.Set(0, 1f); + recipeGrid.Add(panel); + var filterMessages = new List(); + if (filterResults.filteredByMod > 0) { + filterMessages.Add(Language.GetTextValue("Mods.RecipeBrowser.RecipeCatalogueUI.RecipesFilteredByMod", filterResults.filteredByMod)); + + if (RecipeBrowserUI.ModIndex != 0) + filterMessages.Add($"Showing only recipes resulting in items from \"{Terraria.ModLoader.ModLoader.GetMod(RecipeBrowserUI.instance.mods[RecipeBrowserUI.ModIndex]).DisplayName}\""); + } + if (filterResults.filteredByCategory > 0) + filterMessages.Add(Language.GetTextValue("Mods.RecipeBrowser.RecipeCatalogueUI.RecipesFilteredByCategory", filterResults.filteredByCategory)); + if (filterResults.filteredByOtherFilters > 0) + filterMessages.Add(Language.GetTextValue("Mods.RecipeBrowser.RecipeCatalogueUI.RecipesFilteredByOtherFilters", filterResults.filteredByOtherFilters)); + if (filterResults.filteredBySearch > 0) + filterMessages.Add(Language.GetTextValue("Mods.RecipeBrowser.RecipeCatalogueUI.RecipesFilteredBySearch", filterResults.filteredBySearch)); + if (filterResults.filteredByTooltip > 0) + filterMessages.Add(Language.GetTextValue("Mods.RecipeBrowser.RecipeCatalogueUI.RecipesFilteredByTooltip", filterResults.filteredByTooltip)); + + // TODO: Same for Item listing as well + + string filterMessage = string.Join("\n", filterMessages); + var text = new UIText(filterMessage); + text.Width.Set(0, 1f); + text.IsWrapped = true; + text.WrappedTextBottomPadding = 0; + text.TextOriginX = 0f; + text.Recalculate(); + panel.Append(text); + panel.Height.Set(text.MinHeight.Pixels + panel.PaddingTop, 0f); + } //Main.NewText($"craftPathsCalculated: {craftPathsCalculatedCount}/{Recipe.numRecipes}"); recipeGrid.UpdateOrder(); @@ -526,10 +559,15 @@ private void UpdateGrid() { } private int ItemGridSort(UIElement x, UIElement y) { - if (x is UIPanel) - return -1; + // Place filter counts notification panel at end. + // TODO: Make similar panel for ItemCatalogueUI and make sure ArmorSetFeatureHelper panel is at top. + if (x is UIPanel) + if (y is UIPanel) + return x.UniqueId.CompareTo(y.UniqueId); + else + return 1; if (y is UIPanel) - return 1; + return -1; UIRecipeSlot a = x as UIRecipeSlot; UIRecipeSlot b = y as UIRecipeSlot; if (a.CompareToIgnoreIndex(b) == 0 && SharedUI.instance.SelectedSort != null) { @@ -540,20 +578,24 @@ private int ItemGridSort(UIElement x, UIElement y) { return a.CompareTo(b); } - private bool PassRecipeFilters(UIRecipeSlot recipeSlot, Recipe recipe, List groups) { + private bool PassRecipeFilters(UIRecipeSlot recipeSlot, Recipe recipe, List groups, RecipeFilterResults filterResults) { // TODO: Option to filter by source of Recipe rather than by createItem maybe? if (RecipeBrowserUI.ModIndex != 0) { if (!SharedUI.instance.ModFilterByFilter.button.selected) { if (recipe.createItem.ModItem == null) { + filterResults.filteredByMod++; return false; } if (recipe.createItem.ModItem.Mod.Name != RecipeBrowserUI.instance.mods[RecipeBrowserUI.ModIndex]) { + filterResults.filteredByMod++; return false; } } else { - if (!SharedUI.instance.ModFilterByFilter.recipeBelongs(recipe)) + if (!SharedUI.instance.ModFilterByFilter.recipeBelongs(recipe)) { + filterResults.filteredByMod++; return false; + } } } @@ -635,10 +677,13 @@ private bool PassRecipeFilters(UIRecipeSlot recipeSlot, Recipe recipe, List var SelectedCategory = SharedUI.instance.SelectedCategory; if (SelectedCategory != null) { - if (!SelectedCategory.belongs(recipe.createItem) && !SelectedCategory.subCategories.Any(x => x.belongs(recipe.createItem))) + if (!SelectedCategory.belongs(recipe.createItem) && !SelectedCategory.subCategories.Any(x => x.belongs(recipe.createItem))) { + filterResults.filteredByCategory++; return false; + } } var availableFilters = SharedUI.instance.availableFilters; + filterResults.filteredByOtherFilters++; // Rather than add code to each return... if (availableFilters != null) foreach (var filter in SharedUI.instance.availableFilters) { if (!filter.button.selected && filter == SharedUI.instance.DisabledFilter) { @@ -672,15 +717,19 @@ private bool PassRecipeFilters(UIRecipeSlot recipeSlot, Recipe recipe, List } } } + filterResults.filteredByOtherFilters--; - if (recipe.createItem.Name.ToLower().IndexOf(itemNameFilter.currentString, StringComparison.OrdinalIgnoreCase) == -1) + if (recipe.createItem.Name.ToLower().IndexOf(itemNameFilter.currentString, StringComparison.OrdinalIgnoreCase) == -1) { + filterResults.filteredBySearch++; return false; + } if (itemDescriptionFilter.currentString.Length > 0) { if ((recipe.createItem.ToolTip != null && GetTooltipsAsString(recipe.createItem.ToolTip).IndexOf(itemDescriptionFilter.currentString, StringComparison.OrdinalIgnoreCase) != -1) /*|| (recipe.createItem.toolTip2 != null && recipe.createItem.toolTip2.ToLower().IndexOf(itemDescriptionFilter.Text, StringComparison.OrdinalIgnoreCase) != -1)*/) { return true; } else { + filterResults.filteredByTooltip++; return false; } } @@ -937,4 +986,15 @@ internal void InvalidateExtendedCraft() { SharedUI.instance.ObtainableFilter.button.LeftClick(new UIMouseEvent(null, Vector2.Zero)); } } + + public class RecipeFilterResults + { + public int filteredBySearch; + public int filteredByTooltip; + public int filteredByCategory; + public int filteredByOtherFilters; + public int filteredByMod; + + public bool AnyFiltered => filteredBySearch > 0 || filteredByTooltip > 0 || filteredByCategory > 0 || filteredByOtherFilters > 0 || filteredByMod > 0; + } }