private void AddFilter() { //Loads the RealChute parachutes icon Texture2D normal = new Texture2D(32, 32), selected = new Texture2D(32, 32); normal.LoadImage(File.ReadAllBytes(Path.Combine(RCUtils.pluginDataURL, "FilterIcon.png"))); selected.LoadImage(File.ReadAllBytes(Path.Combine(RCUtils.pluginDataURL, "FilterIcon_selected.png"))); PartCategorizer.Icon icon = new PartCategorizer.Icon("RC_Parachutes", normal, selected); //Adds the Parachutes filter to the Filter by Function category PartCategorizer.Category filterByFunction = PartCategorizer.Instance.filters .Find(f => f.button.categoryName == "Filter by Function"); PartCategorizer.AddCustomSubcategoryFilter(filterByFunction, "Parachutes", icon, p => p.moduleInfos.Any(m => m.moduleName == "RealChute" || m.moduleName == "Parachute")); //Sets the buttons in the Filter by Module category List <PartCategorizer.Category> modules = PartCategorizer.Instance.filters .Find(f => f.button.categoryName == "Filter by Module").subcategories; modules.Remove(modules.Find(m => m.button.categoryName == "Procedural Chute")); modules.Select(m => m.button).Single(b => b.categoryName == "RealChute").SetIcon(icon); //Apparently needed to make sure the buttons in Filter by Function show when the editor is loaded RUIToggleButtonTyped button = filterByFunction.button.activeButton; button.SetFalse(button, RUIToggleButtonTyped.ClickType.FORCED); button.SetTrue(button, RUIToggleButtonTyped.ClickType.FORCED); }
void add_filter() { //load the icon if(!PartCategorizer.Instance.iconDictionary.ContainsKey(ICON)) { var _icon = GameDatabase.Instance.GetTexture("Hangar/Icons/"+ICON, false); var _icon_s = GameDatabase.Instance.GetTexture("Hangar/Icons/"+ICON+"_selected", false); var pc_icon = new PartCategorizer.Icon(ICON, _icon, _icon_s, true); PartCategorizer.Instance.icons.Add(pc_icon); PartCategorizer.Instance.iconDictionary.Add(ICON, pc_icon); } var icon = PartCategorizer.Instance.GetIcon(ICON); //add custom function filter var filter = PartCategorizer.Instance.filters .Find(f => f.button.categoryName == "Filter by Function"); PartCategorizer.AddCustomSubcategoryFilter(filter, CATEGORY, icon, p => p.moduleInfos.Any(m => is_hangar(m.moduleName))); //set icon(s) for all the modules PartCategorizer.Instance.filters .Find(f => f.button.categoryName == "Filter by Module") .subcategories.FindAll(s => is_hangar(s.button.categoryName)) .ForEach(c => c.button.SetIcon(icon)); //Apparently needed to make sure the icon actually shows at first var button = filter.button.activeButton; button.SetFalse(button, RUIToggleButtonTyped.ClickType.FORCED); button.SetTrue(button, RUIToggleButtonTyped.ClickType.FORCED); }
public void initialise() { if (categoryName == null) { return; } PartCategorizer.Icon icon = Core.getIcon(iconName); if (icon == null) { icon = PartCategorizer.Instance.fallbackIcon; } PartCategorizer.AddCustomFilter(categoryName, icon, colour); PartCategorizer.Category category = PartCategorizer.Instance.filters.Find(c => c.button.categoryName == categoryName); category.displayType = EditorPartList.State.PartsList; category.exclusionFilter = PartCategorizer.Instance.filterGenericNothing; }
private void IRCustomFilter() { const string ICON_FILE = "R&D_node_icon_robotics"; const string FILTER_CATEGORY = "Filter by Function"; const string CUSTOM_CATEGORY_NAME = "Robotic Parts"; PartCategorizer.Icon icon = PartCategorizer.Instance.GetIcon(ICON_FILE); //Adding our own subcategory to main filter PartCategorizer.Category filter = PartCategorizer.Instance.filters.Find(f => f.button.categoryName == FILTER_CATEGORY); PartCategorizer.AddCustomSubcategoryFilter(filter, CUSTOM_CATEGORY_NAME, icon, p => availableParts.Contains(p)); RUIToggleButtonTyped button = filter.button.activeButton; button.SetFalse(button, RUIToggleButtonTyped.ClickType.FORCED); button.SetTrue(button, RUIToggleButtonTyped.ClickType.FORCED); }
private void Edit_Delete(string title, bool delete, PartCategorizer.Icon icon) { PartCategorizer.Category category = PartCategorizer.Instance.filters.Find(f => f.button.categoryName == this.category); List <PartCategorizer.Category> subCategories = category.subcategories; if (delete) { subCategories.Remove(subCategories.Find(m => m.button.categoryName == title)); } else { PartCategorizerButton but = subCategories.FirstOrDefault(sC => sC.button.categoryName == title).button; if (but != null) { but.categoryName = subCategoryTitle; if (icon != PartCategorizer.Instance.fallbackIcon) { but.SetIcon(icon); } } } }
private void AddFilter() { /* * Texture2D normal = new Texture2D(1, 1), selected = new Texture2D(1, 1); * normal.LoadImage(File.ReadAllBytes(Path.Combine(RCUtils.pluginDataURL, "filterIcon.png"))); * selected.LoadImage(File.ReadAllBytes(Path.Combine(RCUtils.pluginDataURL, "filterIcon_selected.png"))); * PartCategorizer.Icon icon = new PartCategorizer.Icon("RealChute", normal, selected); */ //Will replace with custom icons once sumghai does them PartCategorizer.Icon icon = PartCategorizer.Instance.GetIcon("R&D_node_icon_survivability"); PartCategorizer.Category filterByFunction = PartCategorizer.Instance.filters.Find(f => f.button.categoryName == "Filter by Function"); PartCategorizer.AddCustomSubcategoryFilter(filterByFunction, "Parachutes", icon, p => p.moduleInfos.Any(m => m.moduleName == "RealChute")); PartCategorizer.Instance.filters.Find(f => f.button.categoryName == "Filter by Module") .subcategories.Find(s => s.button.categoryName == "RealChute").button.SetIcon(icon); //Apparently needed to make sure the icon actually shows at first RUIToggleButtonTyped button = filterByFunction.button.activeButton; button.SetFalse(button, RUIToggleButtonTyped.ClickType.FORCED); button.SetTrue(button, RUIToggleButtonTyped.ClickType.FORCED); }
private static void loadIcons() { List <GameDatabase.TextureInfo> texList = GameDatabase.Instance.databaseTexture.Where(t => t.texture != null && t.texture.height <= 40 && t.texture.width <= 40 && t.texture.width >= 25 && t.texture.height >= 25 ).ToList(); Dictionary <string, GameDatabase.TextureInfo> texDict = new Dictionary <string, GameDatabase.TextureInfo>(); // using a dictionary for looking up _selected textures. Else the list has to be iterated over for every texture foreach (GameDatabase.TextureInfo t in texList) { if (!texDict.ContainsKey(t.name)) { texDict.Add(t.name, t); } else { int i = 1; while (texDict.ContainsKey(t.name + i.ToString()) && i < 1000) { i++; } if (i != 1000) { texDict.Add(t.name + i.ToString(), t); Log(t.name + i.ToString()); } } } foreach (GameDatabase.TextureInfo t in texList) { Texture2D selectedTex = null; if (texDict.ContainsKey(t.name + "_selected")) { selectedTex = texDict[t.name + "_selected"].texture; } else { selectedTex = t.texture; } string name = t.name.Split(new char[] { '/', '\\' }).Last(); if (iconDict.ContainsKey(name)) { int i = 1; while (iconDict.ContainsKey(name + i.ToString()) && i < 1000) { i++; } if (i != 1000) { name = name + i.ToString(); } Log("Duplicated texture name by texture " + t.name + ". New reference is: " + name); } PartCategorizer.Icon icon = new PartCategorizer.Icon(name, t.texture, selectedTex, false); // shouldn't be neccesary to check, but just in case... if (!iconDict.ContainsKey(icon.name)) { iconDict.Add(icon.name, icon); } } }