Beispiel #1
0
 public CommonBlock(SerializedProperty property, ItemModule module) : base(property, module)
 {
     text      = module.GetName();
     Name      = property.FindAutoPropertyRelative("Name");
     Parameter = property.FindAutoPropertyRelative("Parameter");
     item      = property.serializedObject.targetObject as ItemNew;
     template  = property.serializedObject.targetObject as ItemTemplate;
     errorBef  = !(!module.IsValid || Duplicate());
 }
Beispiel #2
0
        private void OnSelectType(Type type)
        {
            if (!typeof(ItemModule).IsAssignableFrom(type) || !selectedItem && !selectedTemplate)
            {
                return;
            }
            SerializedObject   serializedObject = null;
            IList <ItemModule> modules          = null;
            string             undoName         = null;
            Func <ItemModule>  addModule        = null;
            ScriptableObject   scriptableObject = null;

            switch (funcTab.SelectedIndex)
            {
            case 1:
                serializedObject = serializedItem;
                modules          = selectedItem.Modules;
                undoName         = $"添加模块至道具{selectedItem.Name}";
                addModule        = () => ItemNew.Editor.AddModule(selectedItem, type);
                scriptableObject = selectedItem;
                break;

            case 2:
                serializedObject = serializedTemplate;
                modules          = selectedTemplate.Modules;
                undoName         = $"添加模块至模板{selectedTemplate.Name}";
                addModule        = () => ItemTemplate.Editor.AddModule(selectedTemplate, type);
                scriptableObject = selectedTemplate;
                break;
            }
            if (!CommonModule.IsCommon(type) && modules.Any(x => ItemModule.Duplicate(x, type)))
            {
                EditorUtility.DisplayDialog("无法添加", $"已经存在 [{ItemModule.GetName(type)}] 模块,每种模块只能添加一个。", "确定");
            }
            else if (serializedObject != null)
            {
                Undo.RegisterCompleteObjectUndo(scriptableObject, undoName);
                if (addModule() != null)
                {
                    RefreshModules();
                    this.StartCoroutine(scollToEnd());

                    IEnumerator scollToEnd()
                    {
                        yield return(new WaitForEndOfFrame());

                        rightPanel.verticalScroller.value = rightPanel.verticalScroller.highValue;
                    }
                }
            }
        }
Beispiel #3
0
        private void DeleteModule(ItemModule module)
        {
            IList <ItemModule> modules = null;

            switch (funcTab.SelectedIndex)
            {
            case 1:
                modules = selectedItem.Modules;
                break;

            case 2:
                modules = selectedTemplate.Modules;
                break;
            }
            foreach (var exist in modules)
            {
                Type type = exist.GetType();
                var  attr = type.GetCustomAttribute <ItemModule.RequireAttribute>();
                if (attr != null && attr.modules.Contains(module.GetType()))
                {
                    EditorUtility.DisplayDialog("无法移除", $"因为 [{ItemModule.GetName(type)}] 模块依赖于此模块,暂时无法移除。", "确定");
                    return;
                }
            }
            switch (funcTab.SelectedIndex)
            {
            case 1:
                Undo.RegisterCompleteObjectUndo(selectedItem, $"从道具{selectedItem.Name}删除模块");
                if (ItemNew.Editor.RemoveModule(selectedItem, module))
                {
                    RefreshModules();
                }
                break;

            case 2:
                Undo.RegisterCompleteObjectUndo(selectedTemplate, $"从模板{selectedTemplate.Name}删除模块");
                if (ItemTemplate.Editor.RemoveModule(selectedTemplate, module))
                {
                    RefreshModules();
                }
                break;
            }
        }