summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplatePostProcessor.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (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.cs157
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;
+ }
+ }
+ }
+}