Pawn/Pawn_Unreal/Plugins/Wwise/Source/AudiokineticTools/Private/AkAudioBankGenerationHelpers.cpp
2023-08-06 19:03:16 +02:00

148 lines
5.0 KiB
C++

/*******************************************************************************
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 Unreal(R) Engine End User
License Agreement at https://www.unrealengine.com/en-US/eula/unreal
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) 2023 Audiokinetic Inc.
*******************************************************************************/
/*------------------------------------------------------------------------------------
AkAudioBankGenerationHelpers.cpp: Wwise Helpers to generate banks from the editor and when cooking.
------------------------------------------------------------------------------------*/
#include "AkAudioBankGenerationHelpers.h"
#include "AkAudioDevice.h"
#include "AkSettings.h"
#include "AkSettingsPerUser.h"
#include "AkUnrealHelper.h"
#include "IAudiokineticTools.h"
#include "AssetManagement/AkAssetDatabase.h"
#include "Editor/UnrealEd/Public/ObjectTools.h"
#if UE_5_0_OR_LATER
#include "HAL/PlatformFileManager.h"
#else
#include "HAL/PlatformFilemanager.h"
#endif
#include "MainFrame/Public/Interfaces/IMainFrameModule.h"
#include "Misc/Paths.h"
#include "Misc/ScopedSlowTask.h"
#include "Slate/Public/Framework/Application/SlateApplication.h"
#include "SlateCore/Public/Widgets/SWindow.h"
#include "AssetManagement/WwiseProjectInfo.h"
#include "UI/SGenerateSoundBanks.h"
#define LOCTEXT_NAMESPACE "AkAudio"
namespace AkAudioBankGenerationHelper
{
FString GetWwiseConsoleApplicationPath()
{
const UAkSettingsPerUser* AkSettingsPerUser = GetDefault<UAkSettingsPerUser>();
FString ApplicationToRun;
ApplicationToRun.Empty();
if (AkSettingsPerUser)
{
#if PLATFORM_WINDOWS
ApplicationToRun = AkSettingsPerUser->WwiseWindowsInstallationPath.Path;
#else
ApplicationToRun = AkSettingsPerUser->WwiseMacInstallationPath.FilePath;
#endif
if (FPaths::IsRelative(ApplicationToRun))
{
ApplicationToRun = FPaths::ConvertRelativePathToFull(AkUnrealHelper::GetProjectDirectory(), ApplicationToRun);
}
if (!(ApplicationToRun.EndsWith(TEXT("/")) || ApplicationToRun.EndsWith(TEXT("\\"))))
{
ApplicationToRun += TEXT("/");
}
#if PLATFORM_WINDOWS
if (FPaths::FileExists(ApplicationToRun + TEXT("Authoring/x64/Release/bin/WwiseConsole.exe")))
{
ApplicationToRun += TEXT("Authoring/x64/Release/bin/WwiseConsole.exe");
}
else
{
ApplicationToRun += TEXT("Authoring/Win32/Release/bin/WwiseConsole.exe");
}
ApplicationToRun.ReplaceInline(TEXT("/"), TEXT("\\"));
#elif PLATFORM_MAC
ApplicationToRun += TEXT("Contents/Tools/WwiseConsole.sh");
ApplicationToRun = TEXT("\"") + ApplicationToRun + TEXT("\"");
#endif
}
return ApplicationToRun;
}
void CreateGenerateSoundDataWindow(bool ProjectSave)
{
if (!FApp::CanEverRender())
{
return;
}
if (AkAssetDatabase::Get().CheckIfLoadingAssets())
{
return;
}
TSharedRef<SWindow> WidgetWindow = SNew(SWindow)
.Title(LOCTEXT("AkAudioGenerateSoundData", "Generate SoundBanks"))
.ClientSize(FVector2D(600.f, 332.f))
.SupportsMaximize(false).SupportsMinimize(false)
.SizingRule(ESizingRule::FixedSize)
.FocusWhenFirstShown(true);
TSharedRef<SGenerateSoundBanks> WindowContent = SNew(SGenerateSoundBanks);
if (!WindowContent->ShouldDisplayWindow())
{
return;
}
// Add our SGenerateSoundBanks to the window
WidgetWindow->SetContent(WindowContent);
// Set focus to our SGenerateSoundBanks widget, so our keyboard keys work right away
WidgetWindow->SetWidgetToFocusOnActivate(WindowContent);
// This creates a windows that blocks the rest of the UI. You can only interact with the "Generate SoundBanks" window.
// If you choose to use this, comment the rest of the function.
//GEditor->EditorAddModalWindow(WidgetWindow);
// This creates a window that still allows you to interact with the rest of the editor. If there is an attempt to delete
// a UAkAudioBank (from the content browser) while this window is opened, the editor will generate a (cryptic) error message
TSharedPtr<SWindow> ParentWindow;
if (FModuleManager::Get().IsModuleLoaded("MainFrame"))
{
IMainFrameModule& MainFrame = FModuleManager::GetModuleChecked<IMainFrameModule>("MainFrame");
ParentWindow = MainFrame.GetParentWindow();
}
if (ParentWindow.IsValid())
{
// Parent the window to the main frame
FSlateApplication::Get().AddModalWindow(WidgetWindow, ParentWindow.ToSharedRef());
}
else
{
// Spawn new window
FSlateApplication::Get().AddWindow(WidgetWindow);
}
}
}
#undef LOCTEXT_NAMESPACE