diff --git a/Source/DlgSystem/DlgDialogue.cpp b/Source/DlgSystem/DlgDialogue.cpp index 723acca..3b6a20f 100644 --- a/Source/DlgSystem/DlgDialogue.cpp +++ b/Source/DlgSystem/DlgDialogue.cpp @@ -317,6 +317,54 @@ void UDlgDialogue::AddReferencedObjects(UObject* InThis, FReferenceCollector& Co // End UObject interface //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Begin AssetUserData interface +void UDlgDialogue::AddAssetUserData(UAssetUserData* InUserData) +{ + if (InUserData != nullptr) + { + UAssetUserData* ExistingData = GetAssetUserDataOfClass(InUserData->GetClass()); + if (ExistingData != nullptr) + { + AssetUserData.Remove(ExistingData); + } + AssetUserData.Add(InUserData); + } +} + +UAssetUserData* UDlgDialogue::GetAssetUserDataOfClass(TSubclassOf InUserDataClass) +{ + for (int32 DataIdx = 0; DataIdx < AssetUserData.Num(); DataIdx++) + { + UAssetUserData* Datum = AssetUserData[DataIdx]; + if (Datum != nullptr && Datum->IsA(InUserDataClass)) + { + return Datum; + } + } + return nullptr; +} + +void UDlgDialogue::RemoveUserDataOfClass(TSubclassOf InUserDataClass) +{ + for (int32 DataIdx = 0; DataIdx < AssetUserData.Num(); DataIdx++) + { + UAssetUserData* Datum = AssetUserData[DataIdx]; + if (Datum != nullptr && Datum->IsA(InUserDataClass)) + { + AssetUserData.RemoveAt(DataIdx); + return; + } + } +} + +const TArray* UDlgDialogue::GetAssetUserDataArray() const +{ + return &ToRawPtrTArrayUnsafe(AssetUserData); +} +// End AssetUserData interface +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Begin own functions void UDlgDialogue::CreateGraph() diff --git a/Source/DlgSystem/DlgDialogue.h b/Source/DlgSystem/DlgDialogue.h index 9cd62c8..3dbaca5 100644 --- a/Source/DlgSystem/DlgDialogue.h +++ b/Source/DlgSystem/DlgDialogue.h @@ -72,7 +72,7 @@ struct DLGSYSTEM_API FDlgParticipantClass * Dialogues have a custom blueprint editor */ UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true")) -class DLGSYSTEM_API UDlgDialogue : public UObject +class DLGSYSTEM_API UDlgDialogue : public UObject, public IInterface_AssetUserData { GENERATED_BODY() public: @@ -160,12 +160,24 @@ class DLGSYSTEM_API UDlgDialogue : public UObject * @param Collector FReferenceCollector objects to be used to collect references. */ static void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector); +#endif // End UObject Interface. // - // Begin own functions + // Begin IInterface_AssetUserData Interface + // + virtual void AddAssetUserData(UAssetUserData* InUserData) override; + virtual void RemoveUserDataOfClass(TSubclassOf InUserDataClass) override; + virtual UAssetUserData* GetAssetUserDataOfClass(TSubclassOf InUserDataClass) override; + virtual const TArray* GetAssetUserDataArray() const override; + // + // End IInterface_AssetUserData Interface // + // + // Begin own functions + // +#if WITH_EDITOR // Broadcasts whenever a property of this dialogue changes. DECLARE_EVENT_OneParam(UDlgDialogue, FDialoguePropertyChanged, const FPropertyChangedEvent& /* PropertyChangedEvent */); FDialoguePropertyChanged OnDialoguePropertyChanged; @@ -767,4 +779,10 @@ class DLGSYSTEM_API UDlgDialogue : public UObject // Flag that indicates that This Was Loaded was called bool bWasLoaded = false; + + +public: + /** Array of user data stored with the asset (for IInterface_AssetUserData implementation) */ + UPROPERTY(EditAnywhere, AdvancedDisplay, Instanced, Category = "Asset User Data") + TArray> AssetUserData; };