Skip to content

Commit 2005ea4

Browse files
committed
Add logic connecting AssetEditors to ExportSettings
Also refactor BaseAssetEditor.GetAssetPaths usage to be more generic
1 parent c86ceb8 commit 2005ea4

File tree

8 files changed

+96
-49
lines changed

8 files changed

+96
-49
lines changed

Disunity/Disunity.Editor/Disunity.Editor.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
<Compile Include="Editors\BaseSelectionEditor.cs" />
6868
<Compile Include="AsyncEditorTask.cs" />
6969
<Compile Include="Editors\BaseAssetEditor.cs" />
70+
<Compile Include="Editors\BaseSettingsAssetEditor.cs" />
7071
<Compile Include="Fields\BasePickerField.cs" />
7172
<Compile Include="Fields\ClassPickerField.cs" />
7273
<Compile Include="Pickers\BasePicker.cs" />

Disunity/Disunity.Editor/Editors/ArtifactEditor.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1-
using UnityEditor;
2-
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using UnityEditor;
4+
using UnityEngine;
35

46
namespace Disunity.Editor.Editors {
57

6-
internal class ArtifactEditor : BaseAssetEditor {
8+
internal class ArtifactEditor : BaseSettingsAssetEditor<Object> {
9+
10+
protected override IEnumerable<Object> Setting {
11+
get => _settings.Artifacts;
12+
set => _settings.Artifacts = value.ToArray();
13+
}
714

8-
public ArtifactEditor(EditorWindow window, ExportSettings settings) : base(window) { }
15+
public ArtifactEditor(EditorWindow window, ExportSettings settings) : base(window, settings) { }
916

1017
public override string Label() {
1118
return "Artifacts";
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using Disunity.Editor.Pickers;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using UnityEditor;
5+
using UnityEngine;
6+
7+
namespace Disunity.Editor.Editors {
8+
internal abstract class BaseSettingsAssetEditor<T> : BaseAssetEditor where T : Object {
9+
10+
protected readonly ExportSettings _settings;
11+
12+
protected abstract IEnumerable<T> Setting { get; set; }
13+
14+
public BaseSettingsAssetEditor(EditorWindow window, ExportSettings settings) : base(window) {
15+
_settings = settings;
16+
}
17+
18+
protected override void HandleAddition(AssetEntry addition) {
19+
base.HandleAddition(addition);
20+
if (Setting.All(asmDef => AssetDatabase.GetAssetPath(asmDef) != addition.Value)) {
21+
Setting =
22+
Enumerable.Concat(
23+
Setting,
24+
Enumerable.Repeat(AssetDatabase.LoadAssetAtPath<T>(addition.Value), 1))
25+
.ToArray();
26+
}
27+
}
28+
29+
protected override void HandleSubtraction(AssetEntry subtraction) {
30+
base.HandleSubtraction(subtraction);
31+
Setting = Setting
32+
.Where(asmDef => AssetDatabase.GetAssetPath(asmDef) != subtraction.Value)
33+
.ToArray();
34+
}
35+
public override string[] GetAssetPaths() {
36+
return AssetDatabase
37+
.FindAssets($"t:{typeof(T).Name}")
38+
.Select(AssetDatabase.GUIDToAssetPath)
39+
.ToArray();
40+
}
41+
}
42+
}

Disunity/Disunity.Editor/Editors/PrefabEditor.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
using System.Linq;
1+
using System.Collections.Generic;
2+
using System.Linq;
23
using UnityEditor;
3-
4+
using UnityEngine;
45

56
namespace Disunity.Editor.Editors {
67

7-
internal class PrefabEditor : BaseAssetEditor {
8+
internal class PrefabEditor : BaseSettingsAssetEditor<GameObject> {
9+
10+
protected override IEnumerable<GameObject> Setting {
11+
get => _settings.Prefabs;
12+
set => _settings.Prefabs = value.ToArray();
13+
}
814

9-
public PrefabEditor(EditorWindow window) : base(window) { }
15+
public PrefabEditor(EditorWindow window, ExportSettings settings) : base(window, settings) { }
1016

1117
public override string Label() {
1218
return "Prefabs";
@@ -31,12 +37,5 @@ ScriptableObjects are non-Scene-objects which can contain data. This is useful
3137
but due to a limitation in how Unity serializes information, only basic types
3238
like strings, ints, floats, and basic arrays will work.";
3339
}
34-
35-
public override string[] GetAssetPaths() {
36-
return AssetDatabase
37-
.FindAssets("t:GameObject t:ScriptableObject")
38-
.Select(AssetDatabase.GUIDToAssetPath)
39-
.ToArray();
40-
}
4140
}
4241
}

Disunity/Disunity.Editor/Editors/PreloadAssemblyEditor.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1-
using System.Linq;
1+
using System.Collections.Generic;
2+
using System.Linq;
23
using UnityEditor;
3-
4+
using UnityEditorInternal;
5+
using UnityEngine;
46

57
namespace Disunity.Editor.Editors {
68

7-
internal class PreloadAssemblyEditor : BaseAssetEditor {
9+
internal class PreloadAssemblyEditor : BaseSettingsAssetEditor<AssemblyDefinitionAsset> {
10+
11+
protected override IEnumerable<AssemblyDefinitionAsset> Setting {
12+
get => _settings.PreloadAssemblies;
13+
set => _settings.PreloadAssemblies = value.ToArray();
14+
}
815

9-
public PreloadAssemblyEditor(EditorWindow window, ExportSettings settings) : base(window) { }
16+
public PreloadAssemblyEditor(EditorWindow window, ExportSettings settings) : base(window, settings) { }
1017

1118
public override string Label() {
1219
return "Preload";
@@ -32,12 +39,5 @@ Preload assemblies are defined by a Unity Assembly Definition
3239
<b>Assets -> Create -> Assembly Definition</b> menu.
3340
";
3441
}
35-
36-
public override string[] GetAssetPaths() {
37-
return AssetDatabase
38-
.FindAssets("t:AssemblyDefinitionAsset")
39-
.Select(AssetDatabase.GUIDToAssetPath)
40-
.ToArray();
41-
}
4242
}
4343
}

Disunity/Disunity.Editor/Editors/RuntimeAssemblyEditor.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1-
using System.Linq;
1+
using System.Collections.Generic;
2+
using System.Linq;
23
using UnityEditor;
3-
4+
using UnityEditorInternal;
5+
using UnityEngine;
46

57
namespace Disunity.Editor.Editors {
68

7-
internal class RuntimeAssemblyEditor : BaseAssetEditor {
9+
internal class RuntimeAssemblyEditor : BaseSettingsAssetEditor<AssemblyDefinitionAsset> {
10+
11+
protected override IEnumerable<AssemblyDefinitionAsset> Setting {
12+
get => _settings.RuntimeAssemblies;
13+
set => _settings.RuntimeAssemblies = value.ToArray();
14+
}
815

9-
public RuntimeAssemblyEditor(EditorWindow window, ExportSettings settings) : base(window) { }
16+
public RuntimeAssemblyEditor(EditorWindow window, ExportSettings settings) : base(window, settings) { }
1017

1118
public override string Label() {
1219
return "Scripts";
@@ -32,13 +39,5 @@ Runtime assemblies are defined by a Unity Assembly Definition
3239
Asset. These can be created using the
3340
<b>Assets -> Create -> Assembly Definition</b> menu.";
3441
}
35-
36-
public override string[] GetAssetPaths() {
37-
return AssetDatabase
38-
.FindAssets("t:AssemblyDefinitionAsset")
39-
.Select(AssetDatabase.GUIDToAssetPath)
40-
.ToArray();
41-
}
42-
4342
}
4443
}
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
using System.Linq;
1+
using System.Collections.Generic;
2+
using System.Linq;
23
using UnityEditor;
34

4-
55
namespace Disunity.Editor.Editors {
66

7-
internal class SceneEditor : BaseAssetEditor {
7+
internal class SceneEditor : BaseSettingsAssetEditor<SceneAsset> {
8+
9+
protected override IEnumerable<SceneAsset> Setting {
10+
get => _settings.Scenes;
11+
set => _settings.Scenes = value.ToArray();
12+
}
813

9-
public SceneEditor(EditorWindow window, ExportSettings settings) : base(window) { }
14+
public SceneEditor(EditorWindow window, ExportSettings settings) : base(window, settings) { }
1015

1116
public override string Label() {
1217
return "Scenes";
@@ -19,11 +24,5 @@ public override string Title() {
1924
public override string Help() {
2025
return "Scenes can be exported to your mod here.";
2126
}
22-
public override string[] GetAssetPaths() {
23-
return AssetDatabase
24-
.FindAssets("t:Scene")
25-
.Select(AssetDatabase.GUIDToAssetPath)
26-
.ToArray();
27-
}
2827
}
2928
}

Disunity/Disunity.Editor/ExporterEditorWindow.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private void OnEnable() {
3737
_runtimeAssemblyEditor = new RuntimeAssemblyEditor(this, _exportSettings.Instance);
3838
_preloadAssemblyEditor = new PreloadAssemblyEditor(this, _exportSettings.Instance);
3939
_artifactEditor = new ArtifactEditor(this, _exportSettings.Instance);
40-
_prefabEditor = new PrefabEditor(this);
40+
_prefabEditor = new PrefabEditor(this, _exportSettings.Instance);
4141
_sceneEditor = new SceneEditor(this, _exportSettings.Instance);
4242
_exportEditor = new ExportEditor(this, _exportSettings.Instance);
4343
_dependencyEditor = new DependencyEditor(this);

0 commit comments

Comments
 (0)