Skip to content

Commit 7e53e21

Browse files
authored
Saves choice between system impl choices (#43)
1 parent 66c9859 commit 7e53e21

File tree

10 files changed

+154
-93
lines changed

10 files changed

+154
-93
lines changed

EcsactCsharpSystemImpl/Runtime/DefaultCsharpSystemImplsLoader.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,17 @@ public static List<string> ValidateImplMethodInfo
4242
}
4343
#endif // UNITY_EDITOR
4444

45+
public static bool Enabled() {
46+
var systemImplSource = EcsactRuntimeSettings.Get().systemImplSource;
47+
return systemImplSource == Ecsact.SystemImplSource.Csharp;
48+
}
49+
4550
[RuntimeInitializeOnLoadMethod]
4651
internal static void Load() {
52+
if(!Enabled()) {
53+
return;
54+
}
55+
4756
var runtimeSettings = EcsactRuntimeSettings.Get();
4857
var runtime = EcsactRuntime.GetOrLoadDefault();
4958
var implsAssembly = Assembly.Load(

EcsactWasm/Editor/EcsactWasmRuntimeSettingsEditor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,9 @@ public static void FindSystemImpls
9898
private Dictionary<Int32, WasmInfo?> wasmInfos = new();
9999
private bool allWasmInfoLoaded = false;
100100

101-
SerializedProperty? useDefaultLoader;
102101
SerializedProperty? autoFindSystemImpls;
103102

104103
void OnEnable() {
105-
useDefaultLoader = serializedObject.FindProperty("useDefaultLoader");
106104
autoFindSystemImpls =
107105
serializedObject.FindProperty("autoFindSystemImpls");
108106
}
@@ -127,7 +125,6 @@ public override void OnInspectorGUI() {
127125
systemLikeTypes = Ecsact.Util.GetAllSystemLikeTypes().ToList();
128126
}
129127

130-
EditorGUILayout.PropertyField(useDefaultLoader);
131128
EditorGUI.BeginChangeCheck();
132129
EditorGUILayout.PropertyField(autoFindSystemImpls);
133130
if(EditorGUI.EndChangeCheck()) {

EcsactWasm/Runtime/EcsactWasmRuntimeLoader.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,22 @@
55

66
namespace Ecsact {
77
public static class EcsactWasmRuntimeLoader {
8+
public static bool Enabled() {
9+
var settings = EcsactRuntimeSettings.Get();
10+
if(settings.systemImplSource != Ecsact.SystemImplSource.WebAssembly) {
11+
return false;
12+
}
13+
14+
return true;
15+
}
16+
817
[RuntimeInitializeOnLoadMethod]
918
public static void OnLoad() {
10-
var settings = EcsactWasmRuntimeSettings.Get();
11-
if(!settings.useDefaultLoader) {
19+
if(!Enabled()) {
1220
return;
1321
}
1422

23+
var settings = EcsactWasmRuntimeSettings.Get();
1524
var defaultRuntime = EcsactRuntime.GetOrLoadDefault();
1625

1726
foreach(var entry in settings.wasmSystemEntries) {

EcsactWasm/Runtime/EcsactWasmRuntimeSettings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public class SystemMapEntry {
2424
public const string resourcePath = "Settings/EcsactWasmRuntimeSettings";
2525
public const string assetPath = "Assets/Resources/" + resourcePath + ".asset";
2626

27-
public bool useDefaultLoader = true;
2827
public bool autoFindSystemImpls = true;
2928
public List<SystemMapEntry> wasmSystemEntries = new();
3029

Editor/EcsactSettings.cs

Lines changed: 111 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
[System.Serializable]
1212
class EcsactSettings : ScriptableObject {
1313
public const string assetPath = "Assets/Editor/EcsactSettings.asset";
14-
public const string path = "Project/EcsactProjectSettings";
14+
public const string path = "Project/Ecsact";
1515
public const SettingsScope scope = SettingsScope.Project;
1616

1717
public string runtimeBuilderOutputPath = "Assets/Plugins/EcsactRuntime";
@@ -70,7 +70,29 @@ class EcsactMethodUIBindings : ScriptableObject {
7070
public bool methodLoaded = false;
7171
}
7272

73-
static class EcsactSettingsUIElementsRegister {
73+
class EcsactSettingsSettingsProvider : SettingsProvider {
74+
Editor? runtimeSettingsEditor = null;
75+
Editor? wasmRuntimeSettingsEditor = null;
76+
Editor? csharpSystemImplSettingsEditor = null;
77+
IMGUIContainer? runtimeSettingsContainer = null;
78+
IMGUIContainer? csharpSystemImplSettingsContainer = null;
79+
DropdownField? sysImplSrcDropdown = null;
80+
81+
public EcsactSettingsSettingsProvider()
82+
: base(
83+
path: EcsactSettings.path,
84+
scopes: EcsactSettings.scope,
85+
keywords: new HashSet<string>(new[] {
86+
"Ecsact",
87+
"ECS",
88+
"ECS Plugin",
89+
"Plugin",
90+
"Runtime",
91+
"Library",
92+
})
93+
)
94+
{
95+
}
7496

7597
internal static void SetupMethodsUI
7698
( TemplateContainer ui
@@ -166,93 +188,96 @@ private static void DrawMethodsUI
166188
}
167189
}
168190

169-
[SettingsProvider]
170-
public static SettingsProvider CreateEcsactSettingsProvider() {
171-
Editor? runtimeSettingsEditor = null;
172-
Editor? wasmRuntimeSettingsEditor = null;
173-
Editor? csharpSystemImplSettingsEditor = null;
174-
IMGUIContainer? runtimeSettingsContainer = null;
175-
IMGUIContainer? csharpSystemImplSettingsContainer = null;
176-
177-
return new SettingsProvider(EcsactSettings.path, EcsactSettings.scope) {
178-
label = "Ecsact",
179-
inspectorUpdateHandler = () => {
180-
if(runtimeSettingsEditor != null) {
181-
if(runtimeSettingsEditor.RequiresConstantRepaint()) {
182-
if(runtimeSettingsContainer != null) {
183-
runtimeSettingsContainer.MarkDirtyRepaint();
184-
}
185-
}
186-
}
191+
Ecsact.SystemImplSource SysImplSrcDropdownValue() {
192+
return (Ecsact.SystemImplSource)sysImplSrcDropdown!.index;
193+
}
187194

188-
if(csharpSystemImplSettingsEditor != null) {
189-
if(csharpSystemImplSettingsEditor.RequiresConstantRepaint()) {
190-
if(csharpSystemImplSettingsContainer != null) {
191-
csharpSystemImplSettingsContainer.MarkDirtyRepaint();
192-
}
193-
}
195+
public override void OnInspectorUpdate() {
196+
if(runtimeSettingsEditor != null) {
197+
if(runtimeSettingsEditor.RequiresConstantRepaint()) {
198+
if(runtimeSettingsContainer != null) {
199+
runtimeSettingsContainer.MarkDirtyRepaint();
194200
}
195-
},
196-
activateHandler = (searchContext, rootElement) => {
197-
var settings = EcsactSettings.GetSerializedSettings();
198-
var template = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
199-
"Packages/dev.ecsact.unity/Editor/EcsactSettings.uxml"
200-
);
201-
var ui = template.Instantiate();
202-
BindingExtensions.Bind(ui, settings);
203-
rootElement.Add(ui);
204-
205-
var runtimeSettings = EcsactRuntimeSettings.Get();
206-
DrawMethodsUI(ui, runtimeSettings);
207-
208-
runtimeSettingsContainer =
209-
ui.Q<IMGUIContainer>("runtime-settings-container");
210-
211-
runtimeSettingsEditor = Editor.CreateEditor(runtimeSettings);
212-
213-
runtimeSettingsContainer.onGUIHandler = () => {
214-
runtimeSettingsEditor.OnInspectorGUI();
215-
};
216-
217-
var systemImplsSourceDropdown =
218-
ui.Q<DropdownField>("system-impls-source-dropdown");
219-
220-
var wasmRuntimeSettingsContainer =
221-
ui.Q<IMGUIContainer>("wasm-runtime-settings-container");
222-
wasmRuntimeSettingsEditor =
223-
EcsactWasmEditorInternalUtil.GetEcsactWasmRuntimeSettingsEditor();
224-
wasmRuntimeSettingsContainer.onGUIHandler = () => {
225-
if(systemImplsSourceDropdown.index == 1) {
226-
wasmRuntimeSettingsEditor.OnInspectorGUI();
227-
}
228-
};
229-
230-
var csharpSystemImplSettings =
231-
Ecsact.Editor.CsharpSystemImplSettings.Get();
232-
csharpSystemImplSettingsContainer =
233-
ui.Q<IMGUIContainer>("csharp-system-impl-settings-container");
234-
csharpSystemImplSettingsEditor =
235-
Editor.CreateEditor(csharpSystemImplSettings);
236-
csharpSystemImplSettingsContainer.onGUIHandler = () => {
237-
if(systemImplsSourceDropdown.index == 0) {
238-
csharpSystemImplSettingsEditor.OnInspectorGUI();
239-
}
240-
};
241-
},
242-
deactivateHandler = () => {
243-
if(runtimeSettingsEditor != null) {
244-
Editor.DestroyImmediate(runtimeSettingsEditor);
245-
runtimeSettingsEditor = null;
201+
}
202+
}
203+
204+
if(csharpSystemImplSettingsEditor != null) {
205+
if(csharpSystemImplSettingsEditor.RequiresConstantRepaint()) {
206+
if(csharpSystemImplSettingsContainer != null) {
207+
csharpSystemImplSettingsContainer.MarkDirtyRepaint();
246208
}
247-
},
248-
keywords = new HashSet<string>(new[] {
249-
"Ecsact",
250-
"ECS",
251-
"ECS Plugin",
252-
"Plugin",
253-
"Runtime",
254-
"Library",
255-
}),
209+
}
210+
}
211+
}
212+
213+
public override void OnActivate
214+
( string searchContext
215+
, VisualElement rootElement
216+
)
217+
{
218+
var settings = EcsactSettings.GetSerializedSettings();
219+
var template = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
220+
"Packages/dev.ecsact.unity/Editor/EcsactSettings.uxml"
221+
);
222+
var ui = template.Instantiate();
223+
BindingExtensions.Bind(ui, settings);
224+
rootElement.Add(ui);
225+
226+
var runtimeSettings = EcsactRuntimeSettings.Get();
227+
DrawMethodsUI(ui, runtimeSettings);
228+
229+
runtimeSettingsContainer =
230+
ui.Q<IMGUIContainer>("runtime-settings-container");
231+
232+
runtimeSettingsEditor = Editor.CreateEditor(runtimeSettings);
233+
234+
runtimeSettingsContainer.onGUIHandler = () => {
235+
runtimeSettingsEditor.OnInspectorGUI();
236+
};
237+
238+
sysImplSrcDropdown =
239+
ui.Q<DropdownField>("system-impls-source-dropdown");
240+
sysImplSrcDropdown.index = (int)runtimeSettings.systemImplSource;
241+
242+
sysImplSrcDropdown.RegisterValueChangedCallback(ev => {
243+
runtimeSettings.systemImplSource = SysImplSrcDropdownValue();
244+
EditorUtility.SetDirty(runtimeSettings);
245+
});
246+
247+
var wasmRuntimeSettingsContainer =
248+
ui.Q<IMGUIContainer>("wasm-runtime-settings-container");
249+
wasmRuntimeSettingsEditor =
250+
EcsactWasmEditorInternalUtil.GetEcsactWasmRuntimeSettingsEditor();
251+
wasmRuntimeSettingsContainer.onGUIHandler = () => {
252+
if(SysImplSrcDropdownValue() == Ecsact.SystemImplSource.WebAssembly) {
253+
wasmRuntimeSettingsEditor.OnInspectorGUI();
254+
}
256255
};
256+
257+
var csharpSystemImplSettings =
258+
Ecsact.Editor.CsharpSystemImplSettings.Get();
259+
csharpSystemImplSettingsContainer =
260+
ui.Q<IMGUIContainer>("csharp-system-impl-settings-container");
261+
csharpSystemImplSettingsEditor =
262+
Editor.CreateEditor(csharpSystemImplSettings);
263+
csharpSystemImplSettingsContainer.onGUIHandler = () => {
264+
if(SysImplSrcDropdownValue() == Ecsact.SystemImplSource.Csharp) {
265+
csharpSystemImplSettingsEditor.OnInspectorGUI();
266+
}
267+
};
268+
}
269+
270+
public override void OnDeactivate() {
271+
if(runtimeSettingsEditor != null) {
272+
Editor.DestroyImmediate(runtimeSettingsEditor);
273+
runtimeSettingsEditor = null;
274+
}
275+
}
276+
}
277+
278+
static class EcsactSettingsUIElementsRegister {
279+
[SettingsProvider]
280+
public static SettingsProvider CreateEcsactSettingsProvider() {
281+
return new EcsactSettingsSettingsProvider();
257282
}
258283
}

Editor/EcsactSettings.uxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
</ui:GroupBox>
3232
<ui:GroupBox>
3333
<ui:Label text="System Implementations" display-tooltip-when-elided="true" style="font-size: 16px; -unity-font-style: bold;" />
34-
<ui:DropdownField label="Source" index="0" choices="C#,Wasm" name="system-impls-source-dropdown" style="margin-left: 0;" />
34+
<ui:DropdownField label="Source" index="0" choices="C#,WebAssembly" name="system-impls-source-dropdown" style="margin-left: 0;" />
3535
<ui:IMGUIContainer name="csharp-system-impl-settings-container" />
3636
<ui:IMGUIContainer name="wasm-runtime-settings-container" />
3737
</ui:GroupBox>

Editor/Importer/EcsactImporter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public override void OnImportAsset(AssetImportContext ctx) {
5959
};
6060

6161
try {
62+
UnityEngine.Debug.Log(codegen.StartInfo.Arguments);
6263
codegen.Start();
6364
codegen.BeginOutputReadLine();
6465
codegen.BeginErrorReadLine();

Runtime/EcsactRuntimeSettings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ public struct CsharpSystemImplInfo {
7272
public string assemblyQualifiedName;
7373
public string implMethodName;
7474
}
75+
76+
[HideInInspector]
77+
public Ecsact.SystemImplSource systemImplSource;
78+
7579
[HideInInspector]
7680
public string defaultCsharpSystemImplsAssemblyName = "";
7781

Runtime/SystemImplSource.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Ecsact {
2+
public enum SystemImplSource {
3+
Csharp,
4+
WebAssembly,
5+
}
6+
}

Runtime/SystemImplSource.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.

0 commit comments

Comments
 (0)