static void Prefix(PartDesc.ShopCategory type, ref List <PartInstance> ___currentItems) { SortBy sort = SortOptions.Instance.forCategory(type); switch (sort) { case SortBy.Default: // keep order as it is break; case SortBy.NewestFirst: ___currentItems.Reverse(); break; case SortBy.PriceAscending: ___currentItems.Sort( delegate(PartInstance a, PartInstance b) { return(a.GetPart().m_price <b.GetPart().m_price ? -1 : a.GetPart().m_price> b.GetPart().m_price ? 1 : 0); } ); break; case SortBy.PriceDescending: ___currentItems.Sort( delegate(PartInstance a, PartInstance b) { return(a.GetPart().m_price <b.GetPart().m_price ? 1 : a.GetPart().m_price> b.GetPart().m_price ? -1 : 0); } ); break; case SortBy.NameAscending: ___currentItems.Sort( delegate(PartInstance a, PartInstance b) { return(a.GetPart().m_uiShopName.CompareTo(b.GetPart().m_uiShopName)); } ); break; case SortBy.NameDescending: ___currentItems.Sort( delegate(PartInstance a, PartInstance b) { return(a.GetPart().m_uiShopName.CompareTo(b.GetPart().m_uiShopName) * -1); } ); break; default: break; } }
public SortBy forCategory(PartDesc.ShopCategory category) { if (currentSort.ContainsKey(category)) { return(currentSort.GetValueSafe(category)); } else { return(SortBy.Default); } }
public void setSortFor(PartDesc.ShopCategory category, SortBy sortBy) { if (!currentSort.ContainsKey(category)) { currentSort.Add(category, sortBy); } else { currentSort[category] = sortBy; } ConfigUtil.SaveContentToJson(currentSort, ModloaderMod.Instance.Modpath + "/sortOptions.json"); }
static void Prefix(Inventory __instance) { if (File.Exists(ModloaderMod.Instance.Modpath + "/ui.assetbundle")) { try { if (dropdownPrefab == null) { AssetBundle uiBundle = AssetBundle.LoadFromFile(ModloaderMod.Instance.Modpath + "/ui.assetbundle"); dropdownPrefab = uiBundle.LoadAsset <GameObject>("Dropdown"); GameObject goDropdown = UnityEngine.Object.Instantiate(dropdownPrefab, __instance.transform, false); goDropdown.transform.localPosition = new Vector3(goDropdown.transform.localPosition.x + 290, goDropdown.transform.localPosition.y + 210); sortDropdown = goDropdown.GetComponent <Dropdown>(); sortDropdown.onValueChanged = new Dropdown.DropdownEvent(); sortDropdown.onValueChanged.AddListener(delegate(int choice) { PartDesc.ShopCategory currentCategory = ReflectionUtils.Get <PartDesc.ShopCategory>("m_currentCategory", __instance); switch (choice) { case 0: SortOptions.Instance.setSortFor(currentCategory, SortBy.Default); break; case 1: SortOptions.Instance.setSortFor(currentCategory, SortBy.NewestFirst); break; case 2: SortOptions.Instance.setSortFor(currentCategory, SortBy.PriceAscending); break; case 3: SortOptions.Instance.setSortFor(currentCategory, SortBy.PriceDescending); break; case 4: SortOptions.Instance.setSortFor(currentCategory, SortBy.NameAscending); break; case 5: SortOptions.Instance.setSortFor(currentCategory, SortBy.NameDescending); break; default: SortOptions.Instance.setSortFor(currentCategory, SortBy.Default); break; } __instance.ConstructInventory(); } ); } PartDesc.ShopCategory category = ReflectionUtils.Get <PartDesc.ShopCategory>("m_currentCategory", __instance); sortDropdown.value = (int)SortOptions.Instance.forCategory(category); } catch (Exception e) { PCBSModloader.ModLogs.Log(e.Message); throw; } } }