Exemplo n.º 1
0
        public static void Selection(string[] selectionArray, ref string[] currentArray, string itemName)
        {
            int stackIndex = 0;

            for (int i = 0; i < currentArray.Length; i++)
            {
                EditorGUILayout.BeginHorizontal();

                GUI.enabled = false;
                if (selectionArray.Contains(currentArray[i]))
                {
                    EditorGUILayout.TextField(currentArray[i]);
                }
                else
                {
                    ErrorText($"<Removed {itemName}>");
                }
                GUI.enabled = true;

                currentArray[stackIndex] = currentArray[i];

                if (!ButtonDrawers.Minus())
                {
                    stackIndex++;
                }
                EditorGUILayout.EndHorizontal();
            }

            if (stackIndex != currentArray.Length)
            {
                System.Array.Resize(ref currentArray, stackIndex);
            }
            SelectionPopup(selectionArray, ref currentArray, itemName);
        }
Exemplo n.º 2
0
        public static void Selection(List <string> selectionList, List <string> currentList, string itemName)
        {
            int indexToRemove = -1;

            for (int i = 0; i < currentList.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();

                GUI.enabled = false;
                if (selectionList.Contains(currentList[i]))
                {
                    EditorGUILayout.TextField(currentList[i]);
                }
                else
                {
                    ErrorText($"<Removed {itemName}>");
                }
                GUI.enabled = true;

                if (ButtonDrawers.Minus())
                {
                    indexToRemove = i;
                }
                EditorGUILayout.EndHorizontal();
            }

            if (indexToRemove > -1)
            {
                currentList.RemoveAt(indexToRemove);
            }

            SelectionPopup(selectionList, currentList, itemName);
        }
Exemplo n.º 3
0
        private void DrawBody(Rect position, IEditorDictionary dict)
        {
            foreach (KeyValuePair <object, object> entry in dict.GetEntries().ToList())
            {
                position = position.ColumnNext();

                float buttonWidth = ButtonDrawers.ButtonSize.x;
                float columnSize  = (position.width - buttonWidth) / 2;

                Rect[] row = position.SplitRow(columnSize, columnSize, buttonWidth);

                object newKey   = Drawers.Draw(row[0], dict.KeyType, entry.Key);
                object newValue = Drawers.Draw(row[1], dict.ValueType, entry.Value);

                if (newKey != entry.Key || newValue != entry.Value)
                {
                    dict.RemoveEntry(entry.Key);
                    dict.AddEntry(newKey, newValue);
                }

                if (ButtonDrawers.Minus(row[2]))
                {
                    dict.RemoveEntry(newKey);
                }
            }
        }
Exemplo n.º 4
0
        private bool DrawFoldout(Rect position, GUIContent label, IEditorDictionary dict,
                                 object defaultKey, object defaultValue)
        {
            int fieldToken = fieldInfo.MetadataToken;

            if (!Foldouts.ContainsKey(fieldToken))
            {
                Foldouts[fieldToken] = false;
            }

            float buttonWidth = ButtonDrawers.ButtonSize.x;

            Rect[] rects = position.SplitRow(position.width - buttonWidth, buttonWidth);

            bool foldout = EditorGUI.Foldout(rects[0], Foldouts[fieldToken], label);

            if (ButtonDrawers.Plus(rects[1]))
            {
                defaultKey ??= CreateInstance(dict.KeyType);
                defaultValue ??= CreateInstance(dict.ValueType);
                dict.AddEntry(defaultKey, defaultValue);
            }

            return(Foldouts[fieldToken] = foldout);
        }
Exemplo n.º 5
0
        private void DrawComponentsUnderContext()
        {
            EditorGUILayout.LabelField("Components under context", EditorStyles.boldLabel);

            foreach (Component component in SceneContext.componentsUnderContext.ToArray())
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(component.ToString());
                if (ButtonDrawers.Minus())
                {
                    SceneContext.componentsUnderContext.Remove(component);
                    SceneContext.objectContexts.Remove(component);
                }
                EditorGUILayout.EndHorizontal();
            }
        }
Exemplo n.º 6
0
        private void DrawObjectContextFoldout(Object obj)
        {
            if (!_objContextFoldouts.ContainsKey(obj))
            {
                _objContextFoldouts[obj] = true;
            }

            EditorGUILayout.BeginHorizontal();
            _objContextFoldouts[obj] = EditorGUILayout.Foldout(_objContextFoldouts[obj], obj.ToString(), true);

            if (ButtonDrawers.Minus())
            {
                SceneContext.objectContexts.Remove(obj);
            }
            EditorGUILayout.EndHorizontal();
        }
