public static ModuleBlock Create(SerializedProperty property, ItemModule module) { foreach (var type in TypeCache.GetTypesWithAttribute <CustomMuduleDrawerAttribute>()) { if (typeof(ModuleBlock).IsAssignableFrom(type)) { var attr = type.GetCustomAttribute <CustomMuduleDrawerAttribute>(); if (attr.useForChildren ? attr.type.IsAssignableFrom(module.GetType()) : (attr.type == module.GetType())) { return(Activator.CreateInstance(type, property, module) as ModuleBlock); } } } return(new ModuleBlock(property, module)); }
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; } }
private void EditScript(ItemModule module) { if (module != null) { var script = ZetanUtility.Editor.LoadAssets <MonoScript>().Find(x => x.GetClass() == module.GetType()); if (script) { AssetDatabase.OpenAsset(script); } } }