InjectionSettingsWindow.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using UnityEditor;
  2. using UnityEngine;
  3. using System;
  4. using UnityEngine.UIElements;
  5. using UnityEditor.UIElements;
  6. using System.IO;
  7. namespace com.bbbirder.injection.editor
  8. {
  9. public class InjectionSettingsWindow : EditorWindow
  10. {
  11. const string rootUiAssetGUID = "64949e9c31ce0a04b8aa1a3d01d72ab1";
  12. const string ElementUiAssetGUID = "e0689cb498ad5f8459d2bee8fd022488";
  13. [MenuItem("Tools/bbbirder/Unity Injection")]
  14. public static void ShowWindow()
  15. {
  16. var window = GetWindow<InjectionSettingsWindow>();
  17. window.titleContent = new GUIContent("Unity Injection");
  18. window.Show();
  19. }
  20. // public override void SaveChanges()
  21. // {
  22. // base.SaveChanges();
  23. // DebugHelper.Log("save");
  24. // }
  25. void CreateGUI()
  26. {
  27. var settings = InjectionSettings.instance;
  28. settings.hideFlags &= ~HideFlags.NotEditable;
  29. var uiAsset = GetVisualTreeAssetByGUID(rootUiAssetGUID);
  30. var uiEleAsset = GetVisualTreeAssetByGUID(ElementUiAssetGUID);
  31. uiAsset.CloneTree(rootVisualElement);
  32. var lstSource = rootVisualElement.Q<ListView>("lstSource");
  33. var lstError = rootVisualElement.Q<ListView>("lstError");
  34. lstSource.makeItem = uiEleAsset.CloneTree;
  35. lstSource.bindItem = (v, i) =>
  36. {
  37. var data = settings.injectionSources[i];
  38. v.Q<Label>().text = Path.GetFileName(data.path);
  39. };
  40. lstError.makeItem = () => new Label();
  41. var btnInject = rootVisualElement.Q<Button>("btnInject");
  42. btnInject.clicked += () =>
  43. {
  44. UnityInjectUtils.InjectEditor(AppDomain.CurrentDomain.GetAssemblies());
  45. };
  46. var btnInstall = rootVisualElement.Q<Button>("btnInstall");
  47. btnInstall.clicked += () =>
  48. {
  49. FixHelper.InstallAll();
  50. };
  51. var serializedObject = new SerializedObject(settings);
  52. rootVisualElement.Bind(serializedObject);
  53. rootVisualElement.TrackSerializedObjectValue(serializedObject, so =>
  54. {
  55. settings.Save();
  56. });
  57. }
  58. VisualTreeAsset GetVisualTreeAssetByGUID(string guid) =>
  59. AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(AssetDatabase.GUIDToAssetPath(guid));
  60. }
  61. }