Unity-Customer-Template/Assets/RL_DevPlus1/Editor/ProjectAnalyzer/RLProjectAnalyzerWindow.cs
Frank Harris 28c15035a4
All checks were successful
Code Documentation / code-docs (push) Successful in 6s
Project Report / project-report (push) Successful in 4s
Validate Code / validate (push) Successful in 3s
added unity files
2026-06-15 12:03:33 -05:00

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;
}
}
}