145 lines
5.4 KiB
C#
145 lines
5.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace RunlevelSystems.DevPlus1.EditorTools
|
|
{
|
|
public class RLProjectAnalyzerWindow : EditorWindow
|
|
{
|
|
private RLProjectAnalysisData data = new RLProjectAnalysisData();
|
|
private string lastRunTime = "Not run yet";
|
|
private Vector2 scroll;
|
|
|
|
[MenuItem("Runlevel Systems/DevPlus1/Analyze Unity Project")]
|
|
public static void ShowWindow()
|
|
{
|
|
RLProjectAnalyzerWindow window = GetWindow<RLProjectAnalyzerWindow>("Runlevel DevPlus1 Project Analyzer");
|
|
window.minSize = new Vector2(520f, 520f);
|
|
}
|
|
|
|
[MenuItem("Runlevel Systems/DevPlus1/Open Report Folder")]
|
|
public static void OpenReportFolder()
|
|
{
|
|
RLReportExporter.RevealReportFolder();
|
|
}
|
|
|
|
[MenuItem("Runlevel Systems/DevPlus1/Refresh Git Reports")]
|
|
public static void RefreshGitReportsMenu()
|
|
{
|
|
RLGitReportSummary git = RLGitReportImporter.ImportGitReports();
|
|
RLReportExporter.WriteGitSummary(git);
|
|
AssetDatabase.Refresh();
|
|
Debug.Log("Runlevel DevPlus1 Git report summary refreshed.");
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
RLReportExporter.EnsureFolders();
|
|
data.projectName = Application.productName;
|
|
data.unityVersion = Application.unityVersion;
|
|
}
|
|
|
|
private void OnGUI()
|
|
{
|
|
scroll = EditorGUILayout.BeginScrollView(scroll);
|
|
|
|
EditorGUILayout.LabelField("Runlevel DevPlus1 Project Analyzer", EditorStyles.boldLabel);
|
|
EditorGUILayout.Space();
|
|
|
|
if (GUILayout.Button("Import Git Reports")) ImportGitReports();
|
|
if (GUILayout.Button("Analyze Open Scene")) AnalyzeOpenScenes();
|
|
if (GUILayout.Button("Analyze Build Settings Scenes")) AnalyzeBuildSettingsScenes();
|
|
if (GUILayout.Button("Analyze All Asset Scenes")) AnalyzeAllAssetScenes();
|
|
if (GUILayout.Button("Analyze Prefabs")) AnalyzePrefabs();
|
|
if (GUILayout.Button("Analyze Scripts")) AnalyzeScripts();
|
|
if (GUILayout.Button("Generate All Reports")) GenerateAllReports();
|
|
if (GUILayout.Button("Open Reports Folder")) RLReportExporter.RevealReportFolder();
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Last run time", lastRunTime);
|
|
EditorGUILayout.LabelField("Scenes analyzed", data.scenes.Count.ToString());
|
|
EditorGUILayout.LabelField("Scripts analyzed", data.scripts.Count.ToString());
|
|
EditorGUILayout.LabelField("Prefabs analyzed", data.prefabs.Count.ToString());
|
|
EditorGUILayout.LabelField("Missing script count", CountMissingScripts().ToString());
|
|
EditorGUILayout.LabelField("Missing reference count", CountMissingReferences().ToString());
|
|
EditorGUILayout.LabelField("Report folder path", RLReportExporter.AbsoluteReportFolder);
|
|
|
|
EditorGUILayout.EndScrollView();
|
|
}
|
|
|
|
private void ImportGitReports()
|
|
{
|
|
data.gitReports = RLGitReportImporter.ImportGitReports();
|
|
RLReportExporter.WriteGitSummary(data.gitReports);
|
|
MarkRun();
|
|
}
|
|
|
|
private void AnalyzeOpenScenes()
|
|
{
|
|
data.scenes = RLSceneAnalyzer.AnalyzeOpenScenes();
|
|
MarkRun();
|
|
}
|
|
|
|
private void AnalyzeBuildSettingsScenes()
|
|
{
|
|
data.scenes = RLSceneAnalyzer.AnalyzeBuildSettingsScenes();
|
|
MarkRun();
|
|
}
|
|
|
|
private void AnalyzeAllAssetScenes()
|
|
{
|
|
data.scenes = RLSceneAnalyzer.AnalyzeAllAssetScenes();
|
|
MarkRun();
|
|
}
|
|
|
|
private void AnalyzePrefabs()
|
|
{
|
|
data.prefabs = RLPrefabAnalyzer.AnalyzePrefabs();
|
|
MarkRun();
|
|
}
|
|
|
|
private void AnalyzeScripts()
|
|
{
|
|
data.scripts = RLScriptAnalyzer.AnalyzeScripts();
|
|
MarkRun();
|
|
}
|
|
|
|
private void GenerateAllReports()
|
|
{
|
|
data.projectName = Application.productName;
|
|
data.unityVersion = Application.unityVersion;
|
|
data.generatedAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
data.gitReports = RLGitReportImporter.ImportGitReports();
|
|
data.scenes = RLSceneAnalyzer.AnalyzeOpenScenes();
|
|
data.prefabs = RLPrefabAnalyzer.AnalyzePrefabs();
|
|
data.scripts = RLScriptAnalyzer.AnalyzeScripts();
|
|
RLAIContextExporter.EnrichProjectContext(data);
|
|
RLReportExporter.ExportAll(data);
|
|
MarkRun();
|
|
Debug.Log("Runlevel DevPlus1 Unity reports generated.");
|
|
}
|
|
|
|
private void MarkRun()
|
|
{
|
|
lastRunTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
Repaint();
|
|
}
|
|
|
|
private int CountMissingScripts()
|
|
{
|
|
int count = 0;
|
|
foreach (RLSceneInfo scene in data.scenes) count += scene.missingScriptCount;
|
|
foreach (RLPrefabInfo prefab in data.prefabs) count += prefab.missingScriptCount;
|
|
return count;
|
|
}
|
|
|
|
private int CountMissingReferences()
|
|
{
|
|
int count = 0;
|
|
foreach (RLSceneInfo scene in data.scenes) count += scene.missingReferenceCount;
|
|
foreach (RLPrefabInfo prefab in data.prefabs) count += prefab.missingReferenceCount;
|
|
return count;
|
|
}
|
|
}
|
|
}
|