From 51d35c0c0780fc86f0d990fc47897ff385bf1d38 Mon Sep 17 00:00:00 2001 From: Crzyrndm Date: Mon, 5 Jun 2017 21:22:46 +1200 Subject: [PATCH] Fix a few issues causing icons to not be found - Update Mk2.5 flat bottom to align with mod --- .../ConfigNodes/SubcategoryNode.cs | 16 +++++-- FilterExtension/IconLib.cs | 39 ++++-------------- FilterExtension/LoadAndProcess.cs | 18 ++++---- FilterExtension/Logger.cs | 25 +++++++---- .../SubCategories_Bulkhead.cfg | 4 +- .../000_FilterExtensions/FilterExtensions.dll | Bin 65024 -> 65536 bytes .../FilterExtensions.version | 2 +- .../{cs_size25.png => cs_mk25.png} | Bin Testing/FE_Testing.dll | Bin 10752 -> 10752 bytes 9 files changed, 50 insertions(+), 54 deletions(-) rename GameData/000_FilterExtensions/Icons/Autoloaded_Icons_CrossSections/{cs_size25.png => cs_mk25.png} (100%) diff --git a/FilterExtension/ConfigNodes/SubcategoryNode.cs b/FilterExtension/ConfigNodes/SubcategoryNode.cs index fd1c0034..9a3045a7 100644 --- a/FilterExtension/ConfigNodes/SubcategoryNode.cs +++ b/FilterExtension/ConfigNodes/SubcategoryNode.cs @@ -16,14 +16,24 @@ public class SubcategoryNode : IEquatable public bool HasFilters { get => (Filters?.Count ?? 0) > 0; } - public SubcategoryNode(ConfigNode node) + public SubcategoryNode(ConfigNode node, LoadAndProcess data) { - SubCategoryTitle = node.GetValue("name"); + string nameTemp = node.GetValue("name"); + if (!string.IsNullOrEmpty(nameTemp) && data.Rename.ContainsKey(nameTemp)) + { + nameTemp = data.Rename[nameTemp]; + } + SubCategoryTitle = nameTemp; if (SubCategoryTitle == string.Empty) { SubCategoryTitle = node.GetValue("categoryName"); // for playing nice with stock generated subcats } - IconName = node.GetValue("icon"); + string iconTemp = IconName = node.GetValue("icon"); + if (!string.IsNullOrEmpty(SubCategoryTitle) && data.setIcon.ContainsKey(SubCategoryTitle)) + { + iconTemp = data.setIcon[SubCategoryTitle]; + } + IconName = iconTemp; bool.TryParse(node.GetValue("showUnpurchased"), out bool tmp); UnPurchasedOverride = tmp; diff --git a/FilterExtension/IconLib.cs b/FilterExtension/IconLib.cs index 622ac5d3..4863d8b7 100644 --- a/FilterExtension/IconLib.cs +++ b/FilterExtension/IconLib.cs @@ -12,6 +12,7 @@ public static class IconLib { // Dictionary of icons created on entering the main menu public static Dictionary IconDict = new Dictionary(); + // // if the icon isn't present, use this one private const string fallbackIcon = "stockIcon_fallback"; @@ -57,40 +58,16 @@ public static void Load() /// the icon if it is found, or the fallback icon if it is not public static RUI.Icons.Selectable.Icon GetIcon(string name) { - if (string.IsNullOrEmpty(name)) + if (!string.IsNullOrEmpty(name)) { - return PartCategorizer.Instance.iconLoader.iconDictionary[fallbackIcon]; - } - if (IconDict.TryGetValue(name, out RUI.Icons.Selectable.Icon icon) || PartCategorizer.Instance.iconLoader.iconDictionary.TryGetValue(name, out icon)) - { - return icon; + name = name.Trim(); + if (IconDict.TryGetValue(name, out RUI.Icons.Selectable.Icon icon) + || PartCategorizer.Instance.iconLoader.iconDictionary.TryGetValue(name, out icon)) + { + return icon; + } } return PartCategorizer.Instance.iconLoader.iconDictionary[fallbackIcon]; } - - /// - /// get icon following the TryGet* syntax - /// - /// the icon name - /// the icon that matches the name, or the fallback if no matches were found - /// true if a matching icon was found, false if fallback was required - public static bool TryGetIcon(string name, out RUI.Icons.Selectable.Icon icon) - { - if (string.IsNullOrEmpty(name)) - { - icon = PartCategorizer.Instance.iconLoader.iconDictionary[fallbackIcon]; - return false; - } - if (IconDict.TryGetValue(name, out icon)) - { - return true; - } - if (PartCategorizer.Instance.iconLoader.iconDictionary.TryGetValue(name, out icon)) - { - return true; - } - icon = PartCategorizer.Instance.iconLoader.iconDictionary[fallbackIcon]; - return false; - } } } diff --git a/FilterExtension/LoadAndProcess.cs b/FilterExtension/LoadAndProcess.cs index 8771c383..3dee493f 100644 --- a/FilterExtension/LoadAndProcess.cs +++ b/FilterExtension/LoadAndProcess.cs @@ -1,14 +1,13 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; // Majority of Core only runs once. +using System.Linq; +using UnityEngine; namespace FilterExtensions { using ConfigNodes; using ConfigNodes.CheckNodes; - using KSP.UI.Screens; - using UnityEngine; using Utility; [KSPAddon(KSPAddon.Startup.MainMenu, true)] @@ -185,7 +184,7 @@ private void ProcessFilterDefinitions() //load all subCategory configs foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes("SUBCATEGORY")) { - var sC = new SubcategoryNode(node); + var sC = new SubcategoryNode(node, this); if (!sC.HasFilters || string.IsNullOrEmpty(sC.SubCategoryTitle)) { Logger.Log($"subcategory format error: {sC.SubCategoryTitle}", Logger.LogLevel.Error); @@ -219,7 +218,7 @@ private void ProcessFilterDefinitions() ConfigNode checkNode = CheckNodeFactory.MakeCheckNode(CheckResource.ID, s); ConfigNode filtNode = FilterNode.MakeFilterNode(false, new List(){ checkNode }); ConfigNode subcatNode = SubcategoryNode.MakeSubcategoryNode(name, name, false, new List() { filtNode }); - subCategoriesDict.Add(name, new SubcategoryNode(subcatNode)); + subCategoriesDict.Add(name, new SubcategoryNode(subcatNode, this)); Cat.SubCategories.AddUnique(new SubCategoryItem(name)); } } @@ -247,7 +246,7 @@ private void ProcessFilterDefinitions() { filternodes.Add(f.ToConfigNode()); } - var newSub = new SubcategoryNode(SubcategoryNode.MakeSubcategoryNode("All parts in " + C.CategoryName, C.IconName, false, filternodes)); + var newSub = new SubcategoryNode(SubcategoryNode.MakeSubcategoryNode("All parts in " + C.CategoryName, C.IconName, false, filternodes), this); subCategoriesDict.Add(newSub.SubCategoryTitle, newSub); C.SubCategories.Insert(0, new SubCategoryItem(newSub.SubCategoryTitle)); } @@ -292,7 +291,7 @@ private void GenerateEngineTypes() { var checks = new List() { CheckNodeFactory.MakeCheckNode(CheckPropellant.ID, propList, exact: true) }; var filters = new List() { FilterNode.MakeFilterNode(false, checks) }; - var sC = new SubcategoryNode(SubcategoryNode.MakeSubcategoryNode(name, icon, false, filters)); + var sC = new SubcategoryNode(SubcategoryNode.MakeSubcategoryNode(name, icon, false, filters), this); subCategoriesDict.Add(name, sC); } } @@ -321,7 +320,7 @@ private void ProcessFilterByManufacturer(List modNames) subCatNames.Add(name); var checks = new List() { CheckNodeFactory.MakeCheckNode(CheckFolder.ID, name) }; var filters = new List() { FilterNode.MakeFilterNode(false, checks) }; - var sC = new SubcategoryNode(SubcategoryNode.MakeSubcategoryNode(name, icon, false, filters)); + var sC = new SubcategoryNode(SubcategoryNode.MakeSubcategoryNode(name, icon, false, filters), this); subCategoriesDict.Add(name, sC); } } @@ -339,6 +338,7 @@ private void ProcessFilterByManufacturer(List modNames) filterByManufacturer.AddNode(manufacturerSubs); FilterByManufacturer = new CategoryNode(filterByManufacturer, this); CategoryNodes.Add(FilterByManufacturer); + Logger.Log("Filter by manufacturer"); } /// @@ -412,7 +412,7 @@ public void CompileCategories() } catch (Exception ex) { - Logger.Log(ex.Message, Logger.LogLevel.Warn); + Logger.Log($"{cn.CategoryName}: {ex.Message}", Logger.LogLevel.Error); } } } diff --git a/FilterExtension/Logger.cs b/FilterExtension/Logger.cs index e12fd912..74fb52c1 100644 --- a/FilterExtension/Logger.cs +++ b/FilterExtension/Logger.cs @@ -1,15 +1,12 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using KSP; using UnityEngine; namespace FilterExtensions { internal static class Logger { - public static readonly Version version = new Version(3, 0, 0, 0); + public static readonly Version version = new Version(3, 0, 1); + public static readonly string versionString = $"[Filter Extensions {version}]:"; internal enum LogLevel { @@ -18,6 +15,18 @@ internal enum LogLevel Error } + + /// + /// format the string to be logged and prefix with mod id + version + /// + /// string format to be logged + /// params for the format + /// + static string LogString(string format, params object[] o) + { + return $"{versionString} {string.Format(format, o)}"; + } + /// /// Debug messages only compiled in debug build. Also much easier to search for once debugging/development complete... /// @@ -48,15 +57,15 @@ internal static void Log(string format, LogLevel level = LogLevel.Debug, params { if (level == LogLevel.Debug) { - Debug.LogFormat($"[Filter Extensions {version}]: {string.Format(format, o)}"); + Debug.Log(LogString(format, o)); } else if (level == LogLevel.Warn) { - Debug.LogWarningFormat($"[Filter Extensions {version}]: {string.Format(format, o)}"); + Debug.LogWarning(LogString(format, o)); } else { - Debug.LogErrorFormat($"[Filter Extensions {version}]: {string.Format(format, o)}"); + Debug.LogError(LogString(format, o)); } } } diff --git a/GameData/000_FilterExtensions Configs/SubCategories_Bulkhead.cfg b/GameData/000_FilterExtensions Configs/SubCategories_Bulkhead.cfg index 5ed3ec89..7fd4d951 100644 --- a/GameData/000_FilterExtensions Configs/SubCategories_Bulkhead.cfg +++ b/GameData/000_FilterExtensions Configs/SubCategories_Bulkhead.cfg @@ -281,14 +281,14 @@ SUBCATEGORY SUBCATEGORY { name = Mk 2.5 Flat-Bottom [2.5m] - icon = cs_size25 + icon = cs_mk25 FILTER { CHECK { type = profile - value = size25 + value = mk25 } } } diff --git a/GameData/000_FilterExtensions/FilterExtensions.dll b/GameData/000_FilterExtensions/FilterExtensions.dll index 712cc6f59a81588fcedacbbbfae429dca81ec3a3..911c8d3a94aff81ce48861c54a94e618fcd79a9b 100644 GIT binary patch delta 25488 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%0A~COIuAeHtU>kJbi1Tez3fjx?E#;863#=PbAL> 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 k|Gmcf(i_V{>h2svJvw2l@8_R2^b%7 diff --git a/GameData/000_FilterExtensions/FilterExtensions.version b/GameData/000_FilterExtensions/FilterExtensions.version index c042badc..8b21413d 100644 --- a/GameData/000_FilterExtensions/FilterExtensions.version +++ b/GameData/000_FilterExtensions/FilterExtensions.version @@ -1 +1 @@ -{"NAME":"Filter Extensions","URL":"https://github.com/Crzyrndm/FilterExtension/blob/master/GameData/000_FilterExtensions/FilterExtensions.version","DOWNLOAD":"https://github.com/Crzyrndm/FilterExtension/releases","VERSION":{"MAJOR":3,"MINOR":0,"PATCH":0},"KSP_VERSION":{"MAJOR":1,"MINOR":3,"PATCH":0}} +{"NAME":"Filter Extensions","URL":"https://github.com/Crzyrndm/FilterExtension/blob/master/GameData/000_FilterExtensions/FilterExtensions.version","DOWNLOAD":"https://github.com/Crzyrndm/FilterExtension/releases","VERSION":{"MAJOR":3,"MINOR":0,"PATCH":1},"KSP_VERSION":{"MAJOR":1,"MINOR":3,"PATCH":0}} diff --git a/GameData/000_FilterExtensions/Icons/Autoloaded_Icons_CrossSections/cs_size25.png b/GameData/000_FilterExtensions/Icons/Autoloaded_Icons_CrossSections/cs_mk25.png similarity index 100% rename from GameData/000_FilterExtensions/Icons/Autoloaded_Icons_CrossSections/cs_size25.png rename to GameData/000_FilterExtensions/Icons/Autoloaded_Icons_CrossSections/cs_mk25.png diff --git a/Testing/FE_Testing.dll b/Testing/FE_Testing.dll index afbf198796c02dad94e9fc62ef5032f341e1bdfe..7888e28c1003d0eaa46c1e3e79dc5602e96d80c4 100644 GIT binary patch delta 36 scmZn&X$YCn!EB~vy0N=eUZDJCNX(=VSFeR_2W}U>{r_RJg2Dq%02v7ou>b%7 delta 36 scmZn&X$YCn!MyLC`o`{7c>(#&eetJKoIU3>u&dAXu4LJ)pzweb03L}BhX4Qo