public override void EditItem(EquipmentType item)
        {
            base.EditItem(item);
            _equipmentHandlerDrawer = ReflectionDrawerUtility.BuildEditorHierarchy(ReflectionUtility.GetFieldInherited(item.GetType(), "equipmentHandler"), item);

            _restrictionList = new UnityEditorInternal.ReorderableList(selectedItem.blockTypes, typeof(int), false, true, true, true);
            _restrictionList.drawHeaderCallback  += rect => GUI.Label(rect, "Restrictions");
            _restrictionList.drawElementCallback += (rect, index, active, focused) =>
            {
                rect.height = 16;
                rect.y     += 2;
                rect.width -= 30;
                rect.x     += 30; // Some selection room

                if (index < 0 || index >= selectedItem.blockTypes.Length)
                {
                    return;
                }

                // Trying to block self, not allowed.
                if (selectedItem.blockTypes[index] == selectedItem)
                {
                    var t = rect;
                    t.width = 200;

                    GUI.backgroundColor = Color.red;
                    EditorGUI.LabelField(t, "Can't block self");

                    rect.x     += 205; // +5 for margin
                    rect.width -= 205;
                }

                ObjectPickerUtility.RenderObjectPickerForType(rect, string.Empty, selectedItem.blockTypes[index], typeof(EquipmentType),
                                                              (val) =>
                {
                    selectedItem.blockTypes[index] = (EquipmentType)val;
                });

                GUI.backgroundColor = Color.white;
            };
            _restrictionList.onAddCallback += list =>
            {
                var l = new List <EquipmentType>(selectedItem.blockTypes);
                l.Add(null);
                selectedItem.blockTypes = l.ToArray();
                list.list = selectedItem.blockTypes;

                window.Repaint();
            };
            _restrictionList.onRemoveCallback += list =>
            {
                // Remove the element itself
                var l = new List <EquipmentType>(selectedItem.blockTypes);
                l.RemoveAt(list.index);
                selectedItem.blockTypes = l.ToArray();
                list.list = selectedItem.blockTypes;

                window.Repaint();
            };
        }
        protected virtual void ValidateItem(T item)
        {
            var drawers = ReflectionDrawerUtility.BuildEditorHierarchy(item.GetType(), item);

            foreach (var drawer in drawers)
            {
                ValidateItem(item, drawer, false, false);
            }
        }
示例#3
0
        private void UpdateIssuesFromType <T>(T t) where T : UnityEngine.Object
        {
            var drawers = ReflectionDrawerUtility.BuildEditorHierarchy(t.GetType(), t);

            foreach (var drawer in drawers)
            {
                UpdateIssueFromReflectionDrawerRecursive(drawer, t);
            }
        }
        public IfVariableEdgeConditionDrawer(FieldInfo fieldInfo, object value, object parentValue, int arrayIndex)
            : base(fieldInfo, value, parentValue, arrayIndex)
        {
            if (_types == null)
            {
                _types = ReflectionDrawerUtility.GetDerivedTypesFrom(typeof(IfVariableEdgeCondition <>), null);
            }

            _typeIndex = Mathf.Max(Array.IndexOf(_types.types, value.GetType()), 0);
        }
        public override void Init(NodeBase node, DialogueEditorWindow editor)
        {
            base.Init(node, editor);

            if (_types == null)
            {
                _types = ReflectionDrawerUtility.GetDerivedTypesFrom(typeof(SetVariableNode <>), null);
            }

            _typeIndex = Mathf.Max(Array.IndexOf(_types.types, node.GetType()), 0);
        }
        private List<DrawerBase> GetMainDrawers()
        {
            var drawers = ReflectionDrawerUtility.BuildEditorHierarchy(target.GetType(), target).ToList();
            var editor = ReflectionDrawerUtility.TryGetCustomDrawer(null, target, null, -1, target.GetType()) as ChildrenValueDrawerBase;
            if (editor != null)
            {
                editor.children = drawers;
                return new List<DrawerBase>() { editor };
            }

            return drawers;
        }
示例#7
0
        private void Update(DialogueEditorWindow editor)
        {
            _editor     = editor;
            _nodeEditor = editor.selectedNodeEditors.FirstOrDefault();
            _edge       = editor.selectedEdges.FirstOrDefault();
            _edgeDrawers.Clear();

            if (_edge != null)
            {
                _edgeDrawers = ReflectionDrawerUtility.BuildEditorHierarchy(_edge.GetType(), _edge).ToList();
            }
        }
示例#8
0
        public virtual void Init(NodeBase node, DialogueEditorWindow editor)
        {
            this.node   = node;
            this.editor = editor;

            _childFields.Clear();

            drawers = ReflectionDrawerUtility.BuildEditorHierarchy(node.GetType(), node);
            foreach (var drawer in drawers)
            {
                _showInNodeDict[drawer] = drawer.fieldInfo.GetCustomAttributes(typeof(ShowInNodeAttribute), true).Length == 0;
            }
        }
        /// <summary>
        /// Validate all items and make sure they're set up correctly. If not render a warning icon in the crud list.
        /// </summary>
        private void ValidateItems()
        {
            foreach (var item in crudList)
            {
                if (item == null)
                {
                    continue;
                }

                var drawers = ReflectionDrawerUtility.BuildEditorHierarchy(item.GetType(), item);
                foreach (var drawer in drawers)
                {
                    var isValid = ValidateItem(item, drawer);
                    if (isValid == false)
                    {
                        break;
                    }
                }
            }
        }
        public override void Draw(Rect rect, DialogueEditorWindow editor)
        {
            // Little bit of caching..
            if (_lastDialogue != editor.dialogue || _isDirty)
            {
                _lastDialogue = editor.dialogue;
                _drawer       = ReflectionDrawerUtility.BuildEditorHierarchy(typeof(Dialogue).GetField("variables"), _lastDialogue);

                _isDirty = false;
            }

            _drawer.Draw(ref rect);

//            rect.y += EditorGUIUtility.singleLineHeight;
//            if (GUI.Button(rect, "Add generic type"))
//            {
//                var l = new List<Variable>(_lastDialogue.variables.Cast<Variable>());
//                l.Add(new Variable<Vector2>());
//                _lastDialogue.variables = l.ToArray();
//
//                _isDirty = true;
//            }
        }
示例#11
0
        private void Update()
        {
            var fieldType = GetFieldType(false);

            if (typeof(UnityEngine.Object).IsAssignableFrom(fieldType) && ReflectionDrawerUtility.TryGetCustomDrawerType(fieldType, fieldInfo == null) == null)
            {
                return;
            }

            if (value == null)
            {
                // Check if we can create a new object of this type
                // TODO: Move to utility, can be reused - Utility.CanCreateNewObjectOfType
                if ((fieldType.IsClass && fieldType.IsAbstract == false) ||
                    fieldType.IsValueType)
                {
                    if (fieldType.GetConstructors().Any(o => o.GetParameters().Length == 0))
                    {
                        value = Activator.CreateInstance(fieldType);
                        NotifyValueChanged(value);
                    }
                }
            }
        }