ccl4/blueberryPeak/Assets/Wwise/API/Runtime/Handwritten/Common/AkBasePathGetter.cs
AgentSchmisch 9144907a10 ANGST
2025-06-12 18:45:34 +02:00

279 lines
9.6 KiB
C#

#if !(UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2025 Audiokinetic Inc.
*******************************************************************************/
/// <summary>
/// This class is responsible for determining the path where sound banks are located. When using custom platforms, this
/// class needs to be extended.
/// </summary>
public partial class AkBasePathGetter
{
/// <summary>
/// User hook called to retrieve the custom platform name used to determine the base path. Do not modify platformName
/// to use default platform names.
/// </summary>
/// <param name="platformName">The custom platform name. Leave unaffected if the default location is acceptable.</param>
public delegate void CustomPlatformNameGetter(ref string platformName);
public static CustomPlatformNameGetter GetCustomPlatformName;
/// <summary>
/// Determines the platform name which is also the sub-folder within the base path where sound banks are located for
/// this platform.
/// </summary>
/// <returns>The platform name.</returns>
public static string GetPlatformName()
{
var platformSubDir = string.Empty;
GetCustomPlatformName?.Invoke(ref platformSubDir);
if (!string.IsNullOrEmpty(platformSubDir))
return platformSubDir;
return DefaultPlatformName;
}
}
public partial class AkBasePathGetter
{
public static readonly string DefaultBasePath = System.IO.Path.Combine("Audio", "GeneratedSoundBanks");
private const string DecodedBankFolder = "DecodedBanks";
private static bool LogWarnings_Internal = true;
public static bool LogWarnings
{
get { return LogWarnings_Internal; }
set { LogWarnings_Internal = value; }
}
/// <summary>
/// Returns the absolute path to the platform specific sound banks.
/// </summary>
/// <returns>The absolute path to the platform specific sound banks.</returns>
public static string GetPlatformBasePath()
{
var platformName = GetPlatformName();
#if UNITY_EDITOR
var platformBasePathEditor = GetPlatformBasePathEditor(platformName);
if (!string.IsNullOrEmpty(platformBasePathEditor))
return platformBasePathEditor;
var fullBasePath = AkWwiseEditorSettings.Instance.SoundbankPath;
#else
var fullBasePath = string.Empty;
#endif
if (string.IsNullOrEmpty(fullBasePath))
fullBasePath = AkWwiseInitializationSettings.ActivePlatformSettings.SoundbankPath;
AdjustFullBasePathForPlatform(ref fullBasePath);
// Combine base path with platform sub-folder
var platformBasePath = System.IO.Path.Combine(fullBasePath, platformName);
AkUtilities.FixSlashes(ref platformBasePath);
return platformBasePath;
}
#if UNITY_EDITOR
public static bool GetSoundBankPaths(string platformName, out string sourcePlatformBasePath, out string destinationPlatformBasePath)
{
sourcePlatformBasePath = GetPlatformBasePathEditor(platformName);
if (string.IsNullOrEmpty(sourcePlatformBasePath))
{
if (LogWarnings)
UnityEngine.Debug.LogErrorFormat("WwiseUnity: Could not find source folder for <{0}> platform. Did you remember to generate your banks?", platformName);
destinationPlatformBasePath = string.Empty;
return false;
}
destinationPlatformBasePath = System.IO.Path.Combine(GetFullSoundBankPathEditor(), platformName);
if (string.IsNullOrEmpty(destinationPlatformBasePath))
{
if (LogWarnings)
UnityEngine.Debug.LogErrorFormat("WwiseUnity: Could not find destination folder for <{0}> platform", platformName);
return false;
}
return true;
}
/// <summary>
/// Returns the absolute path to the folder above the platform specific sound banks sub-folders.
/// </summary>
/// <returns>The absolute sound bank base path.</returns>
public static string GetFullSoundBankPathEditor()
{
string fullBasePath = System.IO.Path.Combine(UnityEngine.Application.streamingAssetsPath, AkWwiseEditorSettings.Instance.SoundbankPath);
AkUtilities.FixSlashes(ref fullBasePath);
return fullBasePath;
}
public static string GetWwiseRootOutputPath(string wwiseAbsolutePath = "")
{
string wwiseRootOuputPath = AkUtilities.GetRootOutputPath(wwiseAbsolutePath == "" ? AkWwiseEditorSettings.WwiseProjectAbsolutePath : wwiseAbsolutePath);
#if UNITY_EDITOR_OSX
wwiseRootOuputPath = AkUtilities.ParseOsxPathFromWinePath(wwiseRootOuputPath);
#endif
if (System.IO.Path.IsPathRooted(wwiseRootOuputPath))
{
return wwiseRootOuputPath;
}
var combinedPath = System.IO.Path.Combine(GetWwiseProjectDirectory(wwiseAbsolutePath), wwiseRootOuputPath);
AkUtilities.FixSlashes(ref combinedPath);
return combinedPath;
}
public static string GetWwiseProjectPath()
{
var Settings = AkWwiseEditorSettings.Instance;
return AkUtilities.GetFullPath(UnityEngine.Application.dataPath, Settings.WwiseProjectPath);
}
public static string GetWwiseProjectDirectory(string wwiseAbsolutePath = "")
{
var projectPath= AkUtilities.GetFullPath(UnityEngine.Application.dataPath, wwiseAbsolutePath == "" ? AkWwiseEditorSettings.Instance.WwiseProjectPath : wwiseAbsolutePath);
return System.IO.Path.GetDirectoryName(projectPath);
}
public static string GetDefaultGeneratedSoundbanksPath()
{
return System.IO.Path.Combine(GetWwiseProjectPath(), "GeneratedSoundBanks");
}
/// <summary>
/// Determines the platform base path for use within the Editor.
/// </summary>
/// <param name="platformName">The platform name.</param>
/// <returns>The full path to the sound banks for use within the Editor.</returns>
private static string GetPlatformBasePathEditor(string platformName)
{
var WwiseProjectFullPath = GetWwiseProjectPath();
var SoundBankDest = AkUtilities.GetWwiseSoundBankDestinationFolder(platformName);
try
{
if (System.IO.Path.GetPathRoot(SoundBankDest) == "")
{
// Path is relative, make it full
SoundBankDest = AkUtilities.GetFullPath(System.IO.Path.GetDirectoryName(WwiseProjectFullPath), SoundBankDest);
}
}
catch
{
SoundBankDest = string.Empty;
}
if (LogWarnings)
{
if (string.IsNullOrEmpty(SoundBankDest))
{
UnityEngine.Debug.LogWarning("WwiseUnity: The platform SoundBank subfolder within the Wwise project could not be found.");
return null;
}
try
{
// Verify if there are banks in there
var di = new System.IO.DirectoryInfo(SoundBankDest);
var foundBanks = di.GetFiles("*.bnk", System.IO.SearchOption.AllDirectories);
if (foundBanks.Length == 0)
{
return null;
}
if (!SoundBankDest.Contains(platformName))
{
if (LogWarnings)
UnityEngine.Debug.LogWarning("WwiseUnity: The platform SoundBank subfolder does not match your platform name. You will need to create a custom platform name getter for your game. See section \"Using Wwise Custom Platforms in Unity\" of the Wwise Unity integration documentation for more information");
}
return SoundBankDest;
}
catch
{
return null;
}
}
else
{
return SoundBankDest;
}
}
#endif
private static AkBasePathGetter Instance;
public static AkBasePathGetter Get()
{
if (Instance == null)
{
Instance = new AkBasePathGetter();
Instance.EvaluateGamePaths();
}
return Instance;
}
public void EvaluateGamePaths()
{
string tempPersistentDataPath = GetPersistentDataPath();
PersistentDataPath = tempPersistentDataPath;
var persistentDataSubfolder = AkWwiseInitializationSettings.ActivePlatformSettings.SoundBankPersistentDataPath;
string tempSoundBankBasePath = null;
if (!string.IsNullOrEmpty(tempPersistentDataPath) && !string.IsNullOrEmpty(persistentDataSubfolder))
{
tempSoundBankBasePath = System.IO.Path.GetFullPath(System.IO.Path.Combine(tempPersistentDataPath, persistentDataSubfolder));
if (LogWarnings)
UnityEngine.Debug.LogFormat("WwiseUnity: Using persistentDataPath. SoundBanks base path set to <{0}>.", tempSoundBankBasePath);
}
else
{
tempSoundBankBasePath = GetPlatformBasePath();
#if !AK_WWISE_ADDRESSABLES //Don't log this if we're using addressables
if (string.IsNullOrEmpty(tempSoundBankBasePath) || !InitBankExists(tempSoundBankBasePath))
{
if (LogWarnings)
{
#if UNITY_EDITOR
var format = "WwiseUnity: Could not locate the SoundBanks in {0}. Did you make sure to generate them?";
#else
var format = "WwiseUnity: Could not locate the SoundBanks in {0}. Did you make sure to copy them to the StreamingAssets folder?";
#endif
UnityEngine.Debug.LogErrorFormat(format, tempSoundBankBasePath);
}
}
#endif
}
SoundBankBasePath = tempSoundBankBasePath;
DecodedBankFullPath = GetDecodedBankPath();
}
public string SoundBankBasePath { get; private set; }
public string PersistentDataPath { get; private set; }
public string DecodedBankFullPath { get; private set; }
}
#endif // #if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.