175 lines
6.3 KiB
C#
175 lines
6.3 KiB
C#
using System.Collections.Generic;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace DarkTonic.MasterAudio.EditorScripts
|
|
{
|
|
// ReSharper disable once CheckNamespace
|
|
public class MasterAudioSoundUpgrader : EditorWindow
|
|
{
|
|
private Vector2 _scrollPos = Vector2.zero;
|
|
private int _audioSources = -1;
|
|
|
|
[MenuItem("Window/Master Audio/Master Audio Sound Upgrader")]
|
|
// ReSharper disable once UnusedMember.Local
|
|
static void Init()
|
|
{
|
|
var window = GetWindow<MasterAudioSoundUpgrader>(false, "Upgrader");
|
|
var height = 310;
|
|
|
|
window.minSize = new Vector2(600, height);
|
|
window.maxSize = new Vector2(600, height);
|
|
|
|
GetWindow(typeof(MasterAudioSoundUpgrader));
|
|
}
|
|
|
|
// ReSharper disable once UnusedMember.Local
|
|
// ReSharper disable once InconsistentNaming
|
|
void OnGUI()
|
|
{
|
|
_scrollPos = GUI.BeginScrollView(
|
|
new Rect(0, 0, position.width, position.height),
|
|
_scrollPos,
|
|
new Rect(0, 0, 600, 310)
|
|
);
|
|
|
|
|
|
if (MasterAudioInspectorResources.LogoTexture != null)
|
|
{
|
|
DTGUIHelper.ShowHeaderTexture(MasterAudioInspectorResources.LogoTexture);
|
|
}
|
|
|
|
if (Application.isPlaying)
|
|
{
|
|
DTGUIHelper.ShowLargeBarAlert("This window can only be used in edit mode.");
|
|
}
|
|
else
|
|
{
|
|
DTGUIHelper.ShowColorWarning("This window will help you prepare a project that has existing audio for switching over to Master Audio.");
|
|
DTGUIHelper.ShowColorWarning("All Audio Source components should be created by Master Audio only. Let's remove all your old ones.");
|
|
DTGUIHelper.ShowLargeBarAlert("For each Scene, open the Scene, then go through the steps below to locate & delete items.");
|
|
|
|
EditorGUILayout.Separator();
|
|
EditorGUILayout.LabelField("Step 1", EditorStyles.boldLabel);
|
|
|
|
EditorGUILayout.BeginHorizontal(EditorStyles.objectFieldThumb);
|
|
GUI.contentColor = DTGUIHelper.BrightButtonColor;
|
|
if (GUILayout.Button(new GUIContent("Find Audio Sources In Scene"), EditorStyles.toolbarButton, GUILayout.Width(200)))
|
|
{
|
|
var audSources = GetNonMAAudioSources();
|
|
_audioSources = audSources.Count;
|
|
|
|
if (_audioSources > 0)
|
|
{
|
|
Selection.objects = audSources.ToArray();
|
|
}
|
|
|
|
if (_audioSources == 0)
|
|
{
|
|
DTGUIHelper.ShowAlert("You have zero AudioSources in your Scene. You are finished.");
|
|
}
|
|
else
|
|
{
|
|
DTGUIHelper.ShowAlert(audSources.Count + " AudioSource(s) found and selected in the Hierarchy. Please take note of what game objects these are, so you can add sound to them later with Master Audio.");
|
|
}
|
|
}
|
|
GUI.contentColor = Color.white;
|
|
|
|
if (_audioSources < 0)
|
|
{
|
|
GUI.contentColor = DTGUIHelper.BrightButtonColor;
|
|
GUILayout.Label("Click button to find Audio Sources.");
|
|
}
|
|
else if (_audioSources == 0)
|
|
{
|
|
GUI.contentColor = DTGUIHelper.BrightButtonColor;
|
|
GUILayout.Label("No Audio Sources! You are finished.");
|
|
}
|
|
else
|
|
{
|
|
GUI.contentColor = Color.red;
|
|
GUILayout.Label(_audioSources.ToString() + " Audio Source(s) selected. Take note of them and go to step 2.");
|
|
}
|
|
GUI.contentColor = Color.white;
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
|
|
EditorGUILayout.Separator();
|
|
EditorGUILayout.LabelField("Step 2", EditorStyles.boldLabel);
|
|
|
|
EditorGUILayout.BeginHorizontal(EditorStyles.objectFieldThumb);
|
|
GUI.contentColor = DTGUIHelper.BrightButtonColor;
|
|
if (GUILayout.Button(new GUIContent("Delete Audio Sources In Scene"), EditorStyles.toolbarButton, GUILayout.Width(200)))
|
|
{
|
|
var audSources = GetNonMAAudioSources();
|
|
_audioSources = audSources.Count;
|
|
|
|
if (_audioSources == 0)
|
|
{
|
|
DTGUIHelper.ShowAlert("You have zero AudioSources in your Scene. You are finished.");
|
|
_audioSources = 0;
|
|
}
|
|
else
|
|
{
|
|
DeleteAudioSources();
|
|
}
|
|
}
|
|
EditorGUILayout.EndHorizontal();
|
|
}
|
|
|
|
GUI.EndScrollView();
|
|
}
|
|
|
|
// ReSharper disable once InconsistentNaming
|
|
private static List<GameObject> GetNonMAAudioSources()
|
|
{
|
|
var sources = FindObjectsOfType(typeof(AudioSource));
|
|
|
|
var audSources = new List<GameObject>();
|
|
foreach (var t in sources)
|
|
{
|
|
var src = (AudioSource)t;
|
|
|
|
var plController = src.GetComponent<PlaylistController>();
|
|
if (plController != null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var variation = src.GetComponent<SoundGroupVariation>();
|
|
if (variation != null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var dynVariation = src.GetComponent<DynamicGroupVariation>();
|
|
if (dynVariation != null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
audSources.Add(src.gameObject);
|
|
}
|
|
|
|
return audSources;
|
|
}
|
|
|
|
private void DeleteAudioSources()
|
|
{
|
|
Selection.objects = new Object[] { };
|
|
|
|
var sources = GetNonMAAudioSources();
|
|
|
|
var destroyed = 0;
|
|
foreach (var aud in sources)
|
|
{
|
|
DestroyImmediate(aud.GetComponent<AudioSource>());
|
|
destroyed++;
|
|
}
|
|
|
|
DTGUIHelper.ShowAlert(destroyed + " Audio Source(s) destroyed.");
|
|
_audioSources = 0;
|
|
}
|
|
}
|
|
} |