BrushCreationSettingsWindow.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. Copyright (c) 2020 Omar Duarte
  3. Unauthorized copying of this file, via any medium is strictly prohibited.
  4. Writen by Omar Duarte, 2020.
  5. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  6. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  7. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  8. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  9. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  10. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  11. THE SOFTWARE.
  12. */
  13. using UnityEngine;
  14. namespace PluginMaster
  15. {
  16. public class BrushCreationSettingsWindow : UnityEditor.EditorWindow
  17. {
  18. [SerializeField] PWBData _data = null;
  19. private bool _defaultBrushSettingsGroupOpen = false;
  20. private bool _defaultThumbnailSettingsGroupOpen = false;
  21. private bool _brushPosGroupOpen = false;
  22. private bool _brushRotGroupOpen = false;
  23. private bool _brushScaleGroupOpen = false;
  24. private bool _brushFlipGroupOpen = false;
  25. private Vector2 _mainScrollPosition = Vector2.zero;
  26. [UnityEditor.MenuItem("Tools/Plugin Master/Prefab World Builder/Brush Creation Settings...", false, 1140)]
  27. public static void ShowWindow() => GetWindow<BrushCreationSettingsWindow>();
  28. private static string UNDO_MSG = "Brush Creation Settings";
  29. private void OnEnable()
  30. {
  31. _data = PWBCore.staticData;
  32. UnityEditor.Undo.undoRedoPerformed += Repaint;
  33. titleContent = new GUIContent(PaletteManager.selectedPalette.name + " - Brush Creation Settings");
  34. }
  35. private void OnDisable() => UnityEditor.Undo.undoRedoPerformed -= Repaint;
  36. private void OnGUI()
  37. {
  38. if (PaletteManager.selectedPalette == null) return;
  39. UnityEditor.EditorGUIUtility.labelWidth = 60;
  40. var settings = PaletteManager.selectedPalette.brushCreationSettings.Clone();
  41. using (var scrollView = new UnityEditor.EditorGUILayout.ScrollViewScope(_mainScrollPosition,
  42. false, false, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUIStyle.none))
  43. {
  44. using (var check = new UnityEditor.EditorGUI.ChangeCheckScope())
  45. {
  46. _mainScrollPosition = scrollView.scrollPosition;
  47. settings.includeSubfolders = UnityEditor.EditorGUILayout.ToggleLeft("Include subfolders",
  48. settings.includeSubfolders);
  49. using (new GUILayout.VerticalScope(UnityEditor.EditorStyles.helpBox))
  50. {
  51. settings.addLabelsToDroppedPrefabs = UnityEditor.EditorGUILayout.ToggleLeft("Add labels to prefabs",
  52. settings.addLabelsToDroppedPrefabs);
  53. using (new UnityEditor.EditorGUI.DisabledGroupScope(!settings.addLabelsToDroppedPrefabs))
  54. {
  55. UnityEditor.EditorGUIUtility.labelWidth = 40;
  56. settings.labelsCSV = UnityEditor.EditorGUILayout.TextField("Labels:", settings.labelsCSV);
  57. }
  58. }
  59. #if UNITY_2019_1_OR_NEWER
  60. _defaultBrushSettingsGroupOpen
  61. = UnityEditor.EditorGUILayout.BeginFoldoutHeaderGroup(_defaultBrushSettingsGroupOpen,
  62. "Default Brush Settings");
  63. #else
  64. _defaultBrushSettingsGroupOpen = EditorGUILayout.Foldout(_defaultBrushSettingsGroupOpen,
  65. "Default Brush Settings");
  66. #endif
  67. if (_defaultBrushSettingsGroupOpen)
  68. {
  69. using (new GUILayout.VerticalScope(UnityEditor.EditorStyles.helpBox))
  70. {
  71. BrushProperties.BrushFields(settings.defaultBrushSettings, ref _brushPosGroupOpen,
  72. ref _brushRotGroupOpen, ref _brushScaleGroupOpen, ref _brushFlipGroupOpen);
  73. GUILayout.Space(10);
  74. if (GUILayout.Button("Reset to factory settings"))
  75. {
  76. settings.FactoryResetDefaultBrushSettings();
  77. GUI.FocusControl(null);
  78. Repaint();
  79. }
  80. }
  81. }
  82. #if UNITY_2019_1_OR_NEWER
  83. UnityEditor.EditorGUILayout.EndFoldoutHeaderGroup();
  84. #endif
  85. _defaultThumbnailSettingsGroupOpen
  86. = UnityEditor.EditorGUILayout.BeginFoldoutHeaderGroup(_defaultThumbnailSettingsGroupOpen,
  87. "Default Thumbnail Settings");
  88. if(_defaultThumbnailSettingsGroupOpen)
  89. {
  90. using (new GUILayout.VerticalScope(UnityEditor.EditorStyles.helpBox))
  91. {
  92. ThumbnailEditorWindow.ThumbnailSettingsGUI(settings.defaultThumbnailSettings);
  93. GUILayout.Space(10);
  94. if (GUILayout.Button("Reset to factory settings"))
  95. {
  96. settings.FactoryResetDefaultThumbnailSettings();
  97. GUI.FocusControl(null);
  98. Repaint();
  99. }
  100. }
  101. }
  102. UnityEditor.EditorGUILayout.EndFoldoutHeaderGroup();
  103. if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
  104. {
  105. GUI.FocusControl(null);
  106. Repaint();
  107. }
  108. if(check.changed)
  109. {
  110. UnityEditor.Undo.RegisterCompleteObjectUndo(this, UNDO_MSG);
  111. PaletteManager.selectedPalette.brushCreationSettings.Copy(settings);
  112. PWBCore.SetSavePending();
  113. }
  114. }
  115. }
  116. }
  117. [UnityEditor.MenuItem("Assets/Clear Labels", false, 2000)]
  118. private static void ClearLabels()
  119. {
  120. var selection = UnityEditor.Selection.GetFiltered<Object>(UnityEditor.SelectionMode.Assets);
  121. foreach (var asset in selection) UnityEditor.AssetDatabase.ClearLabels(asset);
  122. }
  123. }
  124. }