From e3027fcd240a27b89cc8738dcbc97d525a29b4b4 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Tue, 2 May 2023 05:42:48 +0100 Subject: [PATCH] Updated Quest System for Functionality --- .../Combat_UI/CombatCharacter.uasset | 4 +- Content/Blueprints/Quests/Quest_Start.uasset | 3 ++ .../BaseItems/InventoryComponent.h | 1 - Source/the_twilight_abyss/Quest/FWorldState.h | Bin 306 -> 0 bytes Source/the_twilight_abyss/Quest/Quest.cpp | 37 +++++++++++++--- Source/the_twilight_abyss/Quest/Quest.h | 40 +++++++++++------- .../the_twilight_abyss/Quest/QuestSystem.cpp | 24 ++++++++--- Source/the_twilight_abyss/Quest/QuestSystem.h | 16 ++++++- Source/the_twilight_abyss/Quest/UWorldState.h | Bin 0 -> 846 bytes 9 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 Content/Blueprints/Quests/Quest_Start.uasset delete mode 100644 Source/the_twilight_abyss/Quest/FWorldState.h create mode 100644 Source/the_twilight_abyss/Quest/UWorldState.h diff --git a/Content/Blueprints/Combat_UI/CombatCharacter.uasset b/Content/Blueprints/Combat_UI/CombatCharacter.uasset index e2549fb..017cf9c 100644 --- a/Content/Blueprints/Combat_UI/CombatCharacter.uasset +++ b/Content/Blueprints/Combat_UI/CombatCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cfb8f22195ddc24190aac87fde22f1ae8d7a945ec921c4425f3b17160d63362 -size 158940 +oid sha256:e139c8980e9de73d4d1274c639429bb451901b34cfa778e41c4e9a274d55ea33 +size 167176 diff --git a/Content/Blueprints/Quests/Quest_Start.uasset b/Content/Blueprints/Quests/Quest_Start.uasset new file mode 100644 index 0000000..c6cb680 --- /dev/null +++ b/Content/Blueprints/Quests/Quest_Start.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24083ce082d9ee2d3ee3999793f3d511279e2c90fae0f31197cdb07cf43b72c7 +size 7432 diff --git a/Source/the_twilight_abyss/BaseItems/InventoryComponent.h b/Source/the_twilight_abyss/BaseItems/InventoryComponent.h index 1ec1fb1..1800160 100644 --- a/Source/the_twilight_abyss/BaseItems/InventoryComponent.h +++ b/Source/the_twilight_abyss/BaseItems/InventoryComponent.h @@ -45,5 +45,4 @@ public: UFUNCTION() void RemoveItem(UEatableItems* Item); - }; diff --git a/Source/the_twilight_abyss/Quest/FWorldState.h b/Source/the_twilight_abyss/Quest/FWorldState.h deleted file mode 100644 index a8bd535c07e88549853a8c925dd0d4fd25d32f64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmZvYy$ZrW5QM*0!FLGSXpBQ=B!>p#4>1-ZzPdWMB3Pu@o4eWFnc?2A z4i`#x>^bTTICCP!(V}V9AvdPrMkYR>O{A$(_o?-A+bjq`%vQtu(zP5k|r;LwpivseQ6a>|HNM&%CcA~fO=Q2`>^Q-6Jlnn Wgn^V|Mr`FV7jESC)%^X%lRh7MAddItem(Item); + } +} + +bool UQuest::WorldStateMatch(UWorldState* A, UWorldState* B) +{ + for (UBaseItem* Item : B->Items) + { + if (!A->Items.Contains(Item) && Item->StackCount > A->Items[A->Items.Find(Item)]->StackCount) + { + return false; + } + } + for (TTuple Flag : B->QuestFlags) + { + if (!A->QuestFlags.Contains(Flag.Key) || A->QuestFlags[Flag.Key] != Flag.Value) + { + return false; + } + } + return true; } diff --git a/Source/the_twilight_abyss/Quest/Quest.h b/Source/the_twilight_abyss/Quest/Quest.h index acfa2b4..50a249c 100644 --- a/Source/the_twilight_abyss/Quest/Quest.h +++ b/Source/the_twilight_abyss/Quest/Quest.h @@ -3,29 +3,37 @@ #pragma once #include "CoreMinimal.h" -#include "UObject/NoExportTypes.h" -#include "../PlayerTemp/TempCharacter.h" +#include "UWorldState.h" #include "Quest.generated.h" -/** - * - */ -UCLASS() +UENUM(BlueprintType) +enum class EQuestLine : uint8 +{ + Main UMETA(DisplayName="Main"), + Sub UMETA(DisplayName="Sub") +}; + +UCLASS(Abstract, BlueprintType, Blueprintable, EditInlineNew, DefaultToInstanced) class THE_TWILIGHT_ABYSS_API UQuest : public UObject { GENERATED_BODY() + public: + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) FText Title; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) FText Description; - FString QuestLine; - UQuest* ParentQuest; - FJsonObject Conditions; - FJsonObject PreConditions; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + EQuestLine QuestLine; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, NoClear, Instanced) + UWorldState* Goals; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Instanced) + UWorldState* PreConditions; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, NoClear, Instanced) + TArray Rewards; - //TODO: Rewards - - bool CheckConditions(FJsonObject WorldState); - bool CheckPreConditions(FJsonObject WorldState); - void ApplyRewards(); - //TODO: CreateQuest + bool CheckConditions(UWorldState* WorldState) const; + bool CheckPreConditions(UWorldState* WorldState) const; + void ApplyRewards(UInventoryComponent* Inventory); + static bool WorldStateMatch(UWorldState* A, UWorldState* B); }; diff --git a/Source/the_twilight_abyss/Quest/QuestSystem.cpp b/Source/the_twilight_abyss/Quest/QuestSystem.cpp index 828bce0..2860e3c 100644 --- a/Source/the_twilight_abyss/Quest/QuestSystem.cpp +++ b/Source/the_twilight_abyss/Quest/QuestSystem.cpp @@ -20,8 +20,8 @@ UQuestSystem::UQuestSystem() void UQuestSystem::BeginPlay() { Super::BeginPlay(); - - + PlayerInventory = GetOwner()->FindComponentByClass(); + PlayerInventory->OnInventoryUpdated.AddDynamic(this, &UQuestSystem::CheckActiveQuestConditions); } @@ -29,7 +29,6 @@ void UQuestSystem::BeginPlay() void UQuestSystem::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); - } void UQuestSystem::CheckActiveQuestConditions() @@ -38,15 +37,28 @@ void UQuestSystem::CheckActiveQuestConditions() { if (Quest->CheckConditions(GetWorldState())) { + GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Quest Completed!")); CompletedQuests.Add(Quest); - Quest->ApplyRewards(); + Quest->ApplyRewards(PlayerInventory); } } } -FJsonObject UQuestSystem::GetWorldState() +UWorldState* UQuestSystem::GetWorldState() const { - FJsonObject WorldState = FJsonObject(); + UWorldState* WorldState = NewObject(); + WorldState->Items = PlayerInventory->Items; + WorldState->QuestFlags = QuestFlags; return WorldState; } +void UQuestSystem::AddQuest(UQuest* Quest) +{ + ActiveQuests.Add(Quest); +} + +void UQuestSystem::AddQuestFlag(const FString FlagName, const bool FlagValue) +{ + QuestFlags.Add(FlagName, FlagValue); + CheckActiveQuestConditions(); +} diff --git a/Source/the_twilight_abyss/Quest/QuestSystem.h b/Source/the_twilight_abyss/Quest/QuestSystem.h index d105bf4..247ff21 100644 --- a/Source/the_twilight_abyss/Quest/QuestSystem.h +++ b/Source/the_twilight_abyss/Quest/QuestSystem.h @@ -7,6 +7,8 @@ #include "Components/TextBlock.h" #include "Blueprint/UserWidget.h" #include "Quest.h" +#include "UWorldState.h" +#include "../BaseItems/InventoryComponent.h" #include "QuestSystem.generated.h" UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) @@ -18,9 +20,11 @@ public: // Sets default values for this component's properties UQuestSystem(); + UPROPERTY(EditAnywhere, BlueprintReadOnly) TArray ActiveQuests; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly) TArray CompletedQuests; - TArray CompletedQuestLines; + UPROPERTY(EditAnywhere) TMap QuestFlags; protected: @@ -36,5 +40,13 @@ public: // Called every frame virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; void CheckActiveQuestConditions(); - FJsonObject GetWorldState(); + UWorldState* GetWorldState() const; + + UFUNCTION(BlueprintCallable) + void AddQuest(UQuest* Quest); + UFUNCTION(BlueprintCallable) + void AddQuestFlag(FString FlagName, bool FlagValue); + +private: + UInventoryComponent* PlayerInventory; }; diff --git a/Source/the_twilight_abyss/Quest/UWorldState.h b/Source/the_twilight_abyss/Quest/UWorldState.h new file mode 100644 index 0000000000000000000000000000000000000000..1a17f5cf4349882d59feb8071b4b8398aa13fc0c GIT binary patch literal 846 zcmchVTT4Pw5QW#PLH|MWr6Tm*BCymDGRq6nQyg`tCyp1q5EA|M@|)4fOnU6$>^*1C zteLfD=JO+?iKdFw*N`)y1nBj^s_t7D5;&#+qHv#eu}n_)-ZQ)71G z9qSTdotaT_zpAwI_$K7C>M=92$QpkyROyn_l)d?x(v3>+D5;LhCU;R!D5-HjqIg}? z;UbiwwTZFrgiXa1*$TYbzAbeD|J`|? w>JnYw+j0IcoT~7dz^Ck6WSmFrkZJ2MvoZZPRu8@tIxF7{N6YB3Mp)hIsgCw literal 0 HcmV?d00001