Skip to content

Commit

Permalink
UAssetUserData support added to Dialogue Objects (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
ben-mkiv authored Jan 16, 2024
1 parent d31129e commit 2d48f06
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
48 changes: 48 additions & 0 deletions Source/DlgSystem/DlgDialogue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<UAssetUserData> 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<UAssetUserData> 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<UAssetUserData*>* UDlgDialogue::GetAssetUserDataArray() const
{
return &ToRawPtrTArrayUnsafe(AssetUserData);
}
// End AssetUserData interface
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Begin own functions
void UDlgDialogue::CreateGraph()
Expand Down
22 changes: 20 additions & 2 deletions Source/DlgSystem/DlgDialogue.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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<UAssetUserData> InUserDataClass) override;
virtual UAssetUserData* GetAssetUserDataOfClass(TSubclassOf<UAssetUserData> InUserDataClass) override;
virtual const TArray<UAssetUserData*>* 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;
Expand Down Expand Up @@ -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<TObjectPtr<UAssetUserData>> AssetUserData;
};

0 comments on commit 2d48f06

Please sign in to comment.