From a5e8a8db133d1959ea9ec6a66ac6a69997230d8d Mon Sep 17 00:00:00 2001 From: PHILIP WHITE Date: Fri, 26 Apr 2024 03:23:22 +0100 Subject: [PATCH] Update Dialogue System to Handle Voice Overs --- .../DialogueSystem/AC_PlayerDialogueInterpreter.cpp | 10 +++++++++- .../DialogueSystem/AC_PlayerDialogueInterpreter.h | 2 ++ .../EndlessVendetta/DialogueSystem/DialogueTextNode.h | 4 +++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.cpp b/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.cpp index 2a9c3b09..53d88cf3 100644 --- a/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.cpp @@ -4,7 +4,8 @@ #include "AC_PlayerDialogueInterpreter.h" #include "DialogueAddItemNode.h" -#include "EndlessVendetta/EndlessVendettaCharacter.h" +#include "Components/AudioComponent.h" +#include "Kismet/GameplayStatics.h" // Sets default values for this component's properties @@ -57,6 +58,9 @@ void UAC_PlayerDialogueInterpreter::StartDialogue(UDialogueTree* DialogueTree) if (!IsValid(CurrentTextNode)) return; CurrentCharacterSpeaking = *GetCharacterSpeakingFromEnum(CurrentTextNode->DialogueCharacterSpeaking); OnStartDialogue.Broadcast(CurrentTextNode); + if (IsValid(CurrentTextNode->DialogueVoiceOver)) + CurrentVoiceOverAudioComponent = UGameplayStatics::SpawnSound2D( + GetWorld(), CurrentTextNode->DialogueVoiceOver, 1.f, 1.f, 0.f, nullptr, false, false); if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController()) { @@ -72,6 +76,7 @@ void UAC_PlayerDialogueInterpreter::NextDialogue() if (IsValid(CurrentChoiceNode)) return; if (IsValid(CurrentTextNode)) { + CurrentVoiceOverAudioComponent->Stop(); if (CurrentTextNode->ChildrenNodes.Num() == 0) { EndDialogue(); @@ -137,6 +142,7 @@ void UAC_PlayerDialogueInterpreter::NextDialogue() void UAC_PlayerDialogueInterpreter::MakeChoiceDialogue(const int Choice) { if (!IsValid(CurrentChoiceNode)) return; + CurrentVoiceOverAudioComponent->Stop(); if (Cast(CurrentChoiceNode->ChildrenNodes[Choice])) { CurrentChoiceNode = Cast(CurrentChoiceNode->ChildrenNodes[Choice]); @@ -166,6 +172,8 @@ void UAC_PlayerDialogueInterpreter::EndDialogue() CurrentTextNode = nullptr; CurrentAddItemNode = nullptr; CurrentCharacterSpeaking = FDialogueCharacter(); + CurrentVoiceOverAudioComponent->Stop(); + CurrentVoiceOverAudioComponent = nullptr; if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController()) { diff --git a/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.h b/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.h index 76843f7f..fbe6cb04 100644 --- a/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.h +++ b/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/AC_PlayerDialogueInterpreter.h @@ -53,6 +53,8 @@ private: UPROPERTY() UDialogueAddItemNode* CurrentAddItemNode; FDialogueCharacter* GetCharacterSpeakingFromEnum(ECharacterSpeaking CharacterSpeakingEnum) const; + UPROPERTY() + UAudioComponent* CurrentVoiceOverAudioComponent; public: // Called every frame diff --git a/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/DialogueTextNode.h b/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/DialogueTextNode.h index 99d4bbef..97003a82 100644 --- a/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/DialogueTextNode.h +++ b/EndlessVendetta/Source/EndlessVendetta/DialogueSystem/DialogueTextNode.h @@ -29,6 +29,8 @@ public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Dialogue") ECharacterSpeaking DialogueCharacterSpeaking = ECharacterSpeaking::Character1; + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Dialogue") + USoundBase* DialogueVoiceOver; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Choice Requirement") TArray RequiredFlags; @@ -44,7 +46,7 @@ public: TArray LacksItemsByEnumID; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Choice Requirement") TArray LacksItemsByID; - + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Choice Requirement") FText RequirementPreText = FText::FromString("None");