123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #pragma once
- #include "AkAudioDevice.h"
- #include "WwiseUnrealDefines.h"
- class IAkUserEventCallbackPackage
- {
- public:
-
- uint32 uUserFlags;
- uint32 KeyHash;
- bool HasExternalSources = false;
- IAkUserEventCallbackPackage()
- : uUserFlags(0)
- {}
- IAkUserEventCallbackPackage(uint32 in_Flags, uint32 in_Hash, bool in_HasExternalSources)
- : uUserFlags(in_Flags)
- , KeyHash(in_Hash)
- , HasExternalSources(in_HasExternalSources)
- {}
- virtual ~IAkUserEventCallbackPackage() {}
- virtual void HandleAction(AkCallbackType in_eType, AkCallbackInfo* in_pCallbackInfo) = 0;
- virtual void CancelCallback() {};
- };
- class FAkFunctionPtrEventCallbackPackage : public IAkUserEventCallbackPackage
- {
- public:
- FAkFunctionPtrEventCallbackPackage(AkCallbackFunc CbFunc, void* Cookie, uint32 Flags, uint32 in_Hash, bool in_HasExternalSources)
- : IAkUserEventCallbackPackage(Flags, in_Hash, in_HasExternalSources)
- , pfnUserCallback(CbFunc)
- , pUserCookie(Cookie)
- {}
- virtual void HandleAction(AkCallbackType in_eType, AkCallbackInfo* in_pCallbackInfo) override;
- virtual void CancelCallback() override;
- private:
-
- AkCallbackFunc pfnUserCallback;
-
- void* pUserCookie;
- };
- class FAkBlueprintDelegateEventCallbackPackage : public IAkUserEventCallbackPackage
- {
- public:
- FAkBlueprintDelegateEventCallbackPackage(FOnAkPostEventCallback PostEventCallback, uint32 Flags, uint32 in_Hash, bool in_HasExternalSources)
- : IAkUserEventCallbackPackage(Flags, in_Hash, in_HasExternalSources)
- , BlueprintCallback(PostEventCallback)
- {}
- virtual void HandleAction(AkCallbackType in_eType, AkCallbackInfo* in_pCallbackInfo) override;
- virtual void CancelCallback() override;
- private:
- FOnAkPostEventCallback BlueprintCallback;
- };
- class FAkLatentActionEventCallbackPackage : public IAkUserEventCallbackPackage
- {
- public:
- FAkLatentActionEventCallbackPackage(FWaitEndOfEventAction* LatentAction, uint32 in_Hash, bool in_HasExternalSources)
- : IAkUserEventCallbackPackage(AK_EndOfEvent, in_Hash, in_HasExternalSources)
- , EndOfEventLatentAction(LatentAction)
- {
- LatentActionValidityToken = MakeShared<FPendingLatentActionValidityToken, ESPMode::ThreadSafe>();
- EndOfEventLatentAction->ValidityToken = LatentActionValidityToken;
- }
- virtual void HandleAction(AkCallbackType in_eType, AkCallbackInfo* in_pCallbackInfo) override;
- private:
- TSharedPtr<FPendingLatentActionValidityToken, ESPMode::ThreadSafe> LatentActionValidityToken;
- FWaitEndOfEventAction* EndOfEventLatentAction;
- };
- class FAkComponentCallbackManager
- {
- public:
- static FAkComponentCallbackManager* GetInstance();
- static FAkComponentCallbackManager* Instance;
-
- static void AkComponentCallback(AkCallbackType in_eType, AkCallbackInfo* in_pCallbackInfo);
- FAkComponentCallbackManager();
- ~FAkComponentCallbackManager();
- IAkUserEventCallbackPackage* CreateCallbackPackage(AkCallbackFunc in_cbFunc, void* in_Cookie, uint32 in_Flags, AkGameObjectID in_gameObjID, bool HasExternalSources);
- IAkUserEventCallbackPackage* CreateCallbackPackage(FOnAkPostEventCallback BlueprintCallback, uint32 in_Flags, AkGameObjectID in_gameObjID, bool HasExternalSources);
- IAkUserEventCallbackPackage* CreateCallbackPackage(FWaitEndOfEventAction* LatentAction, AkGameObjectID in_gameObjID, bool HasExternalSources);
- void RemoveCallbackPackage(IAkUserEventCallbackPackage* in_Package, AkGameObjectID in_gameObjID);
- void CancelEventCallback(void* in_Cookie);
- void CancelEventCallback(const FOnAkPostEventCallback& in_Delegate);
- void RegisterGameObject(AkGameObjectID in_gameObjID);
- void UnregisterGameObject(AkGameObjectID in_gameObjID);
- bool HasActiveEvents(AkGameObjectID in_gameObjID);
- private:
- typedef TSet<IAkUserEventCallbackPackage*> PackageSet;
- void RemovePackageFromSet(PackageSet* in_pPackageSet, IAkUserEventCallbackPackage* in_pPackage, AkGameObjectID in_gameObjID);
- FCriticalSection CriticalSection;
- typedef WwiseUnrealHelper::AkGameObjectIdKeyFuncs<PackageSet, false> PackageSetGameObjectIDKeyFuncs;
- TMap<AkGameObjectID, PackageSet, FDefaultSetAllocator, PackageSetGameObjectIDKeyFuncs> GameObjectToPackagesMap;
-
- uint32 inline GetKeyHash(void* Key);
- uint32 inline GetKeyHash(const FOnAkPostEventCallback& Key);
- void CancelKeyHash(uint32 HashToCancel);
- TMultiMap<uint32, IAkUserEventCallbackPackage*> UserCookieHashToPackageMap;
- };
|