From 19acafd25b5284c91eeebc92602abfc3a2c2c660 Mon Sep 17 00:00:00 2001 From: Angel Pons Date: Sun, 26 Jan 2025 09:32:47 +0100 Subject: [PATCH] Implement dumping/generating for `AkAudioEvent` These can be used to play existing sounds in the game from mods. Signed-off-by: Angel Pons --- .../Source/AssetDumper/AssetDumper.Build.cs | 3 +- .../AkAudioEventAssetSerializer.cpp | 17 +++++++++++ .../AssetTypes/AkAudioEventAssetSerializer.h | 14 +++++++++ .../AssetGenerator/AssetGenerator.Build.cs | 3 +- .../AkAudioEventGenerator.cpp | 30 +++++++++++++++++++ .../AkAudioEventGenerator.h | 16 ++++++++++ 6 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 AssetDumper/Source/AssetDumper/Private/Toolkit/AssetTypes/AkAudioEventAssetSerializer.cpp create mode 100644 AssetDumper/Source/AssetDumper/Public/Toolkit/AssetTypes/AkAudioEventAssetSerializer.h create mode 100644 AssetGenerator/Source/AssetGenerator/Private/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.cpp create mode 100644 AssetGenerator/Source/AssetGenerator/Public/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.h diff --git a/AssetDumper/Source/AssetDumper/AssetDumper.Build.cs b/AssetDumper/Source/AssetDumper/AssetDumper.Build.cs index a927080..a1c77b8 100644 --- a/AssetDumper/Source/AssetDumper/AssetDumper.Build.cs +++ b/AssetDumper/Source/AssetDumper/AssetDumper.Build.cs @@ -33,7 +33,8 @@ public AssetDumper(ReadOnlyTargetRules Target) : base(Target) PrivateDependencyModuleNames.AddRange(new[] { "PhysicsCore", "RHI", - "MediaAssets" + "MediaAssets", + "WwiseFileHandler", "AkAudio" }); if (Target.bBuildEditor) { diff --git a/AssetDumper/Source/AssetDumper/Private/Toolkit/AssetTypes/AkAudioEventAssetSerializer.cpp b/AssetDumper/Source/AssetDumper/Private/Toolkit/AssetTypes/AkAudioEventAssetSerializer.cpp new file mode 100644 index 0000000..da2888c --- /dev/null +++ b/AssetDumper/Source/AssetDumper/Private/Toolkit/AssetTypes/AkAudioEventAssetSerializer.cpp @@ -0,0 +1,17 @@ +#include "Toolkit/AssetTypes/AkAudioEventAssetSerializer.h" +#include "Toolkit/AssetDumping/SerializationContext.h" +#include "Toolkit/AssetDumping/AssetTypeSerializerMacros.h" +#include "Toolkit/ObjectHierarchySerializer.h" +#include "AkAudioEvent.h" + +void UAkAudioEventAssetSerializer::SerializeAsset(TSharedRef Context) const +{ + BEGIN_ASSET_SERIALIZATION(UAkAudioEvent) + SERIALIZE_ASSET_OBJECT + END_ASSET_SERIALIZATION +} + +FTopLevelAssetPath UAkAudioEventAssetSerializer::GetAssetClass() const +{ + return FTopLevelAssetPath(UAkAudioEvent::StaticClass()); +} diff --git a/AssetDumper/Source/AssetDumper/Public/Toolkit/AssetTypes/AkAudioEventAssetSerializer.h b/AssetDumper/Source/AssetDumper/Public/Toolkit/AssetTypes/AkAudioEventAssetSerializer.h new file mode 100644 index 0000000..0b3623a --- /dev/null +++ b/AssetDumper/Source/AssetDumper/Public/Toolkit/AssetTypes/AkAudioEventAssetSerializer.h @@ -0,0 +1,14 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Toolkit/AssetDumping/AssetTypeSerializer.h" +#include "AkAudioEventAssetSerializer.generated.h" + +UCLASS(MinimalAPI) +class UAkAudioEventAssetSerializer : public UAssetTypeSerializer { + GENERATED_BODY() +public: + virtual void SerializeAsset(TSharedRef Context) const override; + + virtual FTopLevelAssetPath GetAssetClass() const override; +}; diff --git a/AssetGenerator/Source/AssetGenerator/AssetGenerator.Build.cs b/AssetGenerator/Source/AssetGenerator/AssetGenerator.Build.cs index 7edb744..a45b9b1 100644 --- a/AssetGenerator/Source/AssetGenerator/AssetGenerator.Build.cs +++ b/AssetGenerator/Source/AssetGenerator/AssetGenerator.Build.cs @@ -39,7 +39,8 @@ public AssetGenerator(ReadOnlyTargetRules Target) : base(Target) "PhysicsCore", "MediaAssets", "AudioEditor", - "GraphEditor" + "GraphEditor", + "WwiseFileHandler", "AkAudio" }); PrivateDependencyModuleNames.Add("DeveloperSettings"); diff --git a/AssetGenerator/Source/AssetGenerator/Private/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.cpp b/AssetGenerator/Source/AssetGenerator/Private/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.cpp new file mode 100644 index 0000000..f6de680 --- /dev/null +++ b/AssetGenerator/Source/AssetGenerator/Private/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.cpp @@ -0,0 +1,30 @@ +#include "Toolkit/AssetTypeGenerator/AkAudioEventGenerator.h" +#include "AkAudioEvent.h" +#include "Toolkit/PropertySerializer.h" +#include "Toolkit/AssetDumping/AssetTypeSerializerMacros.h" + +void UAkAudioEventGenerator::PostInitializeAssetGenerator() +{ + UPropertySerializer* Serializer = GetPropertySerializer(); + + //transient and changed every time material parameter collection is changed + //DISABLE_SERIALIZATION(UMaterialParameterCollection, StateId); +} + +UClass* UAkAudioEventGenerator::GetAssetObjectClass() const +{ + return UAkAudioEvent::StaticClass(); +} + +void UAkAudioEventGenerator::PopulateSimpleAssetWithData(UObject* Asset) +{ + Super::PopulateSimpleAssetWithData(Asset); + UAkAudioEvent* AkAudioEvent = CastChecked(Asset); + + AkAudioEvent->PostLoad(); +} + +FTopLevelAssetPath UAkAudioEventGenerator::GetAssetClass() +{ + return FTopLevelAssetPath(UAkAudioEvent::StaticClass()); +} diff --git a/AssetGenerator/Source/AssetGenerator/Public/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.h b/AssetGenerator/Source/AssetGenerator/Public/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.h new file mode 100644 index 0000000..5c1e17f --- /dev/null +++ b/AssetGenerator/Source/AssetGenerator/Public/Toolkit/AssetTypeGenerator/AkAudioEventGenerator.h @@ -0,0 +1,16 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Toolkit/AssetTypeGenerator/SimpleAssetGenerator.h" +#include "AkAudioEventGenerator.generated.h" + +UCLASS(MinimalAPI) +class UAkAudioEventGenerator : public USimpleAssetGenerator { + GENERATED_BODY() +protected: + virtual void PostInitializeAssetGenerator() override; + virtual UClass* GetAssetObjectClass() const override; + virtual void PopulateSimpleAssetWithData(UObject* Asset) override; +public: + virtual FTopLevelAssetPath GetAssetClass() override; +};