Files

38 lines
3.0 KiB
C#

using System;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using UnityEditor;
using UnityEngine;
/// <summary>Read-only inspection for reproducible audio review; never edits production assets.</summary>
public static class ReviewAudioMix
{
public static string Recovery()
{
var scenes=Enumerable.Range(0,UnityEngine.SceneManagement.SceneManager.sceneCount).Select(i=>UnityEngine.SceneManagement.SceneManager.GetSceneAt(i)).ToArray();
if(EditorApplication.isPlaying||scenes.Length!=1||scenes[0].path!="Assets/Scenes/Boot.unity"||scenes[0].isDirty)throw new Exception("Original clean Boot edit state not restored");
var result=new{status="pass",utc=DateTime.UtcNow.ToString("o"),playing=EditorApplication.isPlaying,scenes=scenes.Select(s=>new{s.path,s.isDirty}),
sfx=HotUpdate.Gameplay.PrototypeClientPrefs.Sfx,music=HotUpdate.Gameplay.PrototypeClientPrefs.Music,
preferenceBaseline="Original SFX value was held in the interrupted task; exact pre-capture preference could not be reverified after restart",
audio=AudioSettings.GetConfiguration(),temporaryReviewObjects=UnityEngine.Object.FindObjectsOfType<GameObject>().Count(g=>g.name.Contains("MixReview"))};
string folder=Path.GetFullPath(Path.Combine(Application.dataPath,"../../Doc/Design/Sound/MixReview"));Directory.CreateDirectory(folder);
string json=JsonConvert.SerializeObject(result,Formatting.Indented);File.WriteAllText(Path.Combine(folder,"unity_recovery.json"),json);return json;
}
public static string Snapshot()
{
var skill=AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/Combat/BattleSkillPresentation.prefab");
var enemy=AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/Effects/EnemyCombat/EnemyCombatPresentation.prefab");
var ui=AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/Sound/Prefab/UiSfx.prefab");
var music=AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/Sound/Prefab/MainMenuMusic.prefab");
Func<GameObject,object[]> sources=g=>g.GetComponentsInChildren<AudioSource>(true).Select(s=>(object)new {s.name,s.volume,s.pitch,s.spatialBlend,s.loop,clip=AssetDatabase.GetAssetPath(s.clip)}).ToArray();
var so=new SerializedObject(enemy.GetComponent<HotUpdate.Gameplay.EnemyCombatPresentation>());
var result=new{status="pass",utc=DateTime.UtcNow.ToString("o"),skill=sources(skill),enemy=sources(enemy),ui=sources(ui),music=sources(music),
enemyMixBudget=so.FindProperty("_mixBudget").floatValue,enemyVoiceVolume=so.FindProperty("_voiceVolume").floatValue,
audio=AudioSettings.GetConfiguration(),listenerVolume=AudioListener.volume,
subjectivelyApproved=false,accountWrites=false};
string folder=Path.GetFullPath(Path.Combine(Application.dataPath,"../../Doc/Design/Sound/MixReview"));Directory.CreateDirectory(folder);
string json=JsonConvert.SerializeObject(result,Formatting.Indented);File.WriteAllText(Path.Combine(folder,"unity_snapshot.json"),json);return json;
}
}