Collection sorting

By default the “BasicCollectionSorter” is used for sorting a collection. Of course this is customizable. At the bottom of the default sorter you’ll find the actual ordering by type name, then by category name and lastly by item name.

I Advice you not to modify this file, an update will overwrite your changes. Check below on how to create your own sorter.

public IList Sort(IList items)
{
    /// ... (removed some code for clarity)

    // Orders by category.ID but can easilly be switched to anything else.
    // Simply change o => o.category.ID to any object variable to sort by.
    // For example: o => o.buyPrice will sort items based on the buying price.
    // Another examlpe: o => o.name will sort items on an alphabetical order.
    // If you want to go wild you can chain OrderBy's this allows you to filter on the first category first (for example category), then rarity. (check uncommented line below)
    return sortedList.OrderBy(o => o.GetType().Name).ThenBy(o => o.category.ID).ThenBy(o => o.name).ToArray(); // Order by and return
    //return sortedList.OrderBy(o => o.category.ID).ThenBy(o => o.rarity.ID).ToArray(); // Order by and return      
}

Creating a new sorting class

Create a new script outside of the Devdog/InventoryPro folder, and copy the content of the BasicCollectionSorter. Modify it to your liking (little example below). Example of optional sorting, sorts by category, then rarity:

[CreateAssetMenu(menuName = InventoryPro.CreateAssetMenuPath + "Basic Collection Sorter")]
public class MyCollectionSorter : CollectionSorterBase
{
    public IList<InventoryItemBase> Sort(IList items)
    {
        // ... (removed some code for clarity)
        return sortedList.OrderBy(o => o.category.ID).ThenBy(o => o.rarity.ID).ToArray(); // Order by and return        
    }
}

Only 1 thing remaining, we need to let the system know which sorter to use. Next, create a new scriptable object asset from your own created type, and assign it in the settings.