From 760ba87c13648efe2c0d6d103829a0b5062dbd7d Mon Sep 17 00:00:00 2001 From: Crzyrndm Date: Sun, 11 Jan 2015 19:15:15 +1300 Subject: [PATCH] Proper all subCategory --- FilterExtension/Categoriser/PartType.cs | 39 ++++++++++-------- FilterExtension/Core.cs | 27 +++++++++++- FilterExtension/customCategory.cs | 15 ++++++- FilterExtension/customSubCategory.cs | 4 ++ .../Near Future Technologies.cfg | 1 + .../003_EngineJet.cfg | 3 +- .../051_Solar Panels.cfg | 8 ++++ .../Connected Living Space.cfg | 2 +- .../000_FilterExtensions/FilterCreator.dll | Bin 13824 -> 13824 bytes .../000_FilterExtensions/FilterExtensions.dll | Bin 27648 -> 28672 bytes 10 files changed, 74 insertions(+), 25 deletions(-) diff --git a/FilterExtension/Categoriser/PartType.cs b/FilterExtension/Categoriser/PartType.cs index d64f1304..b286c31a 100644 --- a/FilterExtension/Categoriser/PartType.cs +++ b/FilterExtension/Categoriser/PartType.cs @@ -140,22 +140,20 @@ internal static bool checkPropellant(AvailablePart part, string value) if (categoryCheck(part)) return false; - List propellants = new List(); - if (part.partPrefab.GetModuleEngines() != null) - { - propellants = part.partPrefab.GetModuleEngines().propellants; - } - else if (part.partPrefab.GetModuleEnginesFx() != null) - { - propellants = part.partPrefab.GetModuleEnginesFx().propellants; - } - else - return false; + List> propellants = new List>(); + + foreach (ModuleEngines e in part.partPrefab.GetModuleEngines()) + propellants.Add(e.propellants); + foreach (ModuleEnginesFX ex in part.partPrefab.GetModuleEnginesFx()) + propellants.Add(ex.propellants); - foreach (string s in value.Split(',')) + foreach (List Lp in propellants) { - if (propellants.Any(p => p.name == s.Trim())) - return true; + foreach (string s in value.Split(',')) + { + if (Lp.Any(p => p.name == s.Trim())) + return true; + } } return false; } @@ -310,19 +308,24 @@ public static bool isWing(AvailablePart part) return false; } + public static List GetModules(this Part part) where T : PartModule + { + return part.Modules.OfType().ToList(); + } + public static T GetModule(this Part part) where T : PartModule { return part.Modules.OfType().FirstOrDefault(); } - public static ModuleEngines GetModuleEngines(this Part part) + public static List GetModuleEngines(this Part part) { - return part.GetModule(); + return part.GetModules(); } - public static ModuleEnginesFX GetModuleEnginesFx(this Part part) + public static List GetModuleEnginesFx(this Part part) { - return part.GetModule(); + return part.GetModules(); } } } diff --git a/FilterExtension/Core.cs b/FilterExtension/Core.cs index 8336e86e..7b0cddc4 100644 --- a/FilterExtension/Core.cs +++ b/FilterExtension/Core.cs @@ -20,12 +20,17 @@ public class Core : MonoBehaviour // mod folder for each part by internal name public static Dictionary partFolderDict = new Dictionary(); + + // store all the "All parts" subcategories until all subcategories have been processed + internal Dictionary categoryAllSub = new Dictionary(); // store the config node for the "all" subcategories until all filters have been added + + // state is set on initialisation starting and finishing. This way we know whether a problem was encountered and if it was a problem related to FE internal static int state = 0; // 0 = we haven't started yet, 1 = processing started, -1 = processing finished, 2 = processing reattempted // Dictionary of icons created on entering the main menu public static Dictionary iconDict = new Dictionary(); - public static Core Instance + public static Core Instance // Reminder to self, don't be abusing static { get { @@ -36,7 +41,7 @@ public static Core Instance void Awake() { instance = this; - Log("Version 1.13"); + Log("Version 1.14"); // Add event for when the Editor GUI becomes active. This is never removed because we need it to fire every time GameEvents.onGUIEditorToolbarReady.Add(editor); @@ -85,6 +90,24 @@ void Awake() subCategories.Add(sC); } } + + foreach (KeyValuePair kvp in categoryAllSub) + { + ConfigNode sC = kvp.Value; + if (folderToCategoryDict.ContainsKey(kvp.Key)) + { + foreach (ConfigNode node in sC.GetNodes("FILTER")) + { + ConfigNode nodeCheck = new ConfigNode("CHECK"); + nodeCheck.AddValue("type", "folder"); + nodeCheck.AddValue("value", folderToCategoryDict[kvp.Key]); + node.AddNode(nodeCheck); + } + } + + subCategories.Insert(0, new customSubCategory(sC, kvp.Key)); + } + checkForEmptySubCategories(); loadIcons(); } diff --git a/FilterExtension/customCategory.cs b/FilterExtension/customCategory.cs index 7ca700b2..10be1e29 100644 --- a/FilterExtension/customCategory.cs +++ b/FilterExtension/customCategory.cs @@ -30,8 +30,19 @@ public customCategory(ConfigNode node) type = node.GetValue("type"); value = node.GetValue("value"); - // not hooked up to anything - bool.TryParse(node.GetValue("all"), out all); + if (bool.TryParse(node.GetValue("all"), out all)) + { + if (!Core.Instance.categoryAllSub.ContainsKey(categoryTitle)) + { + // create confignode for an "All parts" subcategory + ConfigNode c = new ConfigNode("SUBCATEGORY"); + c.AddValue("name", "All Parts in Category"); + c.AddValue("category", categoryTitle); + c.AddValue("icon", iconName); + // add it to the dictionary + Core.Instance.categoryAllSub.Add(categoryTitle, c); + } + } typeSwitch(); } diff --git a/FilterExtension/customSubCategory.cs b/FilterExtension/customSubCategory.cs index edf1cb9e..04e0079d 100644 --- a/FilterExtension/customSubCategory.cs +++ b/FilterExtension/customSubCategory.cs @@ -27,6 +27,10 @@ public customSubCategory(ConfigNode node, string Category) foreach (ConfigNode subNode in node.GetNodes("FILTER")) { filters.Add(new Filter(subNode)); + + // if there's an "All parts" subcategory, add the filters to it + if (Core.Instance.categoryAllSub.ContainsKey(category)) + Core.Instance.categoryAllSub[category].AddNode(subNode); } filter = filters.Count > 0; } diff --git a/GameData/000_FilterExtensions/Configs/003_Category_ModFolders/Near Future Technologies.cfg b/GameData/000_FilterExtensions/Configs/003_Category_ModFolders/Near Future Technologies.cfg index f0d04f4d..8ed7f087 100644 --- a/GameData/000_FilterExtensions/Configs/003_Category_ModFolders/Near Future Technologies.cfg +++ b/GameData/000_FilterExtensions/Configs/003_Category_ModFolders/Near Future Technologies.cfg @@ -5,4 +5,5 @@ CATEGORY:NEEDS[NearFuturePropulsion|NearFutureElectrical|NearFutureConstruction| colour = #FFF0F0F0 type = mod value = NearFuturePropulsion, NearFutureElectrical, NearFutureConstruction, NearFutureSolar, NearFutureSpacecraft + all = true } \ No newline at end of file diff --git a/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/003_EngineJet.cfg b/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/003_EngineJet.cfg index 550d62f8..11f289f5 100644 --- a/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/003_EngineJet.cfg +++ b/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/003_EngineJet.cfg @@ -13,8 +13,7 @@ SUBCATEGORY CHECK { type = propellant - value = Oxidizer - invert = true + value = IntakeAir } } } \ No newline at end of file diff --git a/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/051_Solar Panels.cfg b/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/051_Solar Panels.cfg index 59964149..90b86d09 100644 --- a/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/051_Solar Panels.cfg +++ b/GameData/000_FilterExtensions/Configs/Category_Filter_by_Function/051_Solar Panels.cfg @@ -11,4 +11,12 @@ SUBCATEGORY value = ModuleDeployableSolarPanel } } + FILTER + { + CHECK + { + type = moduleName + value = ModuleCurvedSolarPanel + } + } } \ No newline at end of file diff --git a/GameData/000_FilterExtensions/Configs/Category_Filter_by_Module/Connected Living Space.cfg b/GameData/000_FilterExtensions/Configs/Category_Filter_by_Module/Connected Living Space.cfg index e4f1c07d..0b020330 100644 --- a/GameData/000_FilterExtensions/Configs/Category_Filter_by_Module/Connected Living Space.cfg +++ b/GameData/000_FilterExtensions/Configs/Category_Filter_by_Module/Connected Living Space.cfg @@ -1,4 +1,4 @@ -SUBCATEGORY +SUBCATEGORY:NEEDS[ConnectedLivingSpace] { category = Filter by Module name = Connected Living Space diff --git a/GameData/000_FilterExtensions/FilterCreator.dll b/GameData/000_FilterExtensions/FilterCreator.dll index f547898d700d0fcb1b5df12d45ac0b8467627114..38a906266113fe2256138f1dc73eb36837420e64 100644 GIT binary patch delta 34 qcmZq3X~>z-!CWh{X=8V)roh1~OM;H%>Up+#t$m{LfKPUj77qXmY!0vh delta 34 qcmZq3X~>z-!7R?SabtI?rhsod%etQ_Y#viL{gykRw^DhL77qaMuMN8Z diff --git a/GameData/000_FilterExtensions/FilterExtensions.dll b/GameData/000_FilterExtensions/FilterExtensions.dll index 7249730ef8a204eaf4a41b8f57f3439546ac3eac..10924479c5ee729929bd4dbdc4f79bc8b9369220 100644 GIT binary patch literal 28672 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