diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml
index 3a72e6ff..032408b5 100644
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml
@@ -8,14 +8,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -28,37 +29,37 @@
-
+ {
+ "customColor": "",
+ "associatedIndex": 7
+}
- {
+ "keyToString": {
+ "C++ Project.EndlessVendetta.executor": "Run",
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "git-widget-placeholder": "PauseMenu",
+ "ignore.virus.scanning.warn.message": "true",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "vue.rearranger.settings.migration": "true"
},
- "keyToStringList": {
- "rider.external.source.directories": [
- "C:\\Users\\Rafal\\AppData\\Roaming\\JetBrains\\Rider2023.3\\resharper-host\\DecompilerCache",
- "C:\\Users\\Rafal\\AppData\\Roaming\\JetBrains\\Rider2023.3\\resharper-host\\SourcesCache",
- "C:\\Users\\Rafal\\AppData\\Local\\Symbols\\src"
+ "keyToStringList": {
+ "rider.external.source.directories": [
+ "C:\\Users\\Rafal\\AppData\\Roaming\\JetBrains\\Rider2023.3\\resharper-host\\DecompilerCache",
+ "C:\\Users\\Rafal\\AppData\\Roaming\\JetBrains\\Rider2023.3\\resharper-host\\SourcesCache",
+ "C:\\Users\\Rafal\\AppData\\Local\\Symbols\\src"
]
}
-}]]>
+}
@@ -131,6 +132,9 @@
1706900339638
+
+
+
diff --git a/EndlessVendetta/Content/BountySystem/ApartmentBounty/MB_Apartment.uasset b/EndlessVendetta/Content/BountySystem/ApartmentBounty/MB_Apartment.uasset
index 30ecc43f..9874fb3c 100644
--- a/EndlessVendetta/Content/BountySystem/ApartmentBounty/MB_Apartment.uasset
+++ b/EndlessVendetta/Content/BountySystem/ApartmentBounty/MB_Apartment.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c24d0e32c594435e5c24f57444e1a99c1c7e491256f16bf15f60f1a627928600
-size 23786
+oid sha256:3f54596b2946a99060351c9a805c70203868db194b24f94a9999bc72847cb197
+size 23998
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset
index 11607e4e..abd6b8f7 100644
--- a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:14fd53a50ee9b233156dd4e8ff06c7a92800afbe4934bb067d7fe94c28d2cdda
-size 26131
+oid sha256:79ee7d751efb58c167bfd14d74bac82cb3c3b02094f86cd0ea000a807211d478
+size 26452
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
index 46367c77..56637590 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f8ca10fde945fbab4c1f76b326cd5808c53a338dedd01c73be8ae655552aa31c
-size 474080
+oid sha256:8940bc41955ada96468ffc747fadce7e4ffd6e694118e4367d00dcf18407f17a
+size 494513
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
index 201ac1f9..f82473e5 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f4d4c8728c6346fed52e60b7b56fa54a6492180815d2cee29d8d8730ac624947
-size 125545
+oid sha256:32e4bddac4c8767c25d303a48a8426a7cf97635ca5552fab77fa56cf9001cfee
+size 125570
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset
index 658f6c74..dc459121 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cf3cb3f1c18d9cef57e27220662bc04a7cfb0de1aff48d810eaefeed37c29d20
-size 127332
+oid sha256:63aef9af49c1856616c82ecd43a68bbc1273b943ef41a71e6a625f8aece55b01
+size 127270
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_PauseMenu.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_PauseMenu.uasset
new file mode 100644
index 00000000..ff5e76ee
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_PauseMenu.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a4842d868797342521c825cffe86759dfe8c0f8b1454ed9ad82aa0d0effe0dcc
+size 1375
diff --git a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
index 4764655f..44532cbd 100644
--- a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8576231cc54d32ecfa8c00c7570ec51bb9d741dabc85bc0b4ef684bbc8209d04
-size 19248
+oid sha256:18776bd43f9773369a4532239c8f5959f11cb148a259a46bcc2f3859741e1d41
+size 20504
diff --git a/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap b/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap
index acf3a596..7ec56f15 100644
--- a/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap
+++ b/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c78dde892caa4b4cb292592b66f9ee2fd986382798310e40212c1f80ee418cee
-size 3452507
+oid sha256:80f2ef39b4b9633d0b514454868231fa60ea6d417aade784a86041309bc09d27
+size 3439790
diff --git a/EndlessVendetta/Content/Levels/MainMenuLevel.umap b/EndlessVendetta/Content/Levels/MainMenuLevel.umap
index d2321b53..4fb787ef 100644
--- a/EndlessVendetta/Content/Levels/MainMenuLevel.umap
+++ b/EndlessVendetta/Content/Levels/MainMenuLevel.umap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1c86b9618ce0418f07d9a359900fa7815818fc8e5f0a1956b2bfb87a4452fe01
-size 306418
+oid sha256:62323ec29b4a5d647b91a836041fb29cbac98efc420ff43db000bf63ba74e92d
+size 308758
diff --git a/EndlessVendetta/Content/Levels/TempOpenWorld.umap b/EndlessVendetta/Content/Levels/TempOpenWorld.umap
index 331dc700..4cead22c 100644
--- a/EndlessVendetta/Content/Levels/TempOpenWorld.umap
+++ b/EndlessVendetta/Content/Levels/TempOpenWorld.umap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3977a136e9c4c43dad14b8288902b6cf0cf3c7b46eac4dfdcb8cc25e225edc02
-size 13864728
+oid sha256:c23c9614eb11e162386c9a60456be49ab400d443ccb643d2defaa76bb8435a5d
+size 13865992
diff --git a/EndlessVendetta/Content/MainMenu/Gameplay/MainMenuPlayerController.uasset b/EndlessVendetta/Content/MainMenu/Gameplay/MainMenuPlayerController.uasset
index 6891d70e..8e5b26a1 100644
--- a/EndlessVendetta/Content/MainMenu/Gameplay/MainMenuPlayerController.uasset
+++ b/EndlessVendetta/Content/MainMenu/Gameplay/MainMenuPlayerController.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ad835c5a96e5af4cdf7871ccb3a74e336cf83ef1f3eb8b0171ffdb88dcab7d50
-size 128279
+oid sha256:cef8b2e10eee2850f8670c6652b2527e63f5e7d6fb26835ac8d5710381ccb733
+size 116961
diff --git a/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3.uasset b/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3.uasset
new file mode 100644
index 00000000..4fc01cf4
--- /dev/null
+++ b/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb8f4c9f8b54f6f6bf65b0d41ff7f1ea5c8a9c25e494a0ceae061faa431279f9
+size 6023064
diff --git a/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3.wav b/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3.wav
new file mode 100644
index 00000000..775da37b
--- /dev/null
+++ b/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:decb88fc3a4aa3cb116c5e9d44ce516f241d1ac9752f5e463af941cd42393f81
+size 7534184
diff --git a/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3_Cue.uasset b/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3_Cue.uasset
new file mode 100644
index 00000000..ede7d79a
--- /dev/null
+++ b/EndlessVendetta/Content/MainMenu/Music/Manu_maybe_3_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6abfcdb46a942964ebf8d8c611d978447511c8d048a7e1dca9615525f9e93ce
+size 5262
diff --git a/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3.1.wav b/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3.1.wav
new file mode 100644
index 00000000..a7bc9acc
--- /dev/null
+++ b/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3.1.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e620f081ce888b8d63e03857e582244f42041b840b5a9e877275ca2a192d4b18
+size 18823784
diff --git a/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3_1.uasset b/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3_1.uasset
new file mode 100644
index 00000000..41087f44
--- /dev/null
+++ b/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b1d6ac457cec4cc6d963b0522d8adbd8ce6e90f7e1d290c482c548cb596017c4
+size 15907164
diff --git a/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3_1_Cue.uasset b/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3_1_Cue.uasset
new file mode 100644
index 00000000..721f1c6d
--- /dev/null
+++ b/EndlessVendetta/Content/MainMenu/Music/Menu_maybe_3_1_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f21821a2ed5950dbed14153cade46048529a98a5abc65b5aa1f0c291ae803cf
+size 5276
diff --git a/EndlessVendetta/Content/PauseMenu/PauseMenuBackground.png b/EndlessVendetta/Content/PauseMenu/PauseMenuBackground.png
new file mode 100644
index 00000000..726c9d5f
--- /dev/null
+++ b/EndlessVendetta/Content/PauseMenu/PauseMenuBackground.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:61ef847d33763aab89918e57f62122de8696c402bf1ce1e0cf110e4e68866255
+size 66163
diff --git a/EndlessVendetta/Content/PauseMenu/PauseMenuBackground.uasset b/EndlessVendetta/Content/PauseMenu/PauseMenuBackground.uasset
new file mode 100644
index 00000000..2cc1da9e
--- /dev/null
+++ b/EndlessVendetta/Content/PauseMenu/PauseMenuBackground.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f5ba48d09af24b7bd6d2265d08899b4e0237ac470f4b9d9326ed388289b5ce6
+size 47717
diff --git a/EndlessVendetta/Content/PauseMenu/Tabs/WBP_BountiesTab.uasset b/EndlessVendetta/Content/PauseMenu/Tabs/WBP_BountiesTab.uasset
new file mode 100644
index 00000000..425b5d7f
--- /dev/null
+++ b/EndlessVendetta/Content/PauseMenu/Tabs/WBP_BountiesTab.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51dce130f9a950a96cc11a6d0ce5c7da112f49d961edb944ec9cf866a00b46a2
+size 25564
diff --git a/EndlessVendetta/Content/PauseMenu/Tabs/WBP_QuitTab.uasset b/EndlessVendetta/Content/PauseMenu/Tabs/WBP_QuitTab.uasset
new file mode 100644
index 00000000..e3cc3d00
--- /dev/null
+++ b/EndlessVendetta/Content/PauseMenu/Tabs/WBP_QuitTab.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47dd758ba4393d88bf5ef5f4851b8419af7eac51b969e91cfd6f383abd2876fa
+size 42508
diff --git a/EndlessVendetta/Content/PauseMenu/Tabs/WBP_TestMenuTab.uasset b/EndlessVendetta/Content/PauseMenu/Tabs/WBP_TestMenuTab.uasset
new file mode 100644
index 00000000..36ed479f
--- /dev/null
+++ b/EndlessVendetta/Content/PauseMenu/Tabs/WBP_TestMenuTab.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07291b58ab52dce6a6681c9f7e051f0f49e911be6cb555a59e4367f212d6d4f5
+size 33171
diff --git a/EndlessVendetta/Content/PauseMenu/WBP_PauseMenu.uasset b/EndlessVendetta/Content/PauseMenu/WBP_PauseMenu.uasset
new file mode 100644
index 00000000..74180af7
--- /dev/null
+++ b/EndlessVendetta/Content/PauseMenu/WBP_PauseMenu.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6da7938ededede015f593c24d848d94faca0e6fa502cf28e3ec3a57fb3627c58
+size 485775
diff --git a/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset b/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
index 8720c67f..b715cd47 100644
--- a/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
+++ b/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2948a0f047ea3d4c550459ad2641ce7a098433ea2c165c572d9816ad798fd473
+oid sha256:d029060e9a20598861faa739272c3bbf75646095f4811df3347556cdf8606199
size 66790690
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/DoorTestLevel/9/PG/AISD2CY0WTWKV1BJDYTYJ3.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/DoorTestLevel/9/PG/AISD2CY0WTWKV1BJDYTYJ3.uasset
index 11295e10..d24e6bcd 100644
--- a/EndlessVendetta/Content/__ExternalActors__/Levels/DoorTestLevel/9/PG/AISD2CY0WTWKV1BJDYTYJ3.uasset
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/DoorTestLevel/9/PG/AISD2CY0WTWKV1BJDYTYJ3.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4d53dac7e3e749916ed5e5802c3c3495f2895827dcb66e9b2f49a8cac9a4ecb5
-size 6664
+oid sha256:82a6fbc29ddd199d5ea508c98c2577fa99eaeb43042aa50a7e89570fc743b9cf
+size 6741
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/VK/HJHN36OGRNBJVSACPK17TJ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/VK/HJHN36OGRNBJVSACPK17TJ.uasset
new file mode 100644
index 00000000..56c77103
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/VK/HJHN36OGRNBJVSACPK17TJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df40cc09f2b897e82277a3c74d970e623a1df6a339027dad2d86729cbabe7910
+size 5173
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/WM/7S8OEF1ALOX6NKI759UPUB.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/WM/7S8OEF1ALOX6NKI759UPUB.uasset
deleted file mode 100644
index 16fa5da5..00000000
--- a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/WM/7S8OEF1ALOX6NKI759UPUB.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b3b486e5f781568dfc3311e0a748054cd44c937f24cf97813ffdb41bc57ff9ab
-size 4797
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp
index 7d884ef8..834c7fb5 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp
@@ -188,10 +188,10 @@ void ABountyDirector::BuyEnemyRadio()
void ABountyDirector::BuyFavours()
{
- if (PlayerChar->Money < FavourCost) return;
- PlayerChar->Money -= FavourCost;
- Favours++;
- PC_Display->UpdateFavourCount(Favours);
+ // if (PlayerChar->Money < FavourCost) return;
+ // PlayerChar->Money -= FavourCost;
+ // Favours++;
+ // PC_Display->UpdateFavourCount(Favours);
}
// ----------- PC Display ---------------
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
index 1617dfe6..cb403d15 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
@@ -23,6 +23,10 @@ class ENDLESSVENDETTA_API AMainBountyClass : public ABountyClass
// Used to Store Ref for Bounty Tracking Functionality
ACheckpointClass* OpenWorldcheckpoint;
+ // Used by Players Character to Determine where to Spawn in the Open World after Completing Main Bounty
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ FTransform PlayerSpawnTransform;
+
protected:
@@ -40,6 +44,11 @@ public:
// Spawns the Single Checkpoint in the Open World for this Main Bounty
void SpawnOpenWorldCheckpoint();
+ // Used by Players Character to Determine where to Spawn in the Open World after Completing Main Bounty
+ FTransform GetPlayerSpawnTransform()
+ {
+ return PlayerSpawnTransform;
+ }
diff --git a/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp
index 9d24e93b..d6363f4b 100644
--- a/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.cpp
@@ -3,15 +3,12 @@
#include "BountyHunterCharacter.h"
#include "Kismet/GameplayStatics.h"
+#include "EnhancedInputComponent.h"
-void ABountyHunterCharacter::SpawnMainBounty()
+void ABountyHunterCharacter::SpawnMainBounty(UEVGameInstance* GI)
{
- UEVGameInstance* GI = Cast(GetGameInstance());
- if (!IsValid(GI->MainSaveGameInstanceRef)) return;
CurrentMainBountyIndex = GI->MainSaveGameInstanceRef->LastMainBountyIndexInOpenWorld;
- UE_LOG(LogTemp, Warning, TEXT("Loaded current bounty as %d"), CurrentMainBountyIndex);
-
if (GI->MainSaveGameInstanceRef->CurrentMainBountyIndexSave > CurrentMainBountyIndex) CompleteCurrentMainBounty(GI);
if (MainBountyClasses.IsEmpty() || MainBountyClasses.Num() <= CurrentMainBountyIndex|| !IsValid(MainBountyClasses[CurrentMainBountyIndex]))
@@ -35,6 +32,10 @@ void ABountyHunterCharacter::CompleteCurrentMainBounty(UEVGameInstance* GI)
{
// Collect rewards for bounty and move onto next
UE_LOG(LogTemp, Warning, TEXT("Would be collecting reward for completing bounty %d"), CurrentMainBountyIndex);
+
+ FTransform PostBountySpawnTransform = MainBountyClasses[CurrentMainBountyIndex]->GetDefaultObject()->GetPlayerSpawnTransform();
+ SetActorTransform(PostBountySpawnTransform);
+ Cast(GetController())->SetControlRotation(PostBountySpawnTransform.GetRotation().Rotator());
CurrentMainBountyIndex = GI->MainSaveGameInstanceRef->CurrentMainBountyIndexSave;
GI->MainSaveGameInstanceRef->LastMainBountyIndexInOpenWorld = CurrentMainBountyIndex;
@@ -48,12 +49,93 @@ void ABountyHunterCharacter::AllBountiesCompleted()
void ABountyHunterCharacter::BeginPlay()
{
- if (UGameplayStatics::DoesSaveGameExist("MainSave", 0)) SpawnMainBounty();
+ UEVGameInstance* GI = Cast(GetGameInstance());
+ if (IsValid(GI->MainSaveGameInstanceRef))
+ {
+ SpawnMainBounty(GI);
+ FTransform SpawnLoc = GI->MainSaveGameInstanceRef->PlayerOpenWorldSpawnTransformSave;
+ if (SpawnLoc.GetLocation() != FVector(0, 0, 0) && UGameplayStatics::GetCurrentLevelName(GetWorld()) == OpenWorldLevelName)
+ {
+ SetActorTransform(GI->MainSaveGameInstanceRef->PlayerOpenWorldSpawnTransformSave);
+ Cast(GetController())->SetControlRotation(GI->MainSaveGameInstanceRef->PlayerOpenWorldSpawnTransformSave.GetRotation().Rotator());
+ }
+ }
+ CreatePauseMenuTabs();
Super::BeginPlay();
}
-void ABountyHunterCharacter::Tick(float DeltaTime)
+void ABountyHunterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
- Super::Tick(DeltaTime);
+ if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked(PlayerInputComponent))
+ {
+ EnhancedInputComponent->BindAction(PauseMenuAction, ETriggerEvent::Started, this, &ABountyHunterCharacter::TogglePauseMenu);
+ }
+
+ UE_LOG(LogTemp, Warning, TEXT("Setup player input on bounty hunter character"));
+
+ Super::SetupPlayerInputComponent(PlayerInputComponent);
}
+void ABountyHunterCharacter::EndPlay(const EEndPlayReason::Type EndPlayReason)
+{
+ Super::EndPlay(EndPlayReason);
+ if (UGameplayStatics::GetCurrentLevelName(GetWorld()) != OpenWorldLevelName) return;
+ UEVGameInstance* GI = Cast(GetGameInstance());
+ if (!IsValid(GI->MainSaveGameInstanceRef)) return;
+ TArray LandingZones;
+ ALandingZone* ClosestLandingZone = nullptr;
+ double DistToClosestLandingZone;
+ UGameplayStatics::GetAllActorsOfClass(GetWorld(), ALandingZone::StaticClass(), LandingZones);
+ for (AActor* LZ_Actor : LandingZones)
+ {
+ ALandingZone* LZ = Cast(LZ_Actor);
+ double DistToLZ = FVector::Dist(LZ->GetExitTransform().GetLocation(), GetActorLocation());
+ if (!IsValid(ClosestLandingZone))
+ {
+ ClosestLandingZone = LZ;
+ DistToClosestLandingZone = DistToLZ;
+ continue;
+ }
+ ClosestLandingZone = DistToClosestLandingZone >= DistToLZ ? LZ : ClosestLandingZone;
+ DistToClosestLandingZone = DistToClosestLandingZone >= DistToLZ ? DistToLZ : DistToClosestLandingZone;
+ }
+ if (!IsValid(ClosestLandingZone)) return;
+ GI->MainSaveGameInstanceRef->PlayerOpenWorldSpawnTransformSave = ClosestLandingZone->GetExitTransform();
+ UGameplayStatics::SaveGameToSlot(GI->MainSaveGameInstanceRef, "MainSave", 0);
+}
+
+void ABountyHunterCharacter::CreatePauseMenuTabs()
+{
+ BountiesTab = CreateWidget(GetWorld(), BountyTabWidgetClass);
+ FavoursTab = CreateWidget(GetWorld(), FavoursTabWidgetClass);
+ NavigationTab = CreateWidget(GetWorld(), NavigationTabWidgetClass);
+ SettingsTab = CreateWidget(GetWorld(), SettingsTabWidgetClass);
+ QuitTab = CreateWidget(GetWorld(), QuitTabWidgetClass);
+}
+
+void ABountyHunterCharacter::TogglePauseMenu()
+{
+ const bool bOpenNewPauseMenu = !IsValid(PauseMenu);
+ FInputModeUIOnly UIOnly;
+ FInputModeGameOnly GameOnly;
+ APlayerController* PC = Cast(GetController());
+
+ InPauseMenu = bOpenNewPauseMenu;
+ PC->SetIgnoreMoveInput(bOpenNewPauseMenu);
+ PC->SetIgnoreLookInput(bOpenNewPauseMenu);
+ PC->SetShowMouseCursor(bOpenNewPauseMenu);
+ if (!bOpenNewPauseMenu)
+ {
+ PauseMenu->RemoveFromParent();
+ PauseMenu = nullptr;
+ return;
+ }
+ PauseMenu = CreateWidget(GetWorld(), PauseMenuWidgetClass);
+ PauseMenu->AddToViewport(50);
+ PauseMenu->OpenNewTab(BountiesTab);
+ PauseMenu->OpenedBountiesTab.AddDynamic(this, &ABountyHunterCharacter::OpenBountiesTab);
+ PauseMenu->OpenedFavoursTab.AddDynamic(this, &ABountyHunterCharacter::OpenFavoursTab);
+ PauseMenu->OpenedNavigationTab.AddDynamic(this, &ABountyHunterCharacter::OpenNavigationTab);
+ PauseMenu->OpenedSettingsTab.AddDynamic(this, &ABountyHunterCharacter::OpenSettingsTab);
+ PauseMenu->OpenedQuitTab.AddDynamic(this, &ABountyHunterCharacter::OpenQuitTab);
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.h b/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.h
index 27be1e7f..50695cba 100644
--- a/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.h
+++ b/EndlessVendetta/Source/EndlessVendetta/Characters/BountyHunterCharacter.h
@@ -7,6 +7,9 @@
#include "EndlessVendetta/EVGameInstance.h"
#include "EndlessVendetta/MainSaveGameClass.h"
#include "EndlessVendetta/BountySystem/MainBountyClass.h"
+#include "EndlessVendetta/PauseMenu/BountiesTab.h"
+#include "EndlessVendetta/PauseMenu/PauseMenuClass.h"
+#include "EndlessVendetta/PauseMenu/QuitTab.h"
#include "BountyHunterCharacter.generated.h"
/**
@@ -31,34 +34,130 @@ class ENDLESSVENDETTA_API ABountyHunterCharacter : public AEndlessVendettaCharac
// Name of open world, so that the correct bounties can be spawned based on level
UPROPERTY(EditDefaultsOnly, Category = "Bounty Hunter")
FString OpenWorldLevelName = "ControlTutorialLevel";
-
-protected:
+protected:
public:
// ------------------- METHODS ---------------------------------
private:
// Spawns Current Main Bounty along with its Side Bounties, and spawns its appropriate CP's based on level
- void SpawnMainBounty();
+ void SpawnMainBounty(UEVGameInstance* GI);
// Collects Reward for Current Main Bounty and Increments the Main Bounty Index
void CompleteCurrentMainBounty(UEVGameInstance* GI);
// Replaces Normal Bounty Info UI with Unique Game Over UI
void AllBountiesCompleted();
-
+
protected:
// Called When Player Spawns
virtual void BeginPlay() override;
- // Called every frame
- virtual void Tick(float DeltaTime) override;
+ // Overridden to Setup up Pause Menu Inputs
+ virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
+
+ // Called When Actor destroyed or Removed from Level
+ virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
+
public:
// Used by Final Checkpoint to always load the Level set as the Open Level in here
FString GetOpenWorldLevelName()
{
return OpenWorldLevelName;
}
+
+// ------------------- Pause Menu ---------------------------------
+private:
+ // Input Action for Opening and Closing Pause Menu
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ UInputAction* PauseMenuAction;
+
+ // Widget Class used to Spawn Pause Menu
+ UPROPERTY(EditDefaultsOnly, Category = PauseMenu)
+ TSubclassOf PauseMenuWidgetClass;
+
+ // Reference to Pause Menu Widget
+ UPauseMenuClass* PauseMenu;
+ // Widget Class used to Spawn Bounties Tab Widget
+ UPROPERTY(EditDefaultsOnly, Category = "Pause Menu")
+ TSubclassOf BountyTabWidgetClass;
+
+ // Reference to Bounty Tab Widget
+ UPROPERTY()
+ UBountiesTab* BountiesTab;
+
+ // Widget Class used to Spawn Favours Tab Widget
+ UPROPERTY(EditDefaultsOnly, Category = "Pause Menu")
+ TSubclassOf FavoursTabWidgetClass;
+
+ // Reference to Favours Tab Widget
+ UPROPERTY()
+ UTabWidget* FavoursTab;
+
+ // Widget Class used to Spawn Navigation Tab Widget
+ UPROPERTY(EditDefaultsOnly, Category = "Pause Menu")
+ TSubclassOf NavigationTabWidgetClass;
+
+ // Reference to Navigation Tab Widget
+ UPROPERTY()
+ UTabWidget* NavigationTab;
+
+ // Widget Class used to Spawn Settings Tab Widget
+ UPROPERTY(EditDefaultsOnly, Category = "Pause Menu")
+ TSubclassOf SettingsTabWidgetClass;
+
+ // Reference to Settings Tab Widget
+ UPROPERTY()
+ UTabWidget* SettingsTab;
+
+ // Widget Class used to Spawn Quit Tab Widget
+ UPROPERTY(EditDefaultsOnly, Category = "Pause Menu")
+ TSubclassOf QuitTabWidgetClass;
+
+ // Reference to Quit Tab Widget
+ UPROPERTY()
+ UQuitTab* QuitTab;
+
+ // Creates and Stores References to each Pause Menu Tab on Begin Play
+ void CreatePauseMenuTabs();
+
+ // Open or Close the Pause Menu, Defaults to Opening Bounty Tab
+ void TogglePauseMenu();
+
+ // Opens Bounties Tab
+ UFUNCTION()
+ void OpenBountiesTab()
+ {
+ PauseMenu->OpenNewTab(BountiesTab);
+ }
+
+ // Opens Favours Tab
+ UFUNCTION()
+ void OpenFavoursTab()
+ {
+ PauseMenu->OpenNewTab(FavoursTab);
+ }
+
+ // Opens Navigation Tab
+ UFUNCTION()
+ void OpenNavigationTab()
+ {
+ PauseMenu->OpenNewTab(NavigationTab);
+ }
+
+ // Opens Settings Tab
+ UFUNCTION()
+ void OpenSettingsTab()
+ {
+ PauseMenu->OpenNewTab(SettingsTab);
+ }
+
+ // Opens Quit Tab
+ UFUNCTION()
+ void OpenQuitTab()
+ {
+ PauseMenu->OpenNewTab(QuitTab);
+ }
};
diff --git a/EndlessVendetta/Source/EndlessVendetta/Characters/MyVICharacterBase.cpp b/EndlessVendetta/Source/EndlessVendetta/Characters/MyVICharacterBase.cpp
index 93d83d2f..f4f1f85e 100644
--- a/EndlessVendetta/Source/EndlessVendetta/Characters/MyVICharacterBase.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/Characters/MyVICharacterBase.cpp
@@ -70,6 +70,7 @@ void AMyVICharacterBase::GetLifetimeReplicatedProps(TArray& O
void AMyVICharacterBase::Jump()
{
+ if (PlayerOnShip || InPauseMenu) return;
// If missing critical components then jump and exit
if (!VaultComponent || !GetCharacterMovement())
{
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
index 4bf27204..81ca8170 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
@@ -216,10 +216,12 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent*
//Interacting
EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::Interact);
}
+ UE_LOG(LogTemp, Warning, TEXT("Setup player input on EV character"));
}
void AEndlessVendettaCharacter::Interact()
{
+ if (InPauseMenu) return;
if (bIsInDialogue)
{
Cast(GetComponentByClass(UAC_PlayerDialogueInterpreter::StaticClass()))->NextDialogue();
@@ -257,7 +259,7 @@ void AEndlessVendettaCharacter::Interact()
void AEndlessVendettaCharacter::SetCrouch()
{
- if (PlayerOnShip) return;
+ if (PlayerOnShip || InPauseMenu) return;
Crouch();
}
@@ -301,7 +303,7 @@ float AEndlessVendettaCharacter::TakeDamage(const float DamageAmount, FDamageEve
void AEndlessVendettaCharacter::ToggleRecon()
{
- if (PlayerOnShip) return;
+ if (PlayerOnShip || InPauseMenu) return;
if (!GadgetManager->IsValidReconGadget()) return;
if (IsValid(PrimaryWeapon)) EquipPrimary();
@@ -324,7 +326,7 @@ void AEndlessVendettaCharacter::ToggleRecon()
void AEndlessVendettaCharacter::ToggleCombat()
{
- if (PlayerOnShip) return;
+ if (PlayerOnShip || InPauseMenu) return;
if (!GadgetManager->IsValidCombatGadget()) return;
if (IsValid(PrimaryWeapon)) EquipPrimary();
@@ -349,7 +351,7 @@ void AEndlessVendettaCharacter::ToggleCombat()
//When 1 is pressed it calls EquipPrimary
void AEndlessVendettaCharacter::EquipPrimary()
{
- if (PlayerOnShip) return;
+ if (PlayerOnShip || InPauseMenu) return;
if (!IsValid(PrimaryWeaponClass)) return;
FActorSpawnParameters spawnParams;
spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
@@ -421,7 +423,7 @@ void AEndlessVendettaCharacter::EquipPrimary()
void AEndlessVendettaCharacter::EquipSecondary()
{
if (!IsValid(SecondaryWeaponClass)) return;
- if (PlayerOnShip) return;
+ if (PlayerOnShip || InPauseMenu) return;
FActorSpawnParameters spawnParams;
spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
@@ -518,6 +520,7 @@ void AEndlessVendettaCharacter::WeaponSwitcher(AActor* Outhit)
//Calls the fire function in the baseWeaponClass
void AEndlessVendettaCharacter::FireCaller()
{
+ if (InPauseMenu) return;
if (IsValid(PrimaryWeapon) && !bIsReloading)
{
PrimaryWeapon->Fire();
@@ -542,6 +545,7 @@ void AEndlessVendettaCharacter::StopFire()
void AEndlessVendettaCharacter::GunRightClick()
{
+ if (InPauseMenu) return;
if (IsValid(PrimaryWeapon) && !bIsScoped)
{
bIsScoped = true;
@@ -578,6 +582,7 @@ void AEndlessVendettaCharacter::StopGunRightClick()
void AEndlessVendettaCharacter::GunReload()
{
+ if (InPauseMenu) return;
if (IsValid(PrimaryWeapon))
{
PrimaryWeapon->ReloadTimer();
@@ -617,6 +622,7 @@ void AEndlessVendettaCharacter::Move(const FInputActionValue& Value)
void AEndlessVendettaCharacter::Sprint()
{
+ if (InPauseMenu) return;
bIsPlayerSprinting = true;
if (bIsPlayerSprinting)
{
@@ -728,8 +734,15 @@ void AEndlessVendettaCharacter::EnterShip(FTransform TakeoffLoc)
void AEndlessVendettaCharacter::ExitShip(FTransform ExitLoc)
{
PlayFadeScreen();
- SetActorLocation(ExitLoc.GetLocation());
+ APlayerController* PC = Cast(GetController());
+ PC->SetIgnoreMoveInput(true);
+ PC->SetIgnoreLookInput(true);
+ SpaceShip->GetCharacterMovement()->Velocity = FVector(0, 0, 0);
+ GetCharacterMovement()->Velocity = FVector(0, 0, 0);
+ SetActorLocation(ExitLoc.GetLocation(), false, nullptr, ETeleportType::ResetPhysics);
GetController()->SetControlRotation(ExitLoc.Rotator());
SpaceShip->Destroy();
PlayerOnShip = false;
+ PC->SetIgnoreMoveInput(false);
+ PC->SetIgnoreLookInput(false);
}
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
index a01cbd6c..d10af7b2 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
@@ -133,6 +133,8 @@ protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
+ bool InPauseMenu = false;
+
UPROPERTY(EditDefaultsOnly, Category = "Gadget")
TSubclassOf GadgetManagerClass;
@@ -145,7 +147,6 @@ protected:
void PlayFadeScreen();
public:
- int Money = 2000;
AGadgetManager* GadgetManager;
bool bIsReloading = false;
@@ -269,11 +270,11 @@ public:
// Space Ship
private:
- bool PlayerOnShip = false;
UPROPERTY(EditDefaultsOnly, Category = "Space Ship")
TSubclassOf SpaceShipClass;
ASpaceShip* SpaceShip;
-
+protected:
+ bool PlayerOnShip = false;
public:
void ExitShip(FTransform ExitLoc);
void EnterShip(FTransform TakeoffLoc);
diff --git a/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h b/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h
index 3d7937da..ccd11131 100644
--- a/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h
+++ b/EndlessVendetta/Source/EndlessVendetta/MainSaveGameClass.h
@@ -27,5 +27,7 @@ public:
UPROPERTY()
TSubclassOf SecondaryWeaponClassSave;
-
+
+ UPROPERTY()
+ FTransform PlayerOpenWorldSpawnTransformSave;
};
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/BountiesTab.cpp b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/BountiesTab.cpp
new file mode 100644
index 00000000..0400a586
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/BountiesTab.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BountiesTab.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/BountiesTab.h b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/BountiesTab.h
new file mode 100644
index 00000000..85878167
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/BountiesTab.h
@@ -0,0 +1,31 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "TabWidget.h"
+#include "EndlessVendetta/BountySystem/BountyClass.h"
+#include "BountiesTab.generated.h"
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTrackBounty, ABountyClass*, BountyToTrack);
+
+UCLASS()
+class ENDLESSVENDETTA_API UBountiesTab : public UTabWidget
+{
+ GENERATED_BODY()
+
+// ------------------- ATTRIBUTES ------------------------------
+
+protected:
+
+public:
+ UPROPERTY(BlueprintAssignable)
+ FTrackBounty TrackBountyDelegate;
+
+// ------------------- METHODS ---------------------------------
+private:
+
+protected:
+
+public:
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/PauseMenuClass.cpp b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/PauseMenuClass.cpp
new file mode 100644
index 00000000..d45ab890
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/PauseMenuClass.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "PauseMenuClass.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/PauseMenuClass.h b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/PauseMenuClass.h
new file mode 100644
index 00000000..fff8ea82
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/PauseMenuClass.h
@@ -0,0 +1,41 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Blueprint/UserWidget.h"
+#include "PauseMenuClass.generated.h"
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOpenedBountiesTab);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOpenedFavoursTab);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOpenedNavigationTab);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOpenedSettingsTab);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOpenedQuitTab);
+
+UCLASS()
+class ENDLESSVENDETTA_API UPauseMenuClass : public UUserWidget
+{
+ GENERATED_BODY()
+// ------------------- ATTRIBUTES ------------------------------
+public:
+ UPROPERTY(BlueprintCallable)
+ FOpenedBountiesTab OpenedBountiesTab;
+
+ UPROPERTY(BlueprintCallable)
+ FOpenedFavoursTab OpenedFavoursTab;
+
+ UPROPERTY(BlueprintCallable)
+ FOpenedNavigationTab OpenedNavigationTab;
+
+ UPROPERTY(BlueprintCallable)
+ FOpenedSettingsTab OpenedSettingsTab;
+
+ UPROPERTY(BlueprintCallable)
+ FOpenedQuitTab OpenedQuitTab;
+
+// ------------------- METHODS ---------------------------------
+public:
+ // Closes any Previously Opened Tab and Opens the Given new Tab
+ UFUNCTION(BlueprintImplementableEvent)
+ void OpenNewTab(UTabWidget* TabWidget);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/QuitTab.cpp b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/QuitTab.cpp
new file mode 100644
index 00000000..d497a801
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/QuitTab.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "QuitTab.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/QuitTab.h b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/QuitTab.h
new file mode 100644
index 00000000..cf9e4020
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/QuitTab.h
@@ -0,0 +1,14 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "TabWidget.h"
+#include "QuitTab.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API UQuitTab : public UTabWidget
+{
+ GENERATED_BODY()
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/TabWidget.cpp b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/TabWidget.cpp
new file mode 100644
index 00000000..bd9ccfba
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/TabWidget.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "TabWidget.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/PauseMenu/TabWidget.h b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/TabWidget.h
new file mode 100644
index 00000000..b96c7767
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/PauseMenu/TabWidget.h
@@ -0,0 +1,17 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Blueprint/UserWidget.h"
+#include "TabWidget.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UTabWidget : public UUserWidget
+{
+ GENERATED_BODY()
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h
index 8ff2cbbf..75234e19 100644
--- a/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h
+++ b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h
@@ -68,4 +68,10 @@ public:
// Updates all LZ's, then runs enter ship func on player passing the correct takeoff transform
void Takeoff();
+
+ // Returns Exit Transform for LZ, Used for Save System for when Player Leaves Open World
+ FTransform GetExitTransform()
+ {
+ return LZ_ExitTransform;
+ }
};