diff options
author | chai <chaifix@163.com> | 2020-10-23 13:08:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-23 13:08:43 +0800 |
commit | b82da95b5181ac8bbae38efb13e950d5e88a4caa (patch) | |
tree | 48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs | |
parent | 917e9e0b320775634dc2e710f7deac74fd0822f0 (diff) |
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs')
-rw-r--r-- | Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs new file mode 100644 index 00000000..e9ee8c71 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs @@ -0,0 +1,157 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda <info@amplify.pt> + +using UnityEditor; +using UnityEngine; +using System.IO; +using System.Security.AccessControl; +using System.Security.Principal; +using System.Text.RegularExpressions; +using Debug = UnityEngine.Debug; + +namespace AmplifyShaderEditor +{ + public sealed class TemplatePostProcessor : AssetPostprocessor + { + public static TemplatesManager DummyManager; + public static void Destroy() + { + if( DummyManager != null ) + { + DummyManager.Destroy(); + ScriptableObject.DestroyImmediate( DummyManager ); + DummyManager = null; + } + } + + static void OnPostprocessAllAssets( string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths ) + { + TemplatesManager templatesManager; + bool firstTimeDummyFlag = false; + if( UIUtils.CurrentWindow == null ) + { + if( DummyManager == null ) + { + DummyManager = ScriptableObject.CreateInstance<TemplatesManager>(); + DummyManager.hideFlags = HideFlags.HideAndDontSave; + firstTimeDummyFlag = true; + } + templatesManager = DummyManager; + } + else + { + Destroy(); + templatesManager = UIUtils.CurrentWindow.TemplatesManagerInstance; + } + + if( templatesManager == null ) + { + return; + } + + if( !templatesManager.Initialized ) + { + templatesManager.Init(); + } + + bool refreshMenuItems = false; + for( int i = 0; i < importedAssets.Length; i++ ) + { + if( TemplateHelperFunctions.CheckIfTemplate( importedAssets[ i ] ) ) + { + string guid = AssetDatabase.AssetPathToGUID( importedAssets[ i ] ); + TemplateDataParent templateData = templatesManager.GetTemplate( guid ); + if( templateData != null ) + { + refreshMenuItems = templateData.Reload() || refreshMenuItems || firstTimeDummyFlag; + int windowCount = IOUtils.AllOpenedWindows.Count; + AmplifyShaderEditorWindow currWindow = UIUtils.CurrentWindow; + for( int windowIdx = 0; windowIdx < windowCount; windowIdx++ ) + { + if( IOUtils.AllOpenedWindows[ windowIdx ].OutsideGraph.CurrentCanvasMode == NodeAvailability.TemplateShader ) + { + if( IOUtils.AllOpenedWindows[ windowIdx ].OutsideGraph.MultiPassMasterNodes.NodesList[ 0 ].CurrentTemplate == templateData ) + { + UIUtils.CurrentWindow = IOUtils.AllOpenedWindows[ windowIdx ]; + IOUtils.AllOpenedWindows[ windowIdx ].OutsideGraph.ForceMultiPassMasterNodesRefresh(); + } + } + } + UIUtils.CurrentWindow = currWindow; + } + else + { + refreshMenuItems = true; + string name = TemplatesManager.OfficialTemplates.ContainsKey( guid ) ? TemplatesManager.OfficialTemplates[ guid ] : string.Empty; + TemplateMultiPass mp = TemplateMultiPass.CreateInstance<TemplateMultiPass>(); + mp.Init( name, guid, true ); + templatesManager.AddTemplate( mp ); + } + } + } + + if( deletedAssets.Length > 0 ) + { + if( deletedAssets[ 0 ].IndexOf( Constants.InvalidPostProcessDatapath ) < 0 ) + { + for( int i = 0; i < deletedAssets.Length; i++ ) + { + string guid = AssetDatabase.AssetPathToGUID( deletedAssets[ i ] ); + TemplateDataParent templateData = templatesManager.GetTemplate( guid ); + if( templateData != null ) + { + // Close any window using that template + int windowCount = IOUtils.AllOpenedWindows.Count; + for( int windowIdx = 0; windowIdx < windowCount; windowIdx++ ) + { + TemplateMasterNode masterNode = IOUtils.AllOpenedWindows[ windowIdx ].CurrentGraph.CurrentMasterNode as TemplateMasterNode; + if( masterNode != null && masterNode.CurrentTemplate.GUID.Equals( templateData.GUID ) ) + { + IOUtils.AllOpenedWindows[ windowIdx ].Close(); + } + } + + templatesManager.RemoveTemplate( templateData ); + refreshMenuItems = true; + } + } + } + } + + //for ( int i = 0; i < movedAssets.Length; i++ ) + //{ + // if ( TemplateHelperFunctions.CheckIfTemplate( movedAssets[ i ] ) ) + // { + // refreshMenuItems = true; + // break; + // } + //} + + //for ( int i = 0; i < movedFromAssetPaths.Length; i++ ) + //{ + // if ( TemplateHelperFunctions.CheckIfTemplate( movedFromAssetPaths[ i ] ) ) + // { + // refreshMenuItems = true; + // break; + // } + //} + + if( refreshMenuItems ) + { + //UnityEngine.Debug.Log( "Refresh Menu Items" ); + refreshMenuItems = false; + templatesManager.CreateTemplateMenuItems(); + + AmplifyShaderEditorWindow currWindow = UIUtils.CurrentWindow; + + int windowCount = IOUtils.AllOpenedWindows.Count; + for( int windowIdx = 0; windowIdx < windowCount; windowIdx++ ) + { + UIUtils.CurrentWindow = IOUtils.AllOpenedWindows[ windowIdx ]; + IOUtils.AllOpenedWindows[ windowIdx ].CurrentGraph.ForceCategoryRefresh(); + } + UIUtils.CurrentWindow = currWindow; + } + } + } +} |