Exemplo n.º 7
0
        public static void Dictionary <TKey, TValue>(Dictionary <TKey, TValue> dictionary,
                                                     Func <TKey, TKey> keyGuiMethod, Func <TKey, TValue, TValue> valueGuiMethod)
        {
            foreach (KeyValuePair <TKey, TValue> entry in new Dictionary <TKey, TValue>(dictionary))
            {
                EditorGUILayout.BeginHorizontal();
                TKey   newKey   = keyGuiMethod(entry.Key);
                TValue newValue = valueGuiMethod(entry.Key, entry.Value);

                dictionary.Remove(entry.Key);
                if (!ButtonDrawers.Minus())
                {
                    dictionary[newKey] = newValue;
                }
                EditorGUILayout.EndHorizontal();
            }
        }
Exemplo n.º 8
0
        public static bool List <T>(GUIContent label, List <T> list, T defaultValue, bool foldout,
                                    Func <T, int, T> guiMethod)
        {
            EditorGUILayout.BeginHorizontal();
            foldout = EditorGUILayout.Foldout(foldout, label, true);
            if (foldout && ButtonDrawers.Plus())
            {
                list.Add(defaultValue);
            }
            EditorGUILayout.EndHorizontal();

            if (!foldout)
            {
                return(false);
            }

            List(list, guiMethod);
            return(true);
        }
Exemplo n.º 9
0
        public static void Array <T>(ref T[] array, Func <T, int, T> guiMethod)
        {
            int stackIndex = 0;

            for (int i = 0; i < array.Length; i++)
            {
                EditorGUILayout.BeginHorizontal();
                array[stackIndex] = guiMethod(array[i], i);
                if (!ButtonDrawers.Minus())
                {
                    stackIndex++;
                }
                EditorGUILayout.EndHorizontal();
            }

            if (stackIndex != array.Length)
            {
                System.Array.Resize(ref array, stackIndex);
            }
        }
Exemplo n.º 10
0
        public static bool Array <T>(GUIContent label, ref T[] array, T defaultValue, bool foldout,
                                     Func <T, int, T> guiMethod)
        {
            EditorGUILayout.BeginHorizontal();
            foldout = EditorGUILayout.Foldout(foldout, label, true);
            if (foldout && ButtonDrawers.Plus())
            {
                System.Array.Resize(ref array, array.Length + 1);
                array[array.GetUpperBound(0)] = defaultValue;
            }
            EditorGUILayout.EndHorizontal();

            if (!foldout)
            {
                return(false);
            }

            Array(ref array, guiMethod);
            return(true);
        }
Exemplo n.º 11
0
        public static void List <T>(List <T> list, Func <T, int, T> guiMethod)
        {
            int indexToRemove = -1;

            for (int i = 0; i < list.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();
                list[i] = guiMethod(list[i], i);
                if (ButtonDrawers.Minus())
                {
                    indexToRemove = i;
                }
                EditorGUILayout.EndHorizontal();
            }

            if (indexToRemove > -1)
            {
                list.RemoveAt(indexToRemove);
            }
        }
Exemplo n.º 12
0
        public static bool Dictionary <TKey, TValue>(GUIContent label, Dictionary <TKey, TValue> dictionary,
                                                     TKey defaultKey, TValue defaultValue, bool foldout,
                                                     Func <TKey, TKey> keyGuiMethod, Func <TKey, TValue, TValue> valueGuiMethod)
        {
            EditorGUILayout.BeginHorizontal();
            foldout = EditorGUILayout.Foldout(foldout, label, true);
            if (foldout && ButtonDrawers.Plus() && !dictionary.ContainsKey(defaultKey))
            {
                dictionary.Add(defaultKey, defaultValue);
            }
            EditorGUILayout.EndHorizontal();

            if (!foldout)
            {
                return(false);
            }

            Dictionary(dictionary, keyGuiMethod, valueGuiMethod);
            return(true);
        }
Exemplo n.º 13
0
        private void DrawSceneContext()
        {
            _sceneContextDrawer ??= new WritableContextDrawer(SceneContext.extraContexts["Scene"],
                                                              ContractWriters.RawData, "SceneContext");

            EditorGUILayout.BeginHorizontal();

            _sceneContextFoldout = EditorGUILayout.Foldout(_sceneContextFoldout, "Scene context");
            if (ButtonDrawers.Minus())
            {
                SceneContext.extraContexts.Remove("Scene");
                _sceneContextDrawer = null;
                return;
            }

            EditorGUILayout.EndHorizontal();

            if (_sceneContextFoldout)
            {
                _sceneContextDrawer.Draw();
            }
        }
Exemplo n.º 14
0
 protected bool RemoveButton()
 => Rect.Contains(Event.current.mousePosition) && DrawButton(ButtonDrawers.MinusIcon(), EditorStyles.label);