From 2044b0e5fc1ae71ba98f2ae8a49d805c18ba3fab Mon Sep 17 00:00:00 2001 From: Robin Alonzo Date: Sat, 14 Oct 2023 23:08:39 +0200 Subject: [PATCH] Test for a narration system --- .../Test/Narration/BP_DialogueTest.uasset | 3 ++ .../Test/Narration/W_TestBubble.uasset | 3 ++ Pawn_Unreal/Source/Pawn/Pawn.Build.cs | 3 +- .../Pawn/Public/Narration/PwnDialogue.cpp | 36 +++++++++++++++++++ .../Pawn/Public/Narration/PwnDialogue.h | 30 ++++++++++++++++ .../Public/Narration/PwnDialogueBubble.cpp | 8 +++++ .../Pawn/Public/Narration/PwnDialogueBubble.h | 13 +++++++ .../Public/Narration/UPwnNarrationLibrary.cpp | 12 +++++++ .../Public/Narration/UPwnNarrationLibrary.h | 16 +++++++++ 9 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 Pawn_Unreal/Content/Systems/Test/Narration/BP_DialogueTest.uasset create mode 100644 Pawn_Unreal/Content/Systems/Test/Narration/W_TestBubble.uasset create mode 100644 Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.cpp create mode 100644 Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.h create mode 100644 Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.cpp create mode 100644 Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.h create mode 100644 Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.cpp create mode 100644 Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.h diff --git a/Pawn_Unreal/Content/Systems/Test/Narration/BP_DialogueTest.uasset b/Pawn_Unreal/Content/Systems/Test/Narration/BP_DialogueTest.uasset new file mode 100644 index 0000000..2ee7cf6 --- /dev/null +++ b/Pawn_Unreal/Content/Systems/Test/Narration/BP_DialogueTest.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f8f1d06d2e71711094678462913ed5be9cbc7b2b2c5e6f4463075065b354655 +size 43858 diff --git a/Pawn_Unreal/Content/Systems/Test/Narration/W_TestBubble.uasset b/Pawn_Unreal/Content/Systems/Test/Narration/W_TestBubble.uasset new file mode 100644 index 0000000..7999571 --- /dev/null +++ b/Pawn_Unreal/Content/Systems/Test/Narration/W_TestBubble.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f818686384a9f4cf0aac6b2f2d1d57ac291f5f62379c9359d0a40d1181f28f10 +size 23008 diff --git a/Pawn_Unreal/Source/Pawn/Pawn.Build.cs b/Pawn_Unreal/Source/Pawn/Pawn.Build.cs index fa05fe6..0ece1b3 100644 --- a/Pawn_Unreal/Source/Pawn/Pawn.Build.cs +++ b/Pawn_Unreal/Source/Pawn/Pawn.Build.cs @@ -10,7 +10,8 @@ public class Pawn : ModuleRules { "Engine", "InputCore", "Slate", - "SlateCore" + "SlateCore", + "UMG", }); PrivateDependencyModuleNames.AddRange(new string[] { }); diff --git a/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.cpp b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.cpp new file mode 100644 index 0000000..6eedb57 --- /dev/null +++ b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.cpp @@ -0,0 +1,36 @@ +#include "PwnDialogue.h" + +#include "PwnDialogueBubble.h" +#include "UPwnNarrationLibrary.h" +#include "Blueprint/UserWidget.h" +#include "GameFramework/GameSession.h" +#include "Kismet/GameplayStatics.h" + + + + +UPwnDialogue* UPwnDialogue::Dialogue(const UObject* WorldContextObject, UObject* Actor, const FText& Text) +{ + UPwnDialogue* Dialogue = NewObject(); + Dialogue->Actor = Actor; + Dialogue->Text = &Text; + Dialogue->WorldContext = WorldContextObject; + return Dialogue; +} + +void UPwnDialogue::Activate() +{ + auto playerController = UGameplayStatics::GetPlayerController(WorldContext, 0); + UPwnDialogueBubble* bubble = Cast(CreateWidget(playerController, UPwnNarrationLibrary::BubbleWidgetClass)); + if(!bubble) + { + UE_LOG(LogTemp, Error, TEXT("Failed creating bubble widget")); + } + + UE_LOG(LogTemp, Display, TEXT("Tout va bien")); + + bubble->Init(Actor, *Text); + + //Appeler ça quand on veut passer au dialogue suivant + Next.Broadcast(); +} diff --git a/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.h b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.h new file mode 100644 index 0000000..779072a --- /dev/null +++ b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogue.h @@ -0,0 +1,30 @@ +#pragma once + +#include "Kismet/BlueprintAsyncActionBase.h" + +#include "PwnDialogue.generated.h" + +class UPwnDialogueBubble; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FPwnDialogueNext); + +UCLASS() +class PAWN_API UPwnDialogue : public UBlueprintAsyncActionBase +{ + GENERATED_BODY() +public: + UPROPERTY(BlueprintAssignable) + FPwnDialogueNext Next; + +private: + UObject* Actor; + const FText* Text; + const UObject* WorldContext; + +public: + + UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "Narration") + static UPwnDialogue* Dialogue(const UObject* WorldContextObject, UObject* Actor, const FText& Text); + + virtual void Activate() override; +}; diff --git a/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.cpp b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.cpp new file mode 100644 index 0000000..1aba8f2 --- /dev/null +++ b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.cpp @@ -0,0 +1,8 @@ +#include "PwnDialogueBubble.h" + +#include "Logging/StructuredLog.h" + +void UPwnDialogueBubble::Init(const UObject* Actor, const FText& Text) +{ + UE_LOGFMT(LogTemp, Display, "Init bubble with text: {0}", *Text.ToString()); +} diff --git a/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.h b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.h new file mode 100644 index 0000000..9740749 --- /dev/null +++ b/Pawn_Unreal/Source/Pawn/Public/Narration/PwnDialogueBubble.h @@ -0,0 +1,13 @@ +#pragma once +#include "Blueprint/UserWidget.h" +#include "PwnDialogueBubble.generated.h" + +UCLASS() +class PAWN_API UPwnDialogueBubble : public UUserWidget +{ + GENERATED_BODY() +public: + + void Init(const UObject* Actor, const FText& Text); + +}; diff --git a/Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.cpp b/Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.cpp new file mode 100644 index 0000000..2015206 --- /dev/null +++ b/Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.cpp @@ -0,0 +1,12 @@ +#include "UPwnNarrationLibrary.h" + +#include "PwnDialogue.h" + +class UPwnDialogueBubble; + +TSubclassOf UPwnNarrationLibrary::BubbleWidgetClass; + +void UPwnNarrationLibrary::SetDialogueUIWidget(TSubclassOf _Widget) +{ + UPwnNarrationLibrary::BubbleWidgetClass = _Widget; +} diff --git a/Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.h b/Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.h new file mode 100644 index 0000000..6d8aff2 --- /dev/null +++ b/Pawn_Unreal/Source/Pawn/Public/Narration/UPwnNarrationLibrary.h @@ -0,0 +1,16 @@ +#pragma once +#include "PwnDialogueBubble.h" + +#include "UPwnNarrationLibrary.generated.h" + +UCLASS() +class PAWN_API UPwnNarrationLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() +public: + + static TSubclassOf BubbleWidgetClass; + + UFUNCTION(BlueprintCallable, Category = "Narration") + static void SetDialogueUIWidget(TSubclassOf Widget); +};