AkiraPixelWind/Assets/Scripts/Editor/ProjectTools/ProjectTool.cs
2022-12-29 18:20:40 +08:00

472 lines
17 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.

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
{
#if UNITY_EDITOR
///<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("项目工具/Protobuff生成/生成Protobuff CS文件")]
static void SVNBuildProtobuffCS()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string ProtoBuffDir = "";
string SvnDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "ProtoBuffDir") ProtoBuffDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
if (string.IsNullOrEmpty(ProtoBuffDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,ProtoBuffDir=D:\\Project\\proto");
return;
}
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = ProtoBuffDir + "/build_cs.bat";
//proc.StartInfo.Arguments = string.Format("10");//this is argument
//proc.StartInfo.UseShellExecute = false;//运行时隐藏dos窗口
//proc.StartInfo.CreateNoWindow = false;//运行时隐藏dos窗口
proc.StartInfo.WorkingDirectory = ProtoBuffDir;
//proc.StartInfo.Verb = "runas";//设置该启动动作,会以管理员权限运行进程
proc.Start();
//proc.WaitForExit();
HandleRunningInstance(proc);
}
[MenuItem("项目工具/配置生成/打开配置表拷贝名称配置文件")]
static void Opencopy_NameCfg()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_NameCfg.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = exepath + "/copy_NameCfg.txt";
//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 Opencopy_Path()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = exepath + "/copy_Path.txt";
//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("项目工具/SVN更新/Assets目录")]
static void SVNUpdateAssets()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string SrcDir = "";
string SvnDir = "";
string LubanDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:update /path:" + AssetsPath;
p.Start();
}
[MenuItem("项目工具/SVN更新/Luban目录")]
static void SVNUpdateLuban()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string SrcDir = "";
string SvnDir = "";
string LubanDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:update /path:" + LubanToolsPath;
p.Start();
}
[MenuItem("项目工具/SVN更新/策划目录")]
static void SVNUpdatePlanning()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string SrcDir = "";
string SvnDir = "";
string LubanDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:update /path:" + SrcDir;
p.Start();
}
[MenuItem("项目工具/SVN更新/Protobuff")]
static void SVNUpdateProtobuff()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string ProtoBuffDir = "";
string SvnDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "ProtoBuffDir") ProtoBuffDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
if (string.IsNullOrEmpty(ProtoBuffDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,ProtoBuffDir=D:\\Project\\proto");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:update /path:" + ProtoBuffDir;
p.Start();
}
[MenuItem("项目工具/SVN提交/Assets目录")]
static void SVNCommitAssets()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string SrcDir = "";
string SvnDir = "";
string LubanDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:commit /path:" + AssetsPath;
p.Start();
}
[MenuItem("项目工具/SVN提交/Luban目录")]
static void SVNCommitLuban()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string SrcDir = "";
string SvnDir = "";
string LubanDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:commit /path:" + LubanToolsPath;
p.Start();
}
[MenuItem("项目工具/SVN提交/策划目录")]
static void SVNCommitPlanning()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string SrcDir = "";
string SvnDir = "";
string LubanDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
if (parr[0].Trim() == "SvnDir") SvnDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(SvnDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,形如SvnDir=C:\\Program Files\\TortoiseSVN\\bin");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = SvnDir + "//TortoiseProc.exe";
p.StartInfo.Arguments = " /command:commit /path:" + SrcDir;
p.Start();
}
[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("项目工具/打开目录/策划")]
static void OpenPlanningDir()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string LubanDir;
string SrcDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "SrcDir") SrcDir = parr[1].Trim();
if (parr[0].Trim() == "LubanDir") LubanDir = parr[1].Trim();
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "explorer.exe";
p.StartInfo.Arguments = @" /select, " + SrcDir;
p.Start();
}
[MenuItem("项目工具/打开目录/ProtoBuff")]
static void OpenProtoBuffDir()
{
string exepath = LubanToolsPath;
if (!File.Exists(exepath + "/copy_Path.txt"))
{
Console.WriteLine("copy_Path 配置不存在");
return;
}
string ProtoBuffDir = "";
string[] pathcfg = File.ReadAllText(exepath + "/copy_Path.txt").Split('\n'); ;
foreach (var pc in pathcfg)
{
var parr = pc.Split('=');
if (parr[0].Trim() == "ProtoBuffDir") ProtoBuffDir = parr[1].Trim();
}
if (string.IsNullOrEmpty(ProtoBuffDir))
{
Debug.LogError("请在luban目录copy_Path.txt中配置SVN安装目录bin文件夹,加入配置,ProtoBuffDir=D:\\Project\\proto");
return;
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "explorer.exe";
p.StartInfo.Arguments = @" /select, " + ProtoBuffDir;
p.Start();
}
private const int SW_SHOWNOMAL = 1;
private static void HandleRunningInstance(System.Diagnostics.Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, SW_SHOWNOMAL);//显示
SetForegroundWindow(instance.MainWindowHandle);//当到最前端
}
#endif
}