AkiraPixelWind/Assets/Scripts/Editor/ProjectTools/ProjectTool.cs
2023-01-06 17:55:47 +08:00

167 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#if UNITY_EDITOR
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
// 陈皓
public class ProjectTool
{
///<summary>
/// 该函数设置由不同线程产生的窗口的显示状态
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="cmdShow">指定窗口如何显示。查看允许值列表请查阅ShowWlndow函数的说明部分</param>
/// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零</returns>
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
/// <summary>
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。
/// 系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// </summary>
/// <param name="hWnd">将被激活并被调入前台的窗口句柄</param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零</returns>
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
static string ProjectPath => System.Environment.CurrentDirectory;
static string AssetsPath => ProjectPath + "\\Assets\\";
static string LubanToolsPath => ProjectPath + "\\LubanTools\\";
static string GameAssetsPath => AssetsPath + "GameAssets\\";
static string LubanToolsDesignerConfigsPath => LubanToolsPath + "DesignerConfigs\\";
[MenuItem("项目工具/配置生成/配置和生成")]
static void CopyBuildCfg()
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = LubanToolsPath + "gen_code_bin.bat";
//proc.StartInfo.Arguments = string.Format("10");//this is argument
//proc.StartInfo.UseShellExecute = false;//运行时隐藏dos窗口
//proc.StartInfo.CreateNoWindow = false;//运行时隐藏dos窗口
proc.StartInfo.WorkingDirectory = LubanToolsPath;
//proc.StartInfo.Verb = "runas";//设置该启动动作,会以管理员权限运行进程
proc.Start();
//proc.WaitForExit();
HandleRunningInstance(proc);
}
[MenuItem("项目工具/配置生成/配置和生成(测试)")]
static void CopyBuildCfg_Test()
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = LubanToolsPath + "gen_code_bin - 测试.bat";
//proc.StartInfo.Arguments = string.Format("10");//this is argument
//proc.StartInfo.UseShellExecute = false;//运行时隐藏dos窗口
//proc.StartInfo.CreateNoWindow = false;//运行时隐藏dos窗口
proc.StartInfo.WorkingDirectory = LubanToolsPath;
//proc.StartInfo.Verb = "runas";//设置该启动动作,会以管理员权限运行进程
proc.Start();
//proc.WaitForExit();
HandleRunningInstance(proc);
}
[MenuItem("项目工具/打开目录/Assets")]
static void OpenAssetsDir()
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "explorer.exe";
p.StartInfo.Arguments = @" /select, "+ GameAssetsPath;
p.Start();
}
[MenuItem("项目工具/打开目录/Luban")]
static void OpenLubanDir()
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "explorer.exe";
p.StartInfo.Arguments = @" /select, " + LubanToolsDesignerConfigsPath;
p.Start();
}
[MenuItem("项目工具/Git/Git-Bash打开Assets")]
static void GitBashAssets()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string GitBashDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "GitBashDir") GitBashDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(GitBashDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如GitBashDir=C:\\Program Files\\Git");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = GitBashDir + "//git-bash.exe";
p.StartInfo.Arguments = " --cd=" + AssetsPath;
p.Start();
}
[MenuItem("项目工具/Git/Git-Bash打开Luban")]
static void GitBashLuban()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string GitBashDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "GitBashDir") GitBashDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(GitBashDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如GitBashDir=C:\\Program Files\\Git");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = GitBashDir + "//git-bash.exe";
p.StartInfo.Arguments = " --cd=" + LubanToolsPath;
p.Start();
}
private const int SW_SHOWNOMAL = 1;
private static void HandleRunningInstance(System.Diagnostics.Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, SW_SHOWNOMAL);//显示
SetForegroundWindow(instance.MainWindowHandle);//当到最前端
}
#region
[MenuItem("Assets/资源管理器定位文件", false)]
public static void FindAssetsFileDir()
{
string path = ProjectPath + "\\" + AssetDatabase.GetAssetPath(Selection.activeInstanceID);
path = path.Replace('/', '\\');
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "explorer.exe";
p.StartInfo.Arguments = @" /select, " + path;
p.Start();
}
#endregion
}
#endif