diff --git a/GameData/VABOrganizer/Assets/vaborganizer.dat b/GameData/VABOrganizer/Assets/vaborganizer.dat
index b11a0d1..a535971 100644
Binary files a/GameData/VABOrganizer/Assets/vaborganizer.dat and b/GameData/VABOrganizer/Assets/vaborganizer.dat differ
diff --git a/GameData/VABOrganizer/Localization/en-us.cfg b/GameData/VABOrganizer/Localization/en-us.cfg
index 6d5b2eb..f55c3fb 100644
--- a/GameData/VABOrganizer/Localization/en-us.cfg
+++ b/GameData/VABOrganizer/Localization/en-us.cfg
@@ -3,6 +3,8 @@ Localization
en-us
{
#LOC_VABOrganizer_BulkheadSortTooltip = Sort By Profile
+ #LOC_VABOrganizer_AdvancedSortTooltip = Advanced Sorting
+
// Bulkhead codes
// ---------------
// Stock and cylinders
@@ -157,5 +159,42 @@ Localization
#LOC_VABOrganizer_Subcategory_crewHabitation = Habitation
#LOC_VABOrganizer_Subcategory_airlocks = Airlocks
+ // Sorters
+ // ---------------
+
+ #LOC_VABOrganizer_Sorter_CrewCapacity = Crew Capacity
+ #LOC_VABOrganizer_Sorter_SASLevel = SAS Level
+ #LOC_VABOrganizer_Sorter_ReactionWheelTorque = Reaction Wheel Torque
+
+ #LOC_VABOrganizer_Sorter_AntennaPower = Antenna Strength
+ #LOC_VABOrganizer_Sorter_AntennaRate = Transmit Rate
+ #LOC_VABOrganizer_Sorter_AntennaCost = Transmit Cost
+
+ #LOC_VABOrganizer_Sorter_RCSIspVac = RCS Isp (Vac.)
+ #LOC_VABOrganizer_Sorter_RCSThrustVac = RCS Thrust (Vac.)
+
+ #LOC_VABOrganizer_Sorter_EngineThrustVac = Thrust (Vac.)
+ #LOC_VABOrganizer_Sorter_EngineThrustSL = Thrust (1 atm)
+ #LOC_VABOrganizer_Sorter_EngineTWRVac = TWR (Vac.)
+ #LOC_VABOrganizer_Sorter_EngineTWRSL = TWR (1 atm)
+ #LOC_VABOrganizer_Sorter_EngineISPVac = Isp (Vac.)
+ #LOC_VABOrganizer_Sorter_EngineISPSL = Isp (1 atm)
+ #LOC_VABOrganizer_Sorter_EngineGimbalRange = Gimbal Range
+
+ #LOC_VABOrganizer_Sorter_InventorySlots = Inventory Slots
+ #LOC_VABOrganizer_Sorter_InventoryVolume = Inventory Capacity
+
+ #LOC_VABOrganizer_Sorter_ExperimentValue = Experiment Value
+ #LOC_VABOrganizer_Sorter_Experiment = Experiment Type
+
+ #LOC_VABOrganizer_Sorter_PowerConsumption = Electricity Consumed
+ #LOC_VABOrganizer_Sorter_PowerGeneration = Electricity Generated
+
+ #LOC_VABOrganizer_Sorter_HeatConsumption = Heat Removed
+ #LOC_VABOrganizer_Sorter_HeatGeneration = Heat Generated
+
+ #LOC_VABOrganizer_Sorter_PowerMax = Electricity Capacity
+ #LOC_VABOrganizer_Sorter_MonopropMax = Monopropellant Capacity
+
}
}
\ No newline at end of file
diff --git a/GameData/VABOrganizer/Plugins/VABOrganizer.dll b/GameData/VABOrganizer/Plugins/VABOrganizer.dll
index 28c93cf..39b31d4 100644
Binary files a/GameData/VABOrganizer/Plugins/VABOrganizer.dll and b/GameData/VABOrganizer/Plugins/VABOrganizer.dll differ
diff --git a/GameData/VABOrganizer/Settings.cfg b/GameData/VABOrganizer/Settings.cfg
index e69de29..66292e6 100644
--- a/GameData/VABOrganizer/Settings.cfg
+++ b/GameData/VABOrganizer/Settings.cfg
@@ -0,0 +1,13 @@
+ORGANIZERSETTINGS
+{
+ /// Log debug messages
+ DebugMode = true
+ /// If True, Noto Sans, if False, Liberation Sans
+ KSPDefaultFont = true
+ /// Size of the font on tags
+ LabelFontSize = 9
+ /// Size of the font on tags in R&D
+ RDLabelFontSize = 9
+ /// Transparency of tags
+ LabelAlpha = 0.4
+}
\ No newline at end of file
diff --git a/GameData/VABOrganizer/Sorting/advancedSorters.cfg b/GameData/VABOrganizer/Sorting/advancedSorters.cfg
new file mode 100644
index 0000000..3b75490
--- /dev/null
+++ b/GameData/VABOrganizer/Sorting/advancedSorters.cfg
@@ -0,0 +1,281 @@
+/// ORGANIZERSORTERTYPE
+/// {
+/// // Internal unique name of the sorter
+/// name = sortReactionWheel
+/// // Label for the UI
+/// Label = Reaction Wheel Torque
+/// // The variable to use for this sorter
+/// SortVariable = ModuleReactionWheel_AverageTorque
+/// // The VAB categories where this sorter will appear
+/// VisibleCategories
+/// {
+/// category = Function_Pods
+/// category = Function_Control
+/// }
+/// }
+ORGANIZERSORTERS
+{
+ ORGANIZERSORTERTYPE
+ {
+ name = sortReactionWheel
+ Label = #LOC_VABOrganizer_Sorter_ReactionWheelTorque
+ SortVariable = ModuleVar_ReactionWheelAverageTorque
+ VisibleCategories
+ {
+ category = Function_Pods
+ category = Function_Control
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortResourcePower
+ Label = #LOC_VABOrganizer_Sorter_PowerMax
+ SortVariable = ResourceVar_Power
+ VisibleCategories
+ {
+ category = Function_Pods
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortResourceMonoprop
+ Label = #LOC_VABOrganizer_Sorter_MonopropMax
+ SortVariable = ResourceVar_Monoprop
+ VisibleCategories
+ {
+ category = Function_Pods
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortCrewCapacity
+ Label = #LOC_VABOrganizer_Sorter_CrewCapacity
+ SortVariable = PartVar_CrewCapacity
+ VisibleCategories
+ {
+ category = Function_Pods
+ category = Function_Utility
+ category = Function_Science
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineISPASL
+ Label = #LOC_VABOrganizer_Sorter_EngineISPSL
+ SortVariable = ModuleVar_EngineIspASL
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineISP
+ Label = #LOC_VABOrganizer_Sorter_EngineISPVac
+ SortVariable = ModuleVar_EngineIspVacuum
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineTWRASL
+ Label = #LOC_VABOrganizer_Sorter_EngineTWRSL
+ SortVariable = ModuleVar_EngineTWRASL
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineTWR
+ Label = #LOC_VABOrganizer_Sorter_EngineTWRVac
+ SortVariable = ModuleVar_EngineTWRVacuum
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineThrustASL
+ Label = #LOC_VABOrganizer_Sorter_EngineThrustSL
+ SortVariable = ModuleVar_EngineThrustASL
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineThrust
+ Label = #LOC_VABOrganizer_Sorter_EngineThrustVac
+ SortVariable = ModuleVar_EngineThrustVacuum
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortEngineGimbal
+ Label = #LOC_VABOrganizer_Sorter_EngineGimbalRange
+ SortVariable = ModuleVar_EngineGimbal
+ VisibleCategories
+ {
+ category = Function_Engine
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortRCSThrust
+ Label = #LOC_VABOrganizer_Sorter_RCSThrustVac
+ SortVariable = ModuleVar_RCSThrustVacuum
+ VisibleCategories
+ {
+ category = Function_Control
+ category = Function_Pods
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortRCSISP
+ Label = #LOC_VABOrganizer_Sorter_RCSIspVac
+ SortVariable = ModuleVar_RCSIspVacuum
+ VisibleCategories
+ {
+ category = Function_Control
+ category = Function_Pods
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortAntennaPower
+ Label = #LOC_VABOrganizer_Sorter_AntennaPower
+ SortVariable = ModuleVar_AntennaPower
+ VisibleCategories
+ {
+ category = Function_Communication
+ category = Function_Pods
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortAntennaCost
+ Label = #LOC_VABOrganizer_Sorter_AntennaCost
+ SortVariable = ModuleVar_AntennaCost
+ VisibleCategories
+ {
+ category = Function_Communication
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortAntennaRate
+ Label = #LOC_VABOrganizer_Sorter_AntennaRate
+ SortVariable = ModuleVar_AntennaRate
+ VisibleCategories
+ {
+ category = Function_Communication
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortSASLevel
+ Label = #LOC_VABOrganizer_Sorter_SASLevel
+ SortVariable = ModuleVar_SASLevel
+ VisibleCategories
+ {
+ category = Function_Control
+ category = Function_Pods
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortPowerGeneration
+ Label = #LOC_VABOrganizer_Sorter_PowerGeneration
+ SortVariable = ModuleVar_PowerGenerated
+ VisibleCategories
+ {
+ category = Function_Electrical
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortPowerConsumption
+ Label = #LOC_VABOrganizer_Sorter_PowerConsumption
+ SortVariable = ModuleVar_PowerConsumed
+ VisibleCategories
+ {
+ category = Function_Utility
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortExperiment
+ Label = #LOC_VABOrganizer_Sorter_Experiment
+ SortVariable = ModuleVar_Experiment
+ VisibleCategories
+ {
+ category = Function_Science
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortExperimentValue
+ Label = #LOC_VABOrganizer_Sorter_ExperimentValue
+ SortVariable = ModuleVar_ExperimentValue
+ VisibleCategories
+ {
+ category = Function_Science
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortInventory
+ Label = #LOC_VABOrganizer_Sorter_InventorySlots
+ SortVariable = ModuleVar_InventorySlots
+ VisibleCategories
+ {
+ category = Function_Utility
+ category = Function_Pods
+ category = Function_Cargo
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortInventoryVolume
+ Label = #LOC_VABOrganizer_Sorter_InventoryVolume
+ SortVariable = ModuleVar_InventoryVolume
+ VisibleCategories
+ {
+ category = Function_Utility
+ category = Function_Pods
+ category = Function_Cargo
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortHeatProduced
+ Label = #LOC_VABOrganizer_Sorter_HeatGeneration
+ SortVariable = ModuleVar_HeatGenerated
+ VisibleCategories
+ {
+ category = Function_Utility
+ category = Function_Engine
+ category = Function_Electrical
+ }
+ }
+ ORGANIZERSORTERTYPE
+ {
+ name = sortHeatConsumed
+ Label = #LOC_VABOrganizer_Sorter_HeatConsumption
+ SortVariable = ModuleVar_HeatRemoved
+ VisibleCategories
+ {
+ category = Function_Thermal
+ }
+ }
+}
\ No newline at end of file
diff --git a/GameData/VABOrganizer/Sorting/sortVariablesStock.cfg b/GameData/VABOrganizer/Sorting/sortVariablesStock.cfg
new file mode 100644
index 0000000..d00ec21
--- /dev/null
+++ b/GameData/VABOrganizer/Sorting/sortVariablesStock.cfg
@@ -0,0 +1,191 @@
+/// This file lists all the variables that are config-generated - e.g. can be simply parsed from a config file
+/// ORGANIZERSORTVARIABLE
+/// {
+/// name = moduleDataTransmitter_antennaPower
+/// /// The name of the variable to use to store the data. This is used in the actual sorter definition
+/// /// Convention is that if it is Part-level use PartVar_myVarName, if Module-level use ModuleVar_myVarName
+/// VariableName = ModuleVar_AntennaPower
+/// /// What kind of node the data comes from: PART, RESOURCE, MODULE
+/// NodeType = MODULE
+/// /// What the name of the node is
+/// NodeName = ModuleDataTransmitter
+/// // The actual confignode value to parse from
+/// FieldName = antennaPower
+/// }
+ORGANIZERVARIABLES
+{
+ //// PART-level
+ ORGANIZERSORTVARIABLE
+ {
+ name = part_crewCapacity
+ VariableName = PartVar_CrewCapacity
+ NodeType = PART
+ FieldName = CrewCapacity
+ }
+ /// RESOURCE-level
+ ORGANIZERSORTVARIABLE
+ {
+ name = resource_electricCharge
+ VariableName = ResourceVar_Power
+ NodeType = RESOURCE
+ NodeName = ElectricCharge
+ FieldName = maxAmount
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = resource_monoProp
+ VariableName = ResourceVar_Monoprop
+ NodeType = RESOURCE
+ NodeName = MonoPropellant
+ FieldName = maxAmount
+ }
+
+ /// MODULE-level
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleDataTransmitter_antennaPower
+ VariableName = ModuleVar_AntennaPower
+ NodeType = MODULE
+ NodeName = ModuleDataTransmitter
+ FieldName = antennaPower
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleGimbal_range
+ VariableName = ModuleVar_EngineGimbal
+ NodeType = MODULE
+ NodeName = ModuleGimbal
+ FieldName = gimbalRange
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleSAS_Level
+ VariableName = ModuleVar_SASLevel
+ NodeType = MODULE
+ NodeName = ModuleSAS
+ FieldName = SASServiceLevel
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleRadiator_capacity
+ VariableName = ModuleVar_RadiatorCapacity
+ NodeType = MODULE
+ NodeName = ModuleActiveRadiator
+ FieldName = maxEnergyTransfer
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleSolarPanel_powerProduced
+ VariableName = ModuleVar_PowerGenerated
+ NodeType = MODULE
+ NodeName = ModuleDeployableSolarPanel
+ FieldName = chargeRate
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleGenerator_powerProduced
+ VariableName = ModuleVar_PowerGenerated
+ NodeType = MODULE_DATA
+ NodeName = ModuleGenerator
+ DataNodeType = OUTPUT_RESOURCE
+ DataNodeName = ElectricCharge
+ FieldName = rate
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleResourceConverter_powerProduced
+ VariableName = ModuleVar_PowerGenerated
+ NodeType = MODULE_DATA
+ NodeName = ModuleResourceConverter
+ DataNodeType = OUTPUT_RESOURCE
+ DataNodeName = ElectricCharge
+ FieldName = Ratio
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleResourceConverter_powerConsumed
+ VariableName = ModuleVar_PowerConsumed
+ NodeType = MODULE_DATA
+ NodeName = ModuleResourceConverter
+ DataNodeType = INPUT_RESOURCE
+ DataNodeName = ElectricCharge
+ FieldName = Ratio
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleResourceHarvester_powerConsumed
+ VariableName = ModuleVar_PowerConsumed
+ NodeType = MODULE_DATA
+ NodeName = ModuleResourceHarvester
+ DataNodeType = INPUT_RESOURCE
+ DataNodeName = ElectricCharge
+ FieldName = Ratio
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleAsteroidDrill_powerConsumed
+ VariableName = ModuleVar_PowerConsumed
+ NodeType = MODULE_DATA
+ NodeName = ModuleAsteroidDrill
+ DataNodeType = INPUT_RESOURCE
+ DataNodeName = ElectricCharge
+ FieldName = Ratio
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleCometDrill_powerConsumed
+ VariableName = ModuleVar_PowerConsumed
+ NodeType = MODULE_DATA
+ NodeName = ModuleCometDrill
+ DataNodeType = INPUT_RESOURCE
+ DataNodeName = ElectricCharge
+ FieldName = Ratio
+ }
+
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleSolarPanel_powerProduced
+ VariableName = ModuleVar_InventorySlots
+ NodeType = MODULE
+ NodeName = ModuleInventoryPart
+ FieldName = InventorySlots
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleSolarPanel_powerProduced
+ VariableName = ModuleVar_InventoryVolume
+ NodeType = MODULE
+ NodeName = ModuleInventoryPart
+ FieldName = packedVolumeLimit
+ }
+ ORGANIZERSORTVARIABLE
+ {
+ name = moduleActiveRadiator_heatRemoved
+ VariableName = ModuleVar_HeatRemoved
+ NodeType = MODULE
+ NodeName = ModuleActiveRadiator
+ FieldName = maxEnergyTransfer
+ }
+}
+/// For user reference, internal variables
+/// - ModuleVar_ReactionWheelAverageTorque -> ModuleReactionWheel: Average torque from wheel axes
+/// - ModuleVar_RCSThrustVacuum -> ModuleRCSFX: Single thruster thrust in vacuum
+/// - ModuleRCS_RCSThrustASL -> ModuleRCSFX: Single thruster thrust at 1 atm
+/// - ModuleVar_RCSIspASL -> ModuleRCSFX: Isp at 1 atm
+/// - ModuleVar_RCSIspVacuum -> ModuleRCSFX: Isp in Vacuum
+/// - ModuleVar_EngineThrustVacuum -> ModuleEnginesFX
+/// - ModuleVar_EngineThrustASL -> ModuleEnginesFX
+/// - ModuleVar_EngineTWRASL -> ModuleEnginesFX
+/// - ModuleVar_EngineTWRVacuum -> ModuleEnginesFX
+/// - ModuleVar_EngineIspASL -> ModuleEnginesFX: Isp at 1 atm
+/// - ModuleVar_EngineIspVacuum -> ModuleEnginesFX: Isp in Vacuum
+/// - ModuleVar_AntennaCost -> ModuleDataTransmitter: Cost per second of data transmission
+/// - ModuleVar_AntennaRate -> ModuleDataTransmitter: Rate of data transmission
+/// - ModuleVar_AntennaCombinability -> ModuleDataTransmitter: Antenna combineability
+/// - ModuleVar_Experiment -> ModuleScienceExperiment: the hashed experiment ID
+/// - ModuleVar_ExperimentValue -> ModuleScienceExperiment: the calculated value of the experiment
+///
+///
+///
+///
+///
\ No newline at end of file
diff --git a/GameData/VABOrganizer/Versioning/VABOrganizer.version b/GameData/VABOrganizer/Versioning/VABOrganizer.version
index e6ceb76..b1bd2a4 100644
--- a/GameData/VABOrganizer/Versioning/VABOrganizer.version
+++ b/GameData/VABOrganizer/Versioning/VABOrganizer.version
@@ -5,8 +5,8 @@
"VERSION":
{
"MAJOR":1,
- "MINOR":0,
- "PATCH":1,
+ "MINOR":1,
+ "PATCH":0,
"BUILD":0
},
"KSP_VERSION":
diff --git a/Source/VABOrganizer/AdvancedSortType.cs b/Source/VABOrganizer/AdvancedSortType.cs
new file mode 100644
index 0000000..f143ccc
--- /dev/null
+++ b/Source/VABOrganizer/AdvancedSortType.cs
@@ -0,0 +1,75 @@
+using System.Collections.Generic;
+using KSP.Localization;
+
+namespace VABOrganizer
+{
+ public class AdvancedSortType
+ {
+ public string Name
+ {
+ get { return name; }
+ private set { name = value; }
+ }
+ ///
+ /// Localized sorter name
+ ///
+ public string Label
+ {
+ get { return label; }
+ private set { label = value; }
+ }
+ ///
+ /// The sorter to use
+ ///
+ public string Sorter
+ {
+ get { return sorter; }
+ private set { sorter = value; }
+ }
+ ///
+ /// The VAB PartCategories where this sorter will be used
+ ///
+ public List AssociatedPartCategories
+ {
+ get { return partCategories; }
+ private set { partCategories = value; }
+ }
+
+ protected const string NODE_NAME = "name";
+ protected const string NODE_LABEL = "Label";
+ protected const string NODE_SORTER = "SortVariable";
+ protected const string NODE_ASSOCIATED_CATEGORY = "VisibleCategories";
+ protected const string NODE_CATEGORY = "category";
+
+ private string name = "category";
+ private string label = "label";
+ private string sorter = "isp";
+ private List partCategories;
+
+ public AdvancedSortType() { }
+
+ public AdvancedSortType(ConfigNode node)
+ {
+ Load(node);
+ }
+
+ public void Load(ConfigNode node)
+ {
+ node.TryGetValue(NODE_NAME, ref name);
+ node.TryGetValue(NODE_LABEL, ref label);
+ node.TryGetValue(NODE_SORTER, ref sorter);
+
+ partCategories = new List();
+ ConfigNode categoryNode = new ConfigNode();
+ if (node.TryGetNode(NODE_ASSOCIATED_CATEGORY, ref categoryNode))
+ {
+ string[] categories = categoryNode.GetValues(NODE_CATEGORY);
+ foreach (string stringCat in categories)
+ {
+ partCategories.Add(stringCat);
+ }
+ }
+ label = Localizer.Format(label);
+ }
+ }
+}
diff --git a/Source/VABOrganizer/AdvancedSorting.cs b/Source/VABOrganizer/AdvancedSorting.cs
new file mode 100644
index 0000000..68d4a3c
--- /dev/null
+++ b/Source/VABOrganizer/AdvancedSorting.cs
@@ -0,0 +1,249 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+using UnityEngine.UI;
+using UniLinq;
+using TMPro;
+using KSP.UI;
+using KSP.UI.Screens;
+using KSP.UI.TooltipTypes;
+using KSP.Localization;
+
+namespace VABOrganizer
+{
+ ///
+ /// Creates and manages the advanced sorting stuff
+ ///
+ public static class AdvancedSorting
+ {
+ public static AdvancedSortType CurrentAdvancedSort = null;
+
+ static UIAdvancedSorterWidget SortWidget;
+ static UIListSorter uiSorterBase;
+ static EditorPartList uiPartList;
+ static string cachedCategorySort = "";
+
+ const string BULKHEAD_SORT_KEY = "#LOC_VABOrganizer_BulkheadSortTooltip";
+ const string ADVANCED_SORT_KEY = "#LOC_VABOrganizer_AdvancedSortTooltip";
+
+ ///
+ /// Creates the sorting UI
+ ///
+ public static void CreateVABSortUI()
+ {
+ uiSorterBase = GameObject.FindObjectOfType();
+ uiPartList = GameObject.FindObjectOfType();
+ GameObject sortByNameButton = uiSorterBase.gameObject.GetChild("StateButtonName");
+ if (!uiSorterBase.gameObject.GetChild("StateButtonProfile"))
+ {
+ CreateSortButton(uiSorterBase, sortByNameButton, "Profile", 4, true, BULKHEAD_SORT_KEY);
+ CreateSortButton(uiSorterBase, sortByNameButton, "Custom", 5, false, ADVANCED_SORT_KEY);
+
+ }
+ else
+ {
+ /// maybe throw warning later
+ }
+ RestyleButtons(uiSorterBase.transform);
+ CreateAdvancedButton(uiSorterBase.transform);
+ }
+
+ ///
+ /// Create a new sorting button
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static void CreateSortButton(UIListSorter sorter, GameObject template, string sortName, int buttonIndex, bool startingSorter, string tooltipKey)
+ {
+ GameObject newSortButtonObj = GameObject.Instantiate(template);
+ newSortButtonObj.transform.SetParent(sorter.transform, false);
+
+ Button sortingButton = newSortButtonObj.GetComponent