| using System.IO; |
| using System.Text; |
| using UnityEditor.Build; |
| using UnityEditor.Build.Reporting; |
| using UnityEngine; |
| using OnDeviceAgent.AgentCore; |
| namespace OnDeviceAgent.AgentCore.Editor |
| { |
|
|
| |
| |
| |
| |
| public sealed class SkillsManifestPreprocessor : IPreprocessBuildWithReport |
| { |
| public int callbackOrder => 0; |
|
|
| public void OnPreprocessBuild(BuildReport report) => GenerateAll(); |
|
|
| static void GenerateAll() |
| { |
| var root = Application.streamingAssetsPath; |
| if (!Directory.Exists(root)) |
| return; |
|
|
| |
| |
| foreach (var skillsDir in Directory.GetDirectories(root, "skills", SearchOption.AllDirectories)) |
| WriteManifest(skillsDir); |
| } |
|
|
| |
| |
| static void WriteManifest(string skillsDir) |
| { |
| var sb = new StringBuilder(); |
| sb.AppendLine("# auto-generated by SkillsManifestPreprocessor, one skill folder name per line."); |
| sb.AppendLine("# Regenerated before each build; hand-edits are overwritten."); |
| foreach (var sub in Directory.GetDirectories(skillsDir)) |
| sb.AppendLine(Path.GetFileName(sub)); |
|
|
| var manifestPath = Path.Combine(skillsDir, FileStreamingAssetReader.DirManifestFile); |
| var next = sb.ToString(); |
| if (File.Exists(manifestPath) && File.ReadAllText(manifestPath) == next) |
| return; |
|
|
| File.WriteAllText(manifestPath, next); |
| Debug.Log("[SkillsManifest] wrote " + manifestPath); |
| } |
| } |
| } |
|
|