Custom editors

The built-in editors can be extended or even overwritten to fit your need. This can be especially useful when creating addons.

Extending existing editor page

// Make sure the priority is higher than the built-in item editor priority (default priority is 50).
[EditorPage("Items/Item", order: 10, priority: 100)]
public class ItemEditor : InventoryEditorCrudBase<UnityItemDefinition>
{
    public UnityEditor.Editor itemEditorInspector { get; set; }
    private UnityItemDefinitionDatabase[] _databases;

    public ItemEditor(EditorWindow window)
        : base("Item", "Items", "Items", window)
    { }

    protected override bool MatchesSearch(UnityItemDefinition item, string searchQuery)
    {
        searchQuery = searchQuery ?? "";

        string search = searchQuery.ToLower();
        return (GetDisplayName(item).ToLower().Contains(search) ||
            item.description.ToLower().Contains(search) ||
            item.ID.ToString().Contains(search) ||
            GetTypeDisplayName(item).ToLower().Contains(search));
    }

    public override void EditItem(UnityItemDefinition item)
    {
        base.EditItem(item);
        if (item != null)
        {
            itemEditorInspector = UnityEditor.Editor.CreateEditor(item);
        }
    }

    protected override UnityItemDefinition CreateNewInstanceFromType(Type type)
    {
        var asset = (UnityItemDefinition)ScriptableObject.CreateInstance(type);
        asset.ResetID(System.Guid.NewGuid());

        return asset;
    }

    protected override IEnumerable<IDatabase<UnityItemDefinition>> GetProjectDatabases()
    {
        if (_databases == null)
        {
            _databases = Resources.FindObjectsOfTypeAll<UnityItemDefinitionDatabase>();
        }

        return _databases;
    }

    protected override void DrawDetailInternal(UnityItemDefinition item)
    {
        itemEditorInspector.OnInspectorGUI();
    }
}

Adding an editor page

Pages can be created by adding a single [EditorPage("Items/TabName")] attribute to your class.

Note

Your class has to inherit from EditorCrudBase<T> or anything that inherits from it like InventoryEditorCrudBase<T>.

Overwriting an editor page

In case you want to completely replace an existing editor page you can add a higher priority to your [EditorPage("Items/TabName", order: 20, priority: 100)] attribute.

Danger

This will completely overwrite any existing tabs.