From 4f667f85a4d0c3ef155ae05cee3b40c3de3233f2 Mon Sep 17 00:00:00 2001 From: Jonathan Bayer Date: Sat, 13 Jan 2018 21:50:08 -0500 Subject: [PATCH] Added subcategory for ModuleEnginesAJEJet Updated NamesAndIcons and 02_Engines to support the new AJE Jets Added new check to support checking the engine type Added ability to filter on partial part name Added configs for AJE jets and propellers Added configs for Airplane+ propellers Added new categories for engines: Prop engines Electric prop engines Added some additional filters for the various Firespitter engines --- ChangeLog.txt | 10 +- FilterExtension/.FilterExtensions.csproj.swp | Bin 16384 -> 0 bytes .../CheckNodes/CheckNodeExtended.cs | 31 ++ .../CheckNodes/CheckNodeFactory.cs | 3 + .../ConfigNodes/CheckNodes/CheckNodeSimple.cs | 5 +- FilterExtension/Logger.cs | 2 +- FilterExtension/Utility/PartType.cs | 516 ++++++++++-------- .../ElectricPropeller.png | Bin 0 -> 1060 bytes .../ElectricPropeller_selected.png | Bin 0 -> 1074 bytes .../Icons/Autoloaded_PatchIcon/Propeller.png | Bin 0 -> 597 bytes .../Propeller_selected.png | Bin 0 -> 620 bytes .../Default/02_Engines.cfg | 10 +- .../Default/NamesAndIcons.cfg | 7 +- .../Subcategories_AJE.cfg | 29 + .../Subcategories_FS.cfg | 13 + .../Subcategories_NuclearRockets.cfg | 18 + 16 files changed, 413 insertions(+), 231 deletions(-) delete mode 100644 FilterExtension/.FilterExtensions.csproj.swp create mode 100644 GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/ElectricPropeller.png create mode 100644 GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/ElectricPropeller_selected.png create mode 100644 GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/Propeller.png create mode 100644 GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/Propeller_selected.png create mode 100644 GameData/000_FilterExtensions_Configs/Subcategories_FS.cfg create mode 100644 GameData/000_FilterExtensions_Configs/Subcategories_NuclearRockets.cfg diff --git a/ChangeLog.txt b/ChangeLog.txt index 62b0f231..747b7994 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -19,4 +19,12 @@ 3.2.0.3 Added subcategory for ModuleEnginesAJEJet - Updated NamesAndIcons and 02_Engines to support the new AJE Jets \ No newline at end of file + Updated NamesAndIcons and 02_Engines to support the new AJE Jets + Added new check to support checking the engine type + Added ability to filter on partial part name + Added configs for AJE jets and propellers + Added configs for Airplane+ propellers + Added new categories for engines: + Prop engines + Electric prop engines + Added some additional filters for the various Firespitter engines \ No newline at end of file diff --git a/FilterExtension/.FilterExtensions.csproj.swp b/FilterExtension/.FilterExtensions.csproj.swp deleted file mode 100644 index d3276c4224698935065c896d646d45d6837fe80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHOON=8&8E!TkLIT+!I3X^zCTMm@?DqIEJG0nM?6GIo%DnJngCe6z+gZ;Yg%Nph(oPz7aic(rmz9es-*A?Y@w<~WKUd_GT(oLmYZtb<;2fb!*3h+T39FqGz7!amQuX=jw=G#0SAds+r+{~#RFvNUUj|&@D)6@tDas## zw}Gz#L!bwo2hIV1_@JWv9`FDTIKbzCIC54b=vh*bW6x5dH4ya#L2yV%)X3=7z z+{X#Wif5R5Le`&Ou|oUIrQ@1JUVGw@x`Z2+VQMa+(LqV#FvAuc1qK(-5>6@EF?ufJ ztS?d<%(9rB623t^C6!)GCP|ACi|IyxNQTUFNmrUgaGJ75Ie(UDx*n7Zjo%;!j$`VS zFdOI-*g!&Qq)Sb9lW4Y1Ji7-))E2}LDI&EnFgkcZ% zHF1bSl6d-3$YIrRm&=?}t7{Ig;dCfYfu@9zq5>*vN6-LKl4PiuEap^@Sp~%eR6zW| z)hrw^rTo(I+UhdOIwOwAHG_MaNt(jb4c5t|S1xxXZJuq2p?}Bh%bj|)){)|ctJxfb zW2NXZP58q--P1eu9-UxZ_yZdCVp(?NaSk#CQLChSrQ;uo?chjkCpZ$@nK}|n)ECS3 zRxnx(YEq5UR96$^=}W;Zll+YyWN+oH^VJxAly5M*Zwx#a>@(YcMT$id3L=-JIrm|W zP92jCeLF_F=NS?V+cXjWP)<%36xA(6fsM7nm&Im#!N0J&+>Q-Qya}g&2^%A zo*-(t66=Cm(G2vps}0(xF135qui=+n#rlx~ON}d?7n=JAE2(U1dtlf!)vl*>(=4bX5#ih%X(4sHXL>po|75d7sJ`%k4Z06&9;7MF zAqV5B&syfGc^Nl(2!@=Nj=+cqX#ggY^kssdnut-02Wdv+Pm{q4N%jqw3rFL#X36+J zgAeAb@}K^Q|K%Bg-yz=b1Fs{-|2D7*JOaFd`2JhK0q`l{pNQw*0KN$b;AP+f@MpyF zZvj69ZUI+;i@>{x=YI?Q9ALmMpaSQCzaozRHSlBLRX_*!fg6OfCjJxybTWD1SFSVm3-dQvxlFQ$bEz46)LwiF1Dz>=LyFXrO57R!_ngfb+X2&AsSJ9 zJ(*i-P3&akr*`zNppI@M7av+M?&GvhAx=vdHYN_VjYZXT0|w!@FcBl@;7p}(hhk9P ziB#9^K3mW#*e~od9nG3vx2Fj@VD3;B+(XM?4|9q}ZDE*l$F+|QQETWd(h*hPYS-nh z{5jCwD2S@pqHXh{2I%od*yFm5eGzsH3sf|zko($2f_IqinKYnffy8Y#7|=z7yUjGc zZ0i_fxqDwAvEF0$w$WWs>*UC99May6U=oaO&)B?aAO={(<{}$*J&U?V?~JBwYCSBU z;Tfg)lS-%hy@rzx6|$Aho7xaxhuJsM0)(S8G0aR5?0dJx3rN@da8E{+Nv(!`D^X^#;hdil36M6Bf%o!~3|p5%vu>5`;l_S@iG*YOUqbmbwXH^ZqxR`)t*4IVH`+nGFSy%$m-nDkV}|tGxbG z*V*)foLYZ!#RY2*Qo<&YV+p=DVWw$X&cw@bF-u|oj48-{Q%u$dbh5K}{fjr@aYBHb7FToXsiKjD(URn-zr?NAWain0e_(FS%iIq$$ zogi=wnrDh&BJ*M*NC1;#%e3)yD1>uGReA4_S{hGTqa<&SSt_zs$i^b$s#@Gn=c<`> jIxC%G;W@M?M?pRnnxrD+zp!(#2gQUZ`pLD#bEx+p+7DG1 diff --git a/FilterExtension/ConfigNodes/CheckNodes/CheckNodeExtended.cs b/FilterExtension/ConfigNodes/CheckNodes/CheckNodeExtended.cs index db46990a..142e6b6c 100644 --- a/FilterExtension/ConfigNodes/CheckNodes/CheckNodeExtended.cs +++ b/FilterExtension/ConfigNodes/CheckNodes/CheckNodeExtended.cs @@ -28,6 +28,24 @@ public override ConfigNode ToConfigNode() } } + /// + /// part name check + /// + public class CheckName : CheckNodeExtended + { + public const string ID = "name"; + public override string CheckID { get => ID; } + bool exact = true; + public CheckName(ConfigNode node) : base(node) + { + if (node.HasValue("exact")) + exact = Exact; + } + public override bool CheckResult(AvailablePart part, int depth = 0) + { + return Invert ^ PartType.CheckName(part, Values, exact); + } + } /// /// part module name /// @@ -112,6 +130,19 @@ public override bool CheckResult(AvailablePart part, int depth = 0) } } + /// + /// checks engine type + /// + public class CheckEngineType : CheckNodeExtended + { + public const string ID = "engineType"; + public override string CheckID { get => ID; } + public CheckEngineType(ConfigNode node) : base(node) { } + public override bool CheckResult(AvailablePart part, int depth = 0) + { + return Invert ^ PartType.CheckEngineType(part, Values, Contains, Exact); + } + } public class CheckGroup : CheckNode { public const string ID = "check"; diff --git a/FilterExtension/ConfigNodes/CheckNodes/CheckNodeFactory.cs b/FilterExtension/ConfigNodes/CheckNodes/CheckNodeFactory.cs index 43003df2..49c1795b 100644 --- a/FilterExtension/ConfigNodes/CheckNodes/CheckNodeFactory.cs +++ b/FilterExtension/ConfigNodes/CheckNodes/CheckNodeFactory.cs @@ -37,6 +37,8 @@ public static CheckNode MakeCheck(ConfigNode node) return new CheckResource(node); case CheckPropellant.ID: return new CheckPropellant(node); + case CheckEngineType.ID: + return new CheckEngineType(node); case CheckGroup.ID: return new CheckGroup(node); case CheckSize.ID: @@ -55,6 +57,7 @@ public static CheckNode MakeCheck(ConfigNode node) return new CheckCost(node); default: Logger.Log($"unknown check type {checkID}", Logger.LogLevel.Error); + Logger.Log($"CheckEnginetype.ID: " + CheckEngineType.ID, Logger.LogLevel.Error); return null; } } diff --git a/FilterExtension/ConfigNodes/CheckNodes/CheckNodeSimple.cs b/FilterExtension/ConfigNodes/CheckNodes/CheckNodeSimple.cs index f9f72204..9614059a 100644 --- a/FilterExtension/ConfigNodes/CheckNodes/CheckNodeSimple.cs +++ b/FilterExtension/ConfigNodes/CheckNodes/CheckNodeSimple.cs @@ -6,10 +6,11 @@ namespace FilterExtensions.ConfigNodes.CheckNodes { +#if false /// /// part name check /// - public class CheckName : CheckNode + public class CheckName : CheckNodeExtended { public const string ID = "name"; public override string CheckID { get => ID; } @@ -19,7 +20,7 @@ public override bool CheckResult(AvailablePart part, int depth = 0) return Invert ^ PartType.CheckName(part, Values); } } - +#endif /// /// Part title check /// diff --git a/FilterExtension/Logger.cs b/FilterExtension/Logger.cs index 74fb52c1..a258013f 100644 --- a/FilterExtension/Logger.cs +++ b/FilterExtension/Logger.cs @@ -5,7 +5,7 @@ namespace FilterExtensions { internal static class Logger { - public static readonly Version version = new Version(3, 0, 1); + public static readonly Version version = new Version(3,2,0,3); public static readonly string versionString = $"[Filter Extensions {version}]:"; internal enum LogLevel diff --git a/FilterExtension/Utility/PartType.cs b/FilterExtension/Utility/PartType.cs index 153ea819..d81af86f 100644 --- a/FilterExtension/Utility/PartType.cs +++ b/FilterExtension/Utility/PartType.cs @@ -65,63 +65,63 @@ public static bool CheckCategory(AvailablePart part, string[] value) { switch (part.category) { - case PartCategories.Pods: - return value.Contains("Pods", StringComparer.OrdinalIgnoreCase); + case PartCategories.Pods: + return value.Contains("Pods", StringComparer.OrdinalIgnoreCase); - case PartCategories.Propulsion: - if (IsEngine(part)) - { - return value.Contains("Engines", StringComparer.OrdinalIgnoreCase) || value.Contains("Engine", StringComparer.OrdinalIgnoreCase); - } - else - { - return value.Contains("Fuel Tanks", StringComparer.OrdinalIgnoreCase) || value.Contains("FuelTank", StringComparer.OrdinalIgnoreCase); - } + case PartCategories.Propulsion: + if (IsEngine(part)) + { + return value.Contains("Engines", StringComparer.OrdinalIgnoreCase) || value.Contains("Engine", StringComparer.OrdinalIgnoreCase); + } + else + { + return value.Contains("Fuel Tanks", StringComparer.OrdinalIgnoreCase) || value.Contains("FuelTank", StringComparer.OrdinalIgnoreCase); + } - case PartCategories.Engine: - return value.Contains("Engines", StringComparer.OrdinalIgnoreCase) || value.Contains("Engine", StringComparer.OrdinalIgnoreCase); + case PartCategories.Engine: + return value.Contains("Engines", StringComparer.OrdinalIgnoreCase) || value.Contains("Engine", StringComparer.OrdinalIgnoreCase); - case PartCategories.FuelTank: - return value.Contains("Fuel Tanks", StringComparer.OrdinalIgnoreCase) || value.Contains("FuelTank", StringComparer.OrdinalIgnoreCase); + case PartCategories.FuelTank: + return value.Contains("Fuel Tanks", StringComparer.OrdinalIgnoreCase) || value.Contains("FuelTank", StringComparer.OrdinalIgnoreCase); - case PartCategories.Control: - return value.Contains("Control", StringComparer.OrdinalIgnoreCase); + case PartCategories.Control: + return value.Contains("Control", StringComparer.OrdinalIgnoreCase); - case PartCategories.Structural: - return value.Contains("Structural", StringComparer.OrdinalIgnoreCase); + case PartCategories.Structural: + return value.Contains("Structural", StringComparer.OrdinalIgnoreCase); - case PartCategories.Aero: - return value.Contains("Aerodynamics", StringComparer.OrdinalIgnoreCase) || value.Contains("Aero", StringComparer.OrdinalIgnoreCase); + case PartCategories.Aero: + return value.Contains("Aerodynamics", StringComparer.OrdinalIgnoreCase) || value.Contains("Aero", StringComparer.OrdinalIgnoreCase); - case PartCategories.Utility: - return value.Contains("Utility", StringComparer.OrdinalIgnoreCase); + case PartCategories.Utility: + return value.Contains("Utility", StringComparer.OrdinalIgnoreCase); - case PartCategories.Science: - return value.Contains("Science", StringComparer.OrdinalIgnoreCase); + case PartCategories.Science: + return value.Contains("Science", StringComparer.OrdinalIgnoreCase); - case PartCategories.none: - return value.Contains("None", StringComparer.OrdinalIgnoreCase); + case PartCategories.none: + return value.Contains("None", StringComparer.OrdinalIgnoreCase); - case PartCategories.Communication: - return value.Contains("Communications", StringComparer.OrdinalIgnoreCase); + case PartCategories.Communication: + return value.Contains("Communications", StringComparer.OrdinalIgnoreCase); - case PartCategories.Ground: - return value.Contains("Ground", StringComparer.OrdinalIgnoreCase); + case PartCategories.Ground: + return value.Contains("Ground", StringComparer.OrdinalIgnoreCase); - case PartCategories.Thermal: - return value.Contains("Thermal", StringComparer.OrdinalIgnoreCase); + case PartCategories.Thermal: + return value.Contains("Thermal", StringComparer.OrdinalIgnoreCase); - case PartCategories.Electrical: - return value.Contains("Electrical", StringComparer.OrdinalIgnoreCase); + case PartCategories.Electrical: + return value.Contains("Electrical", StringComparer.OrdinalIgnoreCase); - case PartCategories.Coupling: - return value.Contains("Coupling", StringComparer.OrdinalIgnoreCase); + case PartCategories.Coupling: + return value.Contains("Coupling", StringComparer.OrdinalIgnoreCase); - case PartCategories.Payload: - return value.Contains("Payload", StringComparer.OrdinalIgnoreCase); + case PartCategories.Payload: + return value.Contains("Payload", StringComparer.OrdinalIgnoreCase); - default: - return false; + default: + return false; } } @@ -154,283 +154,300 @@ public static bool CheckModuleName(AvailablePart part, string[] values, bool con } public static bool CheckModuleNameType(AvailablePart part, string value) - { + { switch (value) { - case "ModuleAblator": - return part.partPrefab.Modules.Contains(); + case "ModuleAblator": + return part.partPrefab.Modules.Contains(); - case "ModuleActiveRadiator": - return part.partPrefab.Modules.Contains(); + case "ModuleActiveRadiator": + return part.partPrefab.Modules.Contains(); - case "ModuleAeroSurface": - return part.partPrefab.Modules.Contains(); + case "ModuleAeroSurface": + return part.partPrefab.Modules.Contains(); - case "ModuleAlternator": - return part.partPrefab.Modules.Contains(); + case "ModuleAlternator": + return part.partPrefab.Modules.Contains(); - case "ModuleAnalysisResource": - return part.partPrefab.Modules.Contains(); + case "ModuleAnalysisResource": + return part.partPrefab.Modules.Contains(); - case "ModuleAnchoredDecoupler": - return part.partPrefab.Modules.Contains(); + case "ModuleAnchoredDecoupler": + return part.partPrefab.Modules.Contains(); - case "ModuleAnimateGeneric": - return part.partPrefab.Modules.Contains(); + case "ModuleAnimateGeneric": + return part.partPrefab.Modules.Contains(); - case "ModuleAnimateHeat": - return part.partPrefab.Modules.Contains(); + case "ModuleAnimateHeat": + return part.partPrefab.Modules.Contains(); - case "ModuleAnimationGroup": - return part.partPrefab.Modules.Contains(); + case "ModuleAnimationGroup": + return part.partPrefab.Modules.Contains(); - case "ModuleAnimatorLandingGear": - return part.partPrefab.Modules.Contains(); + case "ModuleAnimatorLandingGear": + return part.partPrefab.Modules.Contains(); - case "ModuleAsteroid": - return part.partPrefab.Modules.Contains(); + case "ModuleAsteroid": + return part.partPrefab.Modules.Contains(); - case "ModuleAsteroidAnalysis": - return part.partPrefab.Modules.Contains(); + case "ModuleAsteroidAnalysis": + return part.partPrefab.Modules.Contains(); - case "ModuleAsteroidDrill": - return part.partPrefab.Modules.Contains(); + case "ModuleAsteroidDrill": + return part.partPrefab.Modules.Contains(); - case "ModuleAsteroidInfo": - return part.partPrefab.Modules.Contains(); + case "ModuleAsteroidInfo": + return part.partPrefab.Modules.Contains(); - case "ModuleAsteroidResource": - return part.partPrefab.Modules.Contains(); + case "ModuleAsteroidResource": + return part.partPrefab.Modules.Contains(); - case "ModuleBiomeScanner": - return part.partPrefab.Modules.Contains(); + case "ModuleBiomeScanner": + return part.partPrefab.Modules.Contains(); - case "ModuleCargoBay": - return part.partPrefab.Modules.Contains(); + case "ModuleCargoBay": + return part.partPrefab.Modules.Contains(); - case "ModuleCommand": - return part.partPrefab.Modules.Contains(); + case "ModuleCommand": + return part.partPrefab.Modules.Contains(); - case "ModuleConductionMultiplier": - return part.partPrefab.Modules.Contains(); + case "ModuleConductionMultiplier": + return part.partPrefab.Modules.Contains(); - case "ModuleControlSurface": - return part.partPrefab.Modules.Contains(); + case "ModuleControlSurface": + return part.partPrefab.Modules.Contains(); - case "ModuleCoreHeat": - return part.partPrefab.Modules.Contains(); + case "ModuleCoreHeat": + return part.partPrefab.Modules.Contains(); - case "ModuleDataTransmitter": - return part.partPrefab.Modules.Contains(); + case "ModuleDataTransmitter": + return part.partPrefab.Modules.Contains(); - case "ModuleDecouple": - return part.partPrefab.Modules.Contains(); + case "ModuleDecouple": + return part.partPrefab.Modules.Contains(); - case "ModuleDeployableRadiator": - return part.partPrefab.Modules.Contains(); + case "ModuleDeployableRadiator": + return part.partPrefab.Modules.Contains(); - case "ModuleDeployableSolarPanel": - return part.partPrefab.Modules.Contains(); + case "ModuleDeployableSolarPanel": + return part.partPrefab.Modules.Contains(); - case "ModuleDisplaceTweak": - return part.partPrefab.Modules.Contains(); + case "ModuleDisplaceTweak": + return part.partPrefab.Modules.Contains(); - case "ModuleDockingNode": - return part.partPrefab.Modules.Contains(); + case "ModuleDockingNode": + return part.partPrefab.Modules.Contains(); - case "ModuleDragModifier": - return part.partPrefab.Modules.Contains(); + case "ModuleDragModifier": + return part.partPrefab.Modules.Contains(); - case "ModuleEffectTest": - return part.partPrefab.Modules.Contains(); + case "ModuleEffectTest": + return part.partPrefab.Modules.Contains(); - case "ModuleEngines": - return part.partPrefab.Modules.Contains(); + case "ModuleEngines": + return part.partPrefab.Modules.Contains(); - case "ModuleEnginesFX": - return part.partPrefab.Modules.Contains(); + case "ModuleEnginesFX": + return part.partPrefab.Modules.Contains(); - case "ModuleEnviroSensor": - return part.partPrefab.Modules.Contains(); + case "ModuleEnviroSensor": + return part.partPrefab.Modules.Contains(); - case "ModuleFuelJettison": - return part.partPrefab.Modules.Contains(); + case "ModuleFuelJettison": + return part.partPrefab.Modules.Contains(); - case "ModuleGenerator": - return part.partPrefab.Modules.Contains(); + case "ModuleGenerator": + return part.partPrefab.Modules.Contains(); - case "ModuleGimbal": - return part.partPrefab.Modules.Contains(); + case "ModuleGimbal": + return part.partPrefab.Modules.Contains(); - case "ModuleGPS": - return part.partPrefab.Modules.Contains(); + case "ModuleGPS": + return part.partPrefab.Modules.Contains(); - case "ModuleGrappleNode": - return part.partPrefab.Modules.Contains(); + case "ModuleGrappleNode": + return part.partPrefab.Modules.Contains(); - case "ModuleJettison": - return part.partPrefab.Modules.Contains(); + case "ModuleJettison": + return part.partPrefab.Modules.Contains(); - case "ModuleJointMotor": - return part.partPrefab.Modules.Contains(); + case "ModuleJointMotor": + return part.partPrefab.Modules.Contains(); - case "ModuleJointMotorTest": - return part.partPrefab.Modules.Contains(); + case "ModuleJointMotorTest": + return part.partPrefab.Modules.Contains(); - case "ModuleJointPivot": - return part.partPrefab.Modules.Contains(); + case "ModuleJointPivot": + return part.partPrefab.Modules.Contains(); - case "ModuleLiftingSurface": - return part.partPrefab.Modules.Contains(); + case "ModuleLiftingSurface": + return part.partPrefab.Modules.Contains(); - case "ModuleLight": - return part.partPrefab.Modules.Contains(); + case "ModuleLight": + return part.partPrefab.Modules.Contains(); - case "ModuleOrbitalScanner": - return part.partPrefab.Modules.Contains(); + case "ModuleOrbitalScanner": + return part.partPrefab.Modules.Contains(); - case "ModuleOrbitalSurveyor": - return part.partPrefab.Modules.Contains(); + case "ModuleOrbitalSurveyor": + return part.partPrefab.Modules.Contains(); - case "ModuleOverheatDisplay": - return part.partPrefab.Modules.Contains(); + case "ModuleOverheatDisplay": + return part.partPrefab.Modules.Contains(); - case "ModuleParachute": - return part.partPrefab.Modules.Contains(); + case "ModuleParachute": + return part.partPrefab.Modules.Contains(); - case "ModulePhysicMaterial": - return part.partPrefab.Modules.Contains(); + case "ModulePhysicMaterial": + return part.partPrefab.Modules.Contains(); - case "ModuleProceduralFairing": - return part.partPrefab.Modules.Contains(); + case "ModuleProceduralFairing": + return part.partPrefab.Modules.Contains(); - case "ModuleRCS": - return part.partPrefab.Modules.Contains(); + case "ModuleRCS": + return part.partPrefab.Modules.Contains(); - case "ModuleReactionWheel": - return part.partPrefab.Modules.Contains(); + case "ModuleReactionWheel": + return part.partPrefab.Modules.Contains(); - case "ModuleRemoteController": - return part.partPrefab.Modules.Contains(); + case "ModuleRemoteController": + return part.partPrefab.Modules.Contains(); - case "ModuleResourceConverter": - return part.partPrefab.Modules.Contains(); + case "ModuleResourceConverter": + return part.partPrefab.Modules.Contains(); - case "ModuleResourceHarvester": - return part.partPrefab.Modules.Contains(); + case "ModuleResourceHarvester": + return part.partPrefab.Modules.Contains(); - case "ModuleResourceIntake": - return part.partPrefab.Modules.Contains(); + case "ModuleResourceIntake": + return part.partPrefab.Modules.Contains(); - case "ModuleResourceScanner": - return part.partPrefab.Modules.Contains(); + case "ModuleResourceScanner": + return part.partPrefab.Modules.Contains(); - case "ModuleRotatingJoint": - return part.partPrefab.Modules.Contains(); + case "ModuleRotatingJoint": + return part.partPrefab.Modules.Contains(); - case "ModuleSampleCollector": - return part.partPrefab.Modules.Contains(); + case "ModuleSampleCollector": + return part.partPrefab.Modules.Contains(); - case "ModuleSampleContainer": - return part.partPrefab.Modules.Contains(); + case "ModuleSampleContainer": + return part.partPrefab.Modules.Contains(); - case "ModuleSAS": - return part.partPrefab.Modules.Contains(); + case "ModuleSAS": + return part.partPrefab.Modules.Contains(); - case "ModuleScienceContainer": - return part.partPrefab.Modules.Contains(); + case "ModuleScienceContainer": + return part.partPrefab.Modules.Contains(); - case "ModuleScienceConverter": - return part.partPrefab.Modules.Contains(); + case "ModuleScienceConverter": + return part.partPrefab.Modules.Contains(); - case "ModuleScienceExperiment": - return part.partPrefab.Modules.Contains(); + case "ModuleScienceExperiment": + return part.partPrefab.Modules.Contains(); - case "ModuleScienceLab": - return part.partPrefab.Modules.Contains(); + case "ModuleScienceLab": + return part.partPrefab.Modules.Contains(); - case "ModuleSeeThroughObject": - return part.partPrefab.Modules.Contains(); + case "ModuleSeeThroughObject": + return part.partPrefab.Modules.Contains(); - case "ModuleStatusLight": - return part.partPrefab.Modules.Contains(); + case "ModuleStatusLight": + return part.partPrefab.Modules.Contains(); - case "ModuleSurfaceFX": - return part.partPrefab.Modules.Contains(); + case "ModuleSurfaceFX": + return part.partPrefab.Modules.Contains(); - case "ModuleTestSubject": - return part.partPrefab.Modules.Contains(); + case "ModuleTestSubject": + return part.partPrefab.Modules.Contains(); - case "ModuleToggleCrossfeed": - return part.partPrefab.Modules.Contains(); + case "ModuleToggleCrossfeed": + return part.partPrefab.Modules.Contains(); - case "ModuleTripLogger": - return part.partPrefab.Modules.Contains(); + case "ModuleTripLogger": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelBase": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelBase": + return part.partPrefab.Modules.Contains(); - case "FXModuleAnimateThrottle": - return part.partPrefab.Modules.Contains(); + case "FXModuleAnimateThrottle": + return part.partPrefab.Modules.Contains(); - case "FXModuleConstrainPosition": - return part.partPrefab.Modules.Contains(); + case "FXModuleConstrainPosition": + return part.partPrefab.Modules.Contains(); - case "FXModuleLookAtConstraint": - return part.partPrefab.Modules.Contains(); + case "FXModuleLookAtConstraint": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelBogey": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelBogey": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelBrakes": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelBrakes": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelDamage": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelDamage": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelDeployment": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelDeployment": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelLock": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelLock": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelMotor": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelMotor": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelMotorSteering": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelMotorSteering": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelSteering": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelSteering": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelSubmodule": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelSubmodule": + return part.partPrefab.Modules.Contains(); - case "ModuleWheelSuspension": - return part.partPrefab.Modules.Contains(); + case "ModuleWheelSuspension": + return part.partPrefab.Modules.Contains(); - default: // use specialisation where I can to avoid the "slow" type checking this entails - if (value != null && LoadAndProcess.Loaded_Modules.ContainsKey(value)) - { - Type string_type = LoadAndProcess.Loaded_Modules[value]; - foreach (PartModule pm in part.partPrefab.Modules) + default: // use specialisation where I can to avoid the "slow" type checking this entails + + if (value != null && LoadAndProcess.Loaded_Modules.ContainsKey(value)) { - if (value == pm.moduleName || (pm.moduleName != null && string_type.IsAssignableFrom(LoadAndProcess.Loaded_Modules[pm.moduleName]))) + Type string_type = LoadAndProcess.Loaded_Modules[value]; + + foreach (PartModule pm in part.partPrefab.Modules) { - return true; + if (value == pm.moduleName || (pm.moduleName != null && string_type.IsAssignableFrom(LoadAndProcess.Loaded_Modules[pm.moduleName]))) + { + return true; + } } } - } - return false; + return false; } } + public static bool Contains(this string source, string toCheck, StringComparison comp) + { + return source != null && toCheck != null && source.IndexOf(toCheck, comp) >= 0; + } /// /// check the part name/id exactly matches one in the list /// - public static bool CheckName(AvailablePart part, string[] value) + public static bool CheckName(AvailablePart part, string[] value, bool exact = true) { - return value.Contains(part.name.Replace('.', '_'), StringComparer.OrdinalIgnoreCase); + if (exact) + return value.Contains(part.name.Replace('.', '_'), StringComparer.OrdinalIgnoreCase); + else + { + string p = part.name.Replace('.', '_'); + foreach (var s in value) + { + if (p.Contains(s, StringComparison.OrdinalIgnoreCase)) + return true; + } + return false; + } } /// @@ -470,6 +487,32 @@ public static bool CheckPropellant(AvailablePart part, string[] values, bool con return false; } + /// + /// check the propellants this engine uses + /// + public static bool CheckEngineType(AvailablePart part, string[] values, bool contains = true, bool exact = false) + { + + ModuleEngines e; + for (int i = 0; i < part.partPrefab.Modules.Count; ++i) + { + + e = part.partPrefab.Modules[i] as ModuleEngines; + if (e != null) + { + List s = new List(); + s.Add(e.engineType); + + if (e != null && Contains(values, s, p => p.ToString(), contains, exact)) + { + return true; + } + } + } + return false; + } + + /// /// check the tech required to unlock the part outside sandbox /// @@ -836,7 +879,36 @@ public static bool Contains(string[] CheckParams, IEnumerable partParams return i == CheckParams.Length; } } - +#if false + public static bool Contains(string[] CheckParams, IEnumerable partParams, string ToStringFunc, bool contains = true, bool exact = false) + { + if (!exact) + { + foreach (T s in partParams) + + { + if (contains == CheckParams.Contains(s.Trim())) + { + return true; + } + } + return false; + } + else + { + int i = 0; + foreach (T s in partParams) + { + if (!CheckParams.Contains(s.Trim())) + { + return false; + } + ++i; + } + return i == CheckParams.Length; + } + } +#endif public static bool Contains(string[] CheckParams, IEnumerable partParams, Func ToStringFunc, bool contains = true, bool exact = false) { if (!exact) diff --git a/GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/ElectricPropeller.png b/GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/ElectricPropeller.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0b768df4eda5ed42d20429481d632da36cd822 GIT binary patch literal 1060 zcmV+<1l#+GP)@GG5Y*`q zMTYvI4+;v3f=m=I!yAY)WjgjESaqW!GH+Ycb!l?^&XQ;;$?V$c{KKzJn(v(Na=x6T z0RM@|Ncm(Rw~(pG3*;_x9qIf_PD_!M$P#20($0Q-jnE|ek!ED^FgjjlCYMO@^~#E> zE9C-1H>)!#3&%5%hc_gfR73o3dA)jm!613Yalcd~q}k zg~a-=Ux|)Rs0GV_Wz5PMj|0WPXf$eEV;T1J5E_Ya`nPXHXUoHElgC??V8_kPp0>%8 zl6dD@DYZou_2P8@L%Q6uQ3N%C)^YW-DNxCQq zR1`(f>0Eo zjg8{*y?cAN0sOiX9Oa5el{Xz7eb>X`QSBHlV5B9%pk6k8dcr?pf}Ue#kL8EPM*oMG zFWqOtVOQ7l=bZfhy-SS6IB>gx`h1kI;5;56bLaL~^1L9mw5WIf6o73$MMb&eSFcu= zFI=cr2Ljq+77Ux1t@()){-#hUx*3c|FLOX8NvN4U+pASnsKr>ZKwh36zzPPA91*Xy zwss#&uRWb5EM1zr{OnoZseAWw!kwL*-q66G!QVY#yo}z+*1=Fj%FA=7)z^!m(o%U1 ejLe_f;nh#E*w>qa#J$k~0000V53p6knblEskN#f3lCD%R%KY^l59NWog zFbDkUP-4#EWPk@KPR~ANJ@}O3 zoHu86CWZ#{6dVB-ki<4V0O7Bdy(J4tVz@+!%~*9SnKYp#D@bDO@@W_tiU7WIIR7e= zM-q)^HDNGQL#`eS>2m)3oehnRxpFr;fH6iW6^e%qoB2=>JfB}UDD6EG>-&@`@wR>Y zq*_X8JR235wPeYDmYWOj#2p?FW7XBsCIp<9jR58gg20w8J(<3?D~j@s zWyp38@CB`{Vx^)82C|I%d?YSOtoNLA^X8ed%a>0b6-7#>Pd`jfoR~#S(_Q4)8nSYw z-g@w$9w;u(R~;AD*K0oxA8wkIGG@Uu;2HCB=H#H3d5j^j-fKKVSvFZ=p<(9dntxFa4rv)YZh4FcEg|)-JAD6Z>7$ynaPta#xoK z1X)$7tZ4!om&%a{@#{L3SFO@RG!zO4nwvdqo0@zjib5sBpgzMOK9p4A$Bqus*V!ph zD+I>+4T9CyMh@-TC2xZg>n~_eLBXi2=*;V7W$K*Mr+v$xKNkb9UWpTeK~YF`CgM$S z>(=PoSWGw<4hv&Lq2TwrE)_(hqev)}!&FtEybo||(gO$N8l0K1yS=|4Y)kv$gIavy zg14fj#T!5%i`v^g{+=E}(Tr@%mgv!j2LEOl=8xW6e!rj9)NHFPCiVU-^uKQS3RaFj2yo_EMl!E~V sLtnmBr!_QaJ72#JuO>tDr#8FtA5tyi26-zoY5)KL07*qoM6N<$f|PaQJOBUy literal 0 HcmV?d00001 diff --git a/GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/Propeller.png b/GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/Propeller.png new file mode 100644 index 0000000000000000000000000000000000000000..a926f1e52a15eff554d927009f38573c45866ade GIT binary patch literal 597 zcmV-b0;>IqP)*SxAB{FyNr$VKKN*o3DtB>c;kh_!hI%l!N1T5LVbuiCM0f4O>7| z(=ZMuS$6xx52nGJ#^xnxws)!lhnfyF8_S?D1LwtHUG!1e3V|wJ=OQo<5}M9ypup0; z1e99J0kEs-`wC_=90Y3wtKeN>Xo~Suvk$%m2cQEiDB9C9tXS7O8`Xh1a0)&^40MBg zg`+3NPfkL#Jq9zN*2J+&)u0P3YNnW25&>2^oJ9(rTtM*@RM~jHg}7 zh9h1C(5HEJMM1_lp4@~{w*#OQZT;HOUMMp$WV!?u?C%K*x*b5kR`x0C@)|(WR!%AE z@*2RSa4JRjhM1u(BhmSfv)@g4WopQD2I$gpVJS!44uBNaJiDeL#&ZGP30u7gfNr;R j8Qt{4xs(@wYMs>&ZA+y4LJ>tg00000NkvXXu0mjfWxN2s literal 0 HcmV?d00001 diff --git a/GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/Propeller_selected.png b/GameData/000_FilterExtensions/Icons/Autoloaded_PatchIcon/Propeller_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc37941dbea9c05e405fe3a2c01f140de466ac5 GIT binary patch literal 620 zcmV-y0+aoTP)p15@LI}56 zFS%gQBjRD19a@(m0;0tNW%i&Z*s1#9BC{>kjX zwKD|10ka}l6}aj(?1!?U;TAj%vrcH6fakDd7;^=#`#W{R7efb`jY&w>5xfmvt3E+0 z!evwER(J*5hR!q4qP5RJRx79AqoMC_cu~(o$btG`8g>H)dImZ81pA85a1+J?+RJH} zI-Kv2i|7ixghluRRk#D+0|IS8US&_Vorh8AiMojWX1d@uj0>|Sl)+0432HF%{saTX zu;V2nc=&e0Z|ku=xt4*uYL5MqyIjL|&(lmihD|NFT%1p$j1~DSNWcqR?m4w-oZ|!b z!^+cZ28Pt;@=N%))ewrZ2t7T7Hpsw(W*8VW+{Z6co>mLbQ`vR~E<#o-cVeR5rhyLU z=o^#S-6M5yuKIQ9E{RX>Y-5)UhIEfNgi1%U7+c zWYvJutl{2{Nc*s;oqXk)aG)6mlIk$})_QQwg!MnQ4cC7$km~Ion - Argon name = HydrogenGas,ElectricCharge=>Ion - Hydrogen name = LqdHydrogen=>Nuclear Engines - name = LiquidFuel=>Nuclear Rockets + //name = LiquidFuel=>Nuclear Rockets + name = LiquidFuel=>Liquid Fuel Engines name = ElectricCharge,IntakeAtm=>Electric Fans + name = ElectricCharge=>Electric Prop Engines + name = ElectricCharge,FSCoolant=>Electric Prop Engines name = Airflow,ElectricCharge=>Electric Jet name = Karbonite=>Karbonite Engines name = IntakeAtm,Karbonite=>Karbonite Jets @@ -38,6 +41,7 @@ FilterSetIcon icon = Nuclear Rockets=>NuclearRocket icon = Electric Fans=>FanEngine icon = Electric Jet=>FanEngine + icon = Electric Prop Engines=>ElectricPropeller icon = Karbonite Engines=>EngineKarbonite icon = Karbonite Jets=>EngineJetKarbonite icon = Karborundum Engines=>EngineKarborundum @@ -47,4 +51,5 @@ FilterSetIcon icon = MJ Propellant Engines=>EngineMJ icon = Methane Engines=>EngineMethane icon = Fusion Engines=>EngineFusion + icon = Liquid Fuel Engines=>LiquidFuel } diff --git a/GameData/000_FilterExtensions_Configs/Subcategories_AJE.cfg b/GameData/000_FilterExtensions_Configs/Subcategories_AJE.cfg index 9ad4c3c2..6c9e96f6 100644 --- a/GameData/000_FilterExtensions_Configs/Subcategories_AJE.cfg +++ b/GameData/000_FilterExtensions_Configs/Subcategories_AJE.cfg @@ -8,6 +8,35 @@ SUBCATEGORY { type = moduleName value = ModuleEnginesAJEJet + + CHECK + { + type = propellant + value = LiquidFuel + } + } + } +} + +SUBCATEGORY +{ + name = Prop Engines + icon = Propeller + FILTER + { + CHECK + { + type = name + value = prop + exact = false + } + } + FILTER + { + CHECK + { + type = moduleName + value = ModuleEnginesAJEPropeller, ModuleEnginesAJERotor } } } diff --git a/GameData/000_FilterExtensions_Configs/Subcategories_FS.cfg b/GameData/000_FilterExtensions_Configs/Subcategories_FS.cfg new file mode 100644 index 00000000..747441f6 --- /dev/null +++ b/GameData/000_FilterExtensions_Configs/Subcategories_FS.cfg @@ -0,0 +1,13 @@ +SUBCATEGORY +{ + name = Prop Engines + icon = Propeller + FILTER + { + CHECK + { + type = moduleName + value = FSPropellerEngine, FSPropellerEnginePush + } + } +} diff --git a/GameData/000_FilterExtensions_Configs/Subcategories_NuclearRockets.cfg b/GameData/000_FilterExtensions_Configs/Subcategories_NuclearRockets.cfg new file mode 100644 index 00000000..2946f48e --- /dev/null +++ b/GameData/000_FilterExtensions_Configs/Subcategories_NuclearRockets.cfg @@ -0,0 +1,18 @@ +SUBCATEGORY +{ + name = Nuclear Rockets + icon = NuclearRocket + FILTER + { + CHECK + { + type = moduleName + value = ModuleEngines, ModuleEnginesFX + } + CHECK + { + type = engineType + value = Nuclear + } + } +}