| using UnityEngine;  | 
| using UnityEditor;  | 
| using UnityEditor.Callbacks;  | 
| using System.IO;  | 
|   | 
| public class FileOpenEx  | 
| {  | 
|   | 
|     [OnOpenAssetAttribute(1)]  | 
|     public static bool step1(int instanceID, int line)  | 
|     {  | 
|         return false;  | 
|     }  | 
|   | 
|     // step2 has an attribute with index 2, so will be called after step1  | 
|     [OnOpenAssetAttribute(2)]  | 
|     public static bool step2(int instanceID, int line)  | 
|     {  | 
|         string path = AssetDatabase.GetAssetPath(EditorUtility.InstanceIDToObject(instanceID));  | 
|         string name = Application.dataPath + "/" + path.Replace("Assets/", "");  | 
|   | 
|         if (name.EndsWith(".Shader") || name.EndsWith(".cginc") || name.EndsWith(".shader") || name.EndsWith(".lua.txt") || name.EndsWith(".lua"))  | 
|         {  | 
|             if (string.IsNullOrEmpty(ExtensionalTools.shaderEditorPath))  | 
|             {  | 
|                 return false;  | 
|             }  | 
|             else  | 
|             {  | 
|                 System.Diagnostics.Process process = new System.Diagnostics.Process();  | 
|                 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();  | 
|                 startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;  | 
|                 startInfo.FileName = ExtensionalTools.shaderEditorPath;  | 
|                 startInfo.Arguments = name;  | 
|                 process.StartInfo = startInfo;  | 
|                 process.Start();  | 
|                 return true;  | 
|             }  | 
|         }  | 
|   | 
|         if (name.EndsWith(".txt") && name.Contains("ResourcesOut") && name.Contains("Refdata"))  | 
|         {  | 
|             if (string.IsNullOrEmpty(ExtensionalTools.txtEditorPath))  | 
|             {  | 
|                 return false;  | 
|             }  | 
|             else  | 
|             {  | 
|                 System.Diagnostics.Process process = new System.Diagnostics.Process();  | 
|                 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();  | 
|   | 
|                 startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;  | 
|                 startInfo.FileName = ExtensionalTools.txtEditorPath;  | 
|   | 
|                 name = ExcelReader.GetExcelPath(Path.GetFileNameWithoutExtension(path));  | 
|                 startInfo.Arguments = name;  | 
|                 process.StartInfo = startInfo;  | 
|                 process.Start();  | 
|                 return true;  | 
|             }  | 
|         }  | 
|   | 
|         return false;  | 
|     }  | 
| }  |