9 namespace Essentials.EditorTweaks
14 public class HierarchyDividers : EditorWindow
17 #region DividerConfiguration
22 private string sectionName =
"";
26 private int selectedCharNumber;
30 private int selectedAlignmentNumber;
34 private int numberOfDividerChars;
38 #region predifined options
43 private string[] availableChars = {
"-",
"*",
"_" };
47 private string[] alignText = {
"Left",
"Center",
"Right" };
56 private string numberOfDividerCharsEditorPrefs = $
"Essentials_{nameof(numberOfDividerChars)}";
60 private string selectedCharNumberEditorPrefs = $
"Essentials_{nameof(selectedCharNumber)}";
64 private string selectedAlignmentNumberEditorPrefs = $
"Essentials_{nameof(selectedAlignmentNumber)}";
73 private bool buttonStateOk;
77 private bool buttonStateCancel;
84 private void OnEnable()
101 [MenuItem(
"GameObject/Create Divider",
false, -20)]
102 private static void OpenWindow()
105 HierarchyDividers window = CreateWindow<HierarchyDividers>();
107 Vector2 windowSize =
new Vector2(420f, 130f);
108 window.minSize = window.maxSize = windowSize;
109 window.position = Utils.GetEditorWindowCenteredPosition(windowSize);
110 window.titleContent =
new GUIContent(
"Divider creator tool");
118 private void DrawWindow()
120 EditorGUILayout.Space();
124 GUILayout.BeginHorizontal();
125 GUILayout.Label(
"Section name: ");
126 sectionName = GUILayout.TextField(sectionName, 50, GUILayout.Width(236));
127 GUILayout.EndHorizontal();
129 EditorGUILayout.Space();
132 GUILayout.BeginHorizontal();
133 GUILayout.Label(
"Divider char: ", GUILayout.Width(130));
134 selectedCharNumber = GUILayout.SelectionGrid(selectedCharNumber, availableChars, availableChars.Length, EditorStyles.miniButton);
135 GUILayout.EndHorizontal();
138 GUILayout.BeginHorizontal();
139 GUILayout.Label(
"Name position: ", GUILayout.Width(130));
140 selectedAlignmentNumber = GUILayout.SelectionGrid(selectedAlignmentNumber, alignText, alignText.Length, EditorStyles.miniButton);
141 GUILayout.EndHorizontal();
144 GUILayout.BeginHorizontal();
145 numberOfDividerChars = EditorGUILayout.IntSlider(
"Number of divider chars: ", numberOfDividerChars, 0, 80);
146 GUILayout.EndHorizontal();
150 EditorGUILayout.Space();
151 EditorGUILayout.Space();
154 GUILayout.BeginHorizontal();
155 GUILayout.FlexibleSpace();
156 buttonStateCancel = GUILayout.Button(
"Cancel", GUILayout.Width(80));
157 buttonStateOk = GUILayout.Button(
"Create", GUILayout.Width(80));
158 GUILayout.EndHorizontal();
165 if (buttonStateCancel)
172 private void AcceptCreation()
182 private void GetPreferences()
184 selectedCharNumber = EditorPrefs.GetInt(selectedCharNumberEditorPrefs, 0);
185 selectedAlignmentNumber = EditorPrefs.GetInt(selectedAlignmentNumberEditorPrefs, 1);
186 numberOfDividerChars = EditorPrefs.GetInt(numberOfDividerCharsEditorPrefs, 26);
192 private void SavePreferences()
194 EditorPrefs.SetInt(numberOfDividerCharsEditorPrefs, numberOfDividerChars);
195 EditorPrefs.SetInt(selectedCharNumberEditorPrefs, selectedCharNumber);
196 EditorPrefs.SetInt(selectedAlignmentNumberEditorPrefs, selectedAlignmentNumber);
202 private void ManageKeyPress()
204 switch (Event.current.keyCode)
218 private void CreateDivider()
220 string selectedChar = availableChars[selectedCharNumber];
222 int charsLeft = 0, charsRight = 0;
223 string dividerGameObjectName =
"";
225 switch (alignText[selectedAlignmentNumber])
229 charsRight = numberOfDividerChars;
232 charsLeft = numberOfDividerChars/2;
233 charsRight = numberOfDividerChars/2;
236 charsLeft = numberOfDividerChars;
241 for (
int i = 0; i < charsLeft; i++)
242 dividerGameObjectName += selectedChar;
243 dividerGameObjectName += $
" {sectionName} ";
244 for (
int i = 0; i < charsRight; i++)
245 dividerGameObjectName += selectedChar;
247 GameObject dividerGameObject =
new GameObject(dividerGameObjectName);
249 dividerGameObject.tag =
"EditorOnly";