public void UpdateBankComplete()
    {
        TBank bank = AssetDatabaseX.LoadOrCreateAsset(_bankAssetPath, () => ScriptableObject.CreateInstance <TBank>());

        var storedObjects = _getStoredObjectsFromBankDelegate(bank);

        storedObjects.Clear();

        LoadAll(out List <(string, TAsset)> loadResult);

        foreach ((string guid, TAsset asset) in loadResult)
        {
            if (_evaluateAssetDelegate(asset, out TStoredObject storedObject))
            {
                storedObjects.Add(storedObject);
            }
        }

        DebugEditor.LogAssetIntegrity($"{bank.name} bank updated.");
        EditorUtility.SetDirty(bank);
        AssetDatabase.SaveAssets();
    }
    void SetBlendMode(BlendMode blendMode)
    {
        Shader shader;
        string assetPath;

        switch (blendMode)
        {
        default:
        case BlendMode.Add:
            shader    = _shaderAdd;
            assetPath = ASSET_PATH_ADD;
            break;
        }

        Material material = AssetDatabaseX.LoadOrCreateAsset(assetPath, () =>
        {
            var newMat = new Material(shader);
            newMat.enableInstancing = true;
            return(newMat);
        });

        ((SpriteLight)target).GetComponent <SpriteRenderer>().sharedMaterial = material;
    }
    private void UpdateBank(List <TStoredObject> changedPrefabs)
    {
        TBank bank = AssetDatabaseX.LoadOrCreateAsset(_bankAssetPath, () => ScriptableObject.CreateInstance <TBank>());

        var storedObjects = _getStoredObjectsFromBankDelegate(bank);

        bool change = false;

        foreach (var item in changedPrefabs)
        {
            if (!storedObjects.Contains(item))
            {
                storedObjects.Add(item);
                change = true;
            }
        }

        if (change)
        {
            DebugEditor.LogAssetIntegrity($"{bank.name} updated.");
            EditorUtility.SetDirty(bank);
            AssetDatabase.SaveAssets();
        }
    }