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()); }
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; } } } }
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; } }