|
11 | 11 | [System.Serializable] |
12 | 12 | class EcsactSettings : ScriptableObject { |
13 | 13 | public const string assetPath = "Assets/Editor/EcsactSettings.asset"; |
14 | | - public const string path = "Project/EcsactProjectSettings"; |
| 14 | + public const string path = "Project/Ecsact"; |
15 | 15 | public const SettingsScope scope = SettingsScope.Project; |
16 | 16 |
|
17 | 17 | public string runtimeBuilderOutputPath = "Assets/Plugins/EcsactRuntime"; |
@@ -70,7 +70,29 @@ class EcsactMethodUIBindings : ScriptableObject { |
70 | 70 | public bool methodLoaded = false; |
71 | 71 | } |
72 | 72 |
|
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 | + } |
74 | 96 |
|
75 | 97 | internal static void SetupMethodsUI |
76 | 98 | ( TemplateContainer ui |
@@ -166,93 +188,96 @@ private static void DrawMethodsUI |
166 | 188 | } |
167 | 189 | } |
168 | 190 |
|
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 | + } |
187 | 194 |
|
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(); |
194 | 200 | } |
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(); |
246 | 208 | } |
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 | + } |
256 | 255 | }; |
| 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(); |
257 | 282 | } |
258 | 283 | } |
0 commit comments