#if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.
//////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2012 Audiokinetic Inc. / All Rights Reserved
//
//////////////////////////////////////////////////////////////////////
[UnityEngine.AddComponentMenu("Wwise/AkInitializer")]
[UnityEngine.DisallowMultipleComponent]
[UnityEngine.ExecuteInEditMode]
[UnityEngine.DefaultExecutionOrder(-100)]
/// @brief This script deals with initialization, and frame updates of the Wwise audio engine.
/// It is marked as \c DontDestroyOnLoad so it stays active for the life of the game,
/// not only one scene. Double-click the Initialization Settings entry, AkWwiseInitializationSettings,
/// to review and edit Wwise initialization settings.
/// \sa
/// - Initialize the Different Modules of the Sound Engine (Note: This is described in the Wwise SDK documentation.)
/// - AK::SoundEngine::Init() (Note: This is described in the Wwise SDK documentation.)
/// - AK::SoundEngine::Term() (Note: This is described in the Wwise SDK documentation.)
/// - AkCallbackManager
public class AkInitializer : UnityEngine.MonoBehaviour
{
private static AkInitializer ms_Instance;
public AkWwiseInitializationSettings InitializationSettings;
private void Awake()
{
if (ms_Instance)
{
DestroyImmediate(this);
return;
}
ms_Instance = this;
#if UNITY_EDITOR
if (!UnityEditor.EditorApplication.isPlaying)
return;
#endif
DontDestroyOnLoad(this);
}
private void OnEnable()
{
InitializationSettings = AkWwiseInitializationSettings.Instance;
if (ms_Instance == this)
AkSoundEngineController.Instance.Init(this);
}
private void OnDisable()
{
if (ms_Instance == this)
AkSoundEngineController.Instance.OnDisable();
}
private void OnDestroy()
{
if (ms_Instance == this)
ms_Instance = null;
}
private void OnApplicationPause(bool pauseStatus)
{
if (ms_Instance == this)
AkSoundEngineController.Instance.OnApplicationPause(pauseStatus);
}
private void OnApplicationFocus(bool focus)
{
if (ms_Instance == this)
AkSoundEngineController.Instance.OnApplicationFocus(focus);
}
private void OnApplicationQuit()
{
if (ms_Instance == this)
AkSoundEngineController.Instance.Terminate();
}
//Use LateUpdate instead of Update() to ensure all gameobjects positions, listener positions, environements, RTPC, etc are set before finishing the audio frame.
private void LateUpdate()
{
if (ms_Instance == this)
AkSoundEngineController.Instance.LateUpdate();
}
#region WwiseMigration
#if UNITY_EDITOR
#pragma warning disable 0414 // private field assigned but not used.
// previously serialized data that will be consumed by migration
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private string basePath = string.Empty;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private string language = string.Empty;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int defaultPoolSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int lowerPoolSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int streamingPoolSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private float memoryCutoffThreshold = 0f;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int monitorPoolSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int monitorQueuePoolSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int callbackManagerBufferSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private int spatialAudioPoolSize = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private uint maxSoundPropagationDepth = 0;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private AkDiffractionFlags diffractionFlags = AkDiffractionFlags.DefaultDiffractionFlags;
[UnityEngine.HideInInspector][UnityEngine.SerializeField] private bool engineLogging = false;
#pragma warning restore 0414 // private field assigned but not used.
private class Migration15Data
{
bool hasMigrated = false;
public void Migrate(AkInitializer akInitializer)
{
if (hasMigrated)
return;
var initializationSettings = akInitializer.InitializationSettings;
if (!initializationSettings)
{
initializationSettings = AkWwiseInitializationSettings.Instance;
if (!initializationSettings)
return;
}
initializationSettings.UserSettings.m_BasePath = akInitializer.basePath;
initializationSettings.UserSettings.m_StartupLanguage = akInitializer.language;
initializationSettings.AdvancedSettings.m_MonitorQueuePoolSize = (uint)akInitializer.monitorQueuePoolSize * 1024;
initializationSettings.CallbackManagerInitializationSettings.BufferSize = akInitializer.callbackManagerBufferSize * 1024;
initializationSettings.UserSettings.m_SpatialAudioSettings.m_MaxSoundPropagationDepth = akInitializer.maxSoundPropagationDepth;
initializationSettings.UserSettings.m_SpatialAudioSettings.m_DiffractionFlags = (AkCommonUserSettings.SpatialAudioSettings.DiffractionFlags)akInitializer.diffractionFlags;
initializationSettings.CallbackManagerInitializationSettings.IsLoggingEnabled = akInitializer.engineLogging;
UnityEditor.EditorUtility.SetDirty(initializationSettings);
UnityEditor.AssetDatabase.SaveAssets();
UnityEngine.Debug.Log("WwiseUnity: Converted from AkInitializer to AkWwiseInitializationSettings.");
hasMigrated = true;
}
}
private static Migration15Data migration15data;
public static void PreMigration15()
{
migration15data = new Migration15Data();
}
public void Migrate15()
{
UnityEngine.Debug.Log("WwiseUnity: AkInitializer.Migrate15 for " + gameObject.name);
if (migration15data != null)
migration15data.Migrate(this);
}
public static void PostMigration15()
{
migration15data = null;
}
#endif
#endregion
}
#endif // #if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.