Aetheria/Assets/Wwise/API/Editor/WwiseWindows/AkWwiseProjectInfo.cs
2021-04-30 07:09:07 +01:00

131 lines
3.5 KiB
C#

#if UNITY_EDITOR
//////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014 Audiokinetic Inc. / All Rights Reserved
//
//////////////////////////////////////////////////////////////////////
using System.Runtime.CompilerServices;
using UnityEngine;
public static class AkWwiseProjectInfo
{
private const string DataFileName = "AkWwiseProjectData.asset";
private static string WwiseEditorDirectory = System.IO.Path.Combine("Wwise", "Editor");
private static string DataRelativeDirectory = System.IO.Path.Combine(WwiseEditorDirectory, "ProjectData");
private static string DataRelativePath = System.IO.Path.Combine(DataRelativeDirectory, DataFileName);
private static string DataAssetPath = System.IO.Path.Combine("Assets", DataRelativePath);
public static AkWwiseProjectData m_Data;
public static AkWwiseTreeWAAPIDataSource m_WaapiPickerData = new AkWwiseTreeWAAPIDataSource();
public static AkWwiseTreeProjectDataSource m_ProjectPickerData = new AkWwiseTreeProjectDataSource();
public enum DataSourceType
{
WwiseAuthoring,
FileSystem
}
public static AkWwiseTreeWAAPIDataSource WaapiPickerData
{
get
{
return m_WaapiPickerData;
}
}
public static AkWwiseTreeProjectDataSource ProjectPickerData
{
get
{
return m_ProjectPickerData;
}
}
public static AkWwiseTreeDataSource GetTreeData()
{
AkWwiseTreeDataSource treeData;
if (GetData().currentDataSource == DataSourceType.WwiseAuthoring)
{
treeData = WaapiPickerData;
}
else
{
treeData = ProjectPickerData;
}
return treeData;
}
private static bool WwiseFolderExists()
{
return System.IO.Directory.Exists(System.IO.Path.Combine(UnityEngine.Application.dataPath, "Wwise"));
}
public static AkWwiseProjectData GetData()
{
if (m_Data == null && WwiseFolderExists())
{
try
{
m_Data = UnityEditor.AssetDatabase.LoadAssetAtPath<AkWwiseProjectData>(DataAssetPath);
if (m_Data == null)
{
var dataAbsolutePath = System.IO.Path.Combine(UnityEngine.Application.dataPath, DataRelativePath);
var dataExists = System.IO.File.Exists(dataAbsolutePath);
if (!dataExists)
{
var dataAbsoluteDirectory = System.IO.Path.Combine(UnityEngine.Application.dataPath, DataRelativeDirectory);
if (!System.IO.Directory.Exists(dataAbsoluteDirectory))
System.IO.Directory.CreateDirectory(dataAbsoluteDirectory);
}
m_Data = UnityEngine.ScriptableObject.CreateInstance<AkWwiseProjectData>();
if (dataExists)
UnityEngine.Debug.LogWarning("WwiseUnity: Unable to load asset at <" + dataAbsolutePath + ">.");
else
{
#if UNITY_2019_3_OR_LATER
if (UnityEditor.EditorSettings.assetPipelineMode == UnityEditor.AssetPipelineMode.Version2)
{
UnityEditor.EditorApplication.delayCall += () => UnityEditor.AssetDatabase.CreateAsset(m_Data, DataAssetPath);
}
else
#else
{
UnityEditor.AssetDatabase.CreateAsset(m_Data, DataAssetPath);
}
#endif
}
}
}
catch (System.Exception e)
{
UnityEngine.Debug.LogError("WwiseUnity: Unable to load Wwise Data: " + e);
}
}
return m_Data;
}
public static bool Populate()
{
var bDirty = false;
if (AkUtilities.IsWwiseProjectAvailable)
{
bDirty = AkWwiseWWUBuilder.Populate();
bDirty |= AkWwiseXMLBuilder.Populate();
if (bDirty)
{
UnityEditor.EditorUtility.SetDirty(GetData());
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
}
}
return bDirty;
}
}
#endif