From 031a74352fd1e753e7fd583de1a95b927976ee1a Mon Sep 17 00:00:00 2001 From: Rafal Swierczek Date: Wed, 20 Mar 2024 12:23:19 +0000 Subject: [PATCH] Implemented Open World Checkpoints to Save System --- .../Blueprints/Blueprint_CeilingLight.uasset | 2 +- .../EndlessVendetta/BountySystem/MainBountyClass.cpp | 6 +++++- .../EndlessVendetta/BountySystem/MainBountyClass.h | 9 ++++++++- .../EndlessVendetta/Characters/BountyHunterCharacter.cpp | 5 ++++- .../Source/EndlessVendetta/MainSaveGameClass.h | 4 ++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/EndlessVendetta/Content/StarterContent/Blueprints/Blueprint_CeilingLight.uasset b/EndlessVendetta/Content/StarterContent/Blueprints/Blueprint_CeilingLight.uasset index 3e2a82b7..c980d17b 100644 --- a/EndlessVendetta/Content/StarterContent/Blueprints/Blueprint_CeilingLight.uasset +++ b/EndlessVendetta/Content/StarterContent/Blueprints/Blueprint_CeilingLight.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f30109bb621004d765dc9b21be0826a0a251de164a9e2e5d51be11896dfb4cd0 +oid sha256:3283a43aeadedeed1d88b9a78899833a2f2acf544e82d4883589cce8095c5487 size 43745 diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp index b6eb3eb0..5499deb1 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp @@ -2,8 +2,8 @@ #include "MainBountyClass.h" - #include "CheckPoints/OpenWorldCheckpoint.h" +#include "EndlessVendetta/EVGameInstance.h" void AMainBountyClass::IncrementBountyCheckpoint() { @@ -13,6 +13,7 @@ void AMainBountyClass::IncrementBountyCheckpoint() if (AOpenWorldCheckpoint* OWCP = Cast(BountyCheckpoints[0])) { OpenWorldRespawnTransform = OWCP->GetRespawnTransform(); + OpenWorldCheckpointClasses.RemoveAt(0); } // FString TipToDisplay = ""; // if (!Completed) TipToDisplay = BountyCheckpoints[0]->GetCheckpointTip(); @@ -35,6 +36,9 @@ void AMainBountyClass::DeActivateFirstCheckpoint() void AMainBountyClass::SpawnOpenWorldCheckpoint() { + // Get open world checkpoints from save system + UEVGameInstance* GI = Cast(GetGameInstance()); + OpenWorldCheckpointClasses = GI->MainSaveGameInstanceRef->OpenWorldCheckpointsClassesSave; if (OpenWorldCheckpointClasses.IsEmpty()) return; for (TSubclassOf OpenWorldCheckpointClass : OpenWorldCheckpointClasses) diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h index 98d05e61..1154f7be 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h @@ -5,6 +5,7 @@ #include "CoreMinimal.h" #include "BountyClass.h" #include "SideBountyClass.h" +#include "CheckPoints/OpenWorldCheckpoint.h" #include "MainBountyClass.generated.h" USTRUCT(BlueprintType) @@ -42,7 +43,7 @@ class ENDLESSVENDETTA_API AMainBountyClass : public ABountyClass // ------------------- ATTRIBUTES ------------------------------ // Used to Spawn Open World Checkpoint for this Main Bounty UPROPERTY(EditDefaultsOnly, Category = "Bounty") - TArray> OpenWorldCheckpointClasses; + TArray> OpenWorldCheckpointClasses; // Used to Store Ref for Bounty Tracking Functionality //TArray OpenWorldcheckpoints; @@ -97,10 +98,16 @@ public: // Overrides to Desapwn Waypoint from OpenWorld Checkpoint void DeActivateFirstCheckpoint() override; + // Gets Respawn Transform of Current Open World Checkpoint FTransform GetOpenWorldRespawnTransform() { return OpenWorldRespawnTransform; } + + TArray> GetOpenWorldCheckpointClasses() + { + return OpenWorldCheckpointClasses; + } // Returns open world checkpoints tip // FString GetOpenWorldCheckpointTip() // { diff --git a/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp index 17bc04d1..401937e2 100644 --- a/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp @@ -11,7 +11,7 @@ void ABountyHunterCharacter::SpawnMainBounty(UEVGameInstance* GI) if (GI->MainSaveGameInstanceRef->CurrentMainBountyIndexSave > CurrentMainBountyIndex) CompleteCurrentMainBounty(GI); - if (MainBountyClasses.IsEmpty() || MainBountyClasses.Num() <= CurrentMainBountyIndex|| !IsValid(MainBountyClasses[CurrentMainBountyIndex])) + if (MainBountyClasses.IsEmpty() || MainBountyClasses.Num() <= CurrentMainBountyIndex || !IsValid(MainBountyClasses[CurrentMainBountyIndex])) { AllBountiesCompleted(); return; @@ -69,6 +69,7 @@ void ABountyHunterCharacter::CompleteCurrentMainBounty(UEVGameInstance* GI) if (!(MainBountyClasses.IsEmpty() || MainBountyClasses.Num() <= CurrentMainBountyIndex|| !IsValid(MainBountyClasses[CurrentMainBountyIndex]))) { GI->MainSaveGameInstanceRef->SideBountiesToSpawnSave.Append(MainBountyClasses[CurrentMainBountyIndex]->GetDefaultObject()->GetAssociatedSideBounties()); + GI->MainSaveGameInstanceRef->OpenWorldCheckpointsClassesSave = MainBountyClasses[CurrentMainBountyIndex]->GetDefaultObject()->GetOpenWorldCheckpointClasses(); } UGameplayStatics::SaveGameToSlot(GI->MainSaveGameInstanceRef, "MainSave", 0); @@ -163,6 +164,8 @@ void ABountyHunterCharacter::EndPlay(const EEndPlayReason::Type EndPlayReason) UEVGameInstance* GI = Cast(GetGameInstance()); if (!IsValid(GI->MainSaveGameInstanceRef)) return; + + if (IsValid(CurrentMainBounty)) GI->MainSaveGameInstanceRef->OpenWorldCheckpointsClassesSave = CurrentMainBounty->GetOpenWorldCheckpointClasses(); // if main bounty exists, save its locally stored open world respawn transform // otherwise, store it as 0,0,0 which will make the player spawn at player start instead diff --git a/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h b/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h index ae6bcba1..667579f5 100644 --- a/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h @@ -4,6 +4,7 @@ #include "CoreMinimal.h" #include "BountySystem/SideBountyClass.h" +#include "BountySystem/CheckPoints/OpenWorldCheckpoint.h" #include "GameFramework/SaveGame.h" #include "WeaponSystem/BaseWeaponClass.h" #include "MainSaveGameClass.generated.h" @@ -49,4 +50,7 @@ public: UPROPERTY() bool bFirstPlaythroughSave; + + UPROPERTY() + TArray> OpenWorldCheckpointsClassesSave; };