Skip to content

Commit 95c3de3

Browse files
committed
Clean up EmbeddedPresetHolder when saving/deleting assets
1 parent 5753c7b commit 95c3de3

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

Editor/AssetModificationProcessor.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using UnityEditor;
2+
3+
namespace Gilzoide.ConditionalObjects.Editor
4+
{
5+
public class AssetModificationProcessor : UnityEditor.AssetModificationProcessor
6+
{
7+
static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAssetOptions options)
8+
{
9+
EmbeddedPresetHolder.Instance.HandleAssetDelete(assetPath);
10+
return AssetDeleteResult.DidNotDelete;
11+
}
12+
13+
static string[] OnWillSaveAssets(string[] paths)
14+
{
15+
EmbeddedPresetHolder.Instance.HandleAssetSave(paths);
16+
return paths;
17+
}
18+
}
19+
}

Editor/AssetModificationProcessor.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/Internal/EmbeddedPresetHolder.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,34 @@ public Preset GetOrCreatePreset(GlobalObjectId objectId, Object target)
107107
}
108108
return embeddedPreset.Preset;
109109
}
110+
111+
public void HandleAssetDelete(string assetPath)
112+
{
113+
DeletePresetsFromAsset(assetPath);
114+
}
115+
116+
public void HandleAssetSave(string[] paths)
117+
{
118+
foreach (string assetPath in paths)
119+
{
120+
DeletePresetsFromAsset(assetPath);
121+
}
122+
}
123+
124+
private void DeletePresetsFromAsset(string assetPath)
125+
{
126+
var guid = new GUID(AssetDatabase.AssetPathToGUID(assetPath));
127+
_embeddedPresets.RemoveAll(p =>
128+
{
129+
bool shouldRemove = p.ObjectId.GlobalObjectId.assetGUID == guid
130+
&& GlobalObjectId.GlobalObjectIdentifierToObjectSlow(p.ObjectId) == null;
131+
if (shouldRemove)
132+
{
133+
DestroyImmediate(p.Preset, true);
134+
}
135+
return shouldRemove;
136+
});
137+
}
110138
}
111139
}
112140
#endif

0 commit comments

Comments
 (0)