diff --git a/EndlessVendetta/Config/DefaultEngine.ini b/EndlessVendetta/Config/DefaultEngine.ini index 280d5d43..d2549656 100644 --- a/EndlessVendetta/Config/DefaultEngine.ini +++ b/EndlessVendetta/Config/DefaultEngine.ini @@ -4,7 +4,7 @@ +EditProfiles=(Name="Trigger",CustomResponses=((Channel=Projectile, Response=ECR_Ignore))) [/Script/EngineSettings.GameMapsSettings] -EditorStartupMap=/Game/FirstPerson/Maps/GunMechanicTester.GunMechanicTester +EditorStartupMap=/Game/LevelPrototyping/Scenes/TutorialHit.TutorialHit LocalMapOptions= TransitionMap=None bUseSplitscreen=True @@ -13,7 +13,7 @@ ThreePlayerSplitscreenLayout=FavorTop FourPlayerSplitscreenLayout=Grid bOffsetPlayerGamepadIds=False GameInstanceClass=/Script/Engine.GameInstance -GameDefaultMap=/Game/FirstPerson/Maps/GunMechanicTester.GunMechanicTester +GameDefaultMap=/Game/LevelPrototyping/Scenes/TutorialHit.TutorialHit ServerDefaultMap=/Engine/Maps/Entry.Entry GlobalDefaultGameMode=/Game/FirstPerson/GunMechanicWorld.GunMechanicWorld_C GlobalDefaultServerGameMode=None diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector.uasset index 864d575c..1b888d58 100644 --- a/EndlessVendetta/Content/BountySystem/BountyDirector.uasset +++ b/EndlessVendetta/Content/BountySystem/BountyDirector.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8364b58c763904adb7b727800d9e1d2de027a9793f82db94c34cfa3ef32be588 -size 43410 +oid sha256:bb8e5904b3c1342d8d6620e5d8d57475d1c42ad4bd07d3f4854238eb7b3b2775 +size 2478 diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/BountyDirector.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/BountyDirector.uasset new file mode 100644 index 00000000..a8ea05a4 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/BountyDirector/BountyDirector.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29a1d4cf6379012b45e215995cc8014963f61fb618fbba839ce738f0633cff33 +size 22149 diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.jpg b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.jpg new file mode 100644 index 00000000..692b7017 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:624ea13a3e1e8d4559e91aa407830dcabd703fb21a7a9a3ab1f6bd26637463db +size 238472 diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset new file mode 100644 index 00000000..5dc905ef --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d1bd2827e82ba55e60dba3a42e89bd1877b0ba33adb9894603ec46705d99243 +size 247653 diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_PC_Display.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_PC_Display.uasset new file mode 100644 index 00000000..5e266442 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_PC_Display.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acab50641ebfd8ec73bda00d7ce661f23e7773e4b88863de1982b34b52ebc114 +size 1026639 diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_StaticPCBG.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_StaticPCBG.uasset new file mode 100644 index 00000000..02a4c8b4 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_StaticPCBG.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fd8cfefdb9488ee066675e784fe4fe0ec31f689d82741b5cc8d5cfdbf0b64e4 +size 29059 diff --git a/EndlessVendetta/Content/BountySystem/CC_ReturnToShip.uasset b/EndlessVendetta/Content/BountySystem/CC_ReturnToShip.uasset deleted file mode 100644 index 9fce0370..00000000 --- a/EndlessVendetta/Content/BountySystem/CC_ReturnToShip.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c7cad648008fd70041f5bf4f160cffa927427c047f41469065e52f61f4fbc5ac -size 22256 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/CP_MB.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/CP_MB.uasset new file mode 100644 index 00000000..822f2d62 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/CP_MB.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4630de4ea95731ea1488ab3b135b07396a1dd842f9909c6380d2a7934c2aa8d7 +size 63981 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/MB_TestBounty.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/MB_TestBounty.uasset new file mode 100644 index 00000000..0309cf1b --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/MB_TestBounty.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bee98bbd8e50e208c8f9ee6c2a8560f183a2bba774f090b183ab236ba7ebd22 +size 38649 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_1.uasset new file mode 100644 index 00000000..79086246 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_1.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd5b80d48c39e4dbd4f62dafaecb54ec5c7fa2a1d12dfbdd1f9be85cc74b368a +size 64021 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_2.uasset new file mode 100644 index 00000000..30c128aa --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_2.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d27935ca0589d21ab1e7ca9ebd3de80fa4666c43fdc239cbe4cd13358ecb5d71 +size 64015 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_3.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_3.uasset new file mode 100644 index 00000000..7804ed1b --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_3.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:127a3c5d1ddd972ed32552a4e0e61f4d72d94ed978d98ad9eec8933e2711c6c0 +size 64009 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_1.uasset new file mode 100644 index 00000000..d88016a5 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_1.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e89aba9e6af5b1bd48b5b2b48242eb1d057a63f552b22ea6122091a81556d9d6 +size 22765 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_2.uasset new file mode 100644 index 00000000..f61482fd --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_2.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ae78ca79d0f944fd9ae21df42c30f3993f595e6a750455a5960cd0e4b890143 +size 22827 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_3.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_3.uasset new file mode 100644 index 00000000..f575b5b1 --- /dev/null +++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_3.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:736bb99394a031e33b1a14f712b0ad0b6540cc047153933347b449746f46ffc5 +size 22761 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/BC_TestBounty1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/BC_TestBounty1.uasset deleted file mode 100644 index 6235ec12..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/BC_TestBounty1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd50cc9532eeeff9ce7cb812e9e03c28b92860a7793f37f4f39b9a061a0a075a -size 27020 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_1.uasset deleted file mode 100644 index a63f7b7c..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f8c2b9772377d7c970c6e0b27eb1c7e70859df8ecc6e37d8e76d6700c63aa93d -size 39590 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_2.uasset deleted file mode 100644 index 9750c92a..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_2.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1236ba19a7d2c62dcc1607f3e73db7b8cb67f0fbcc84d34ff603ca98807050f -size 39541 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_3.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_3.uasset deleted file mode 100644 index e06e3641..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/Checkpoints/CC_Test1_3.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd19115cde54422bb8a86f8de553f1e9de27982bde4fd798eaa08290459f9c1e -size 39540 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/Checkpoints/CC_SideTest1_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/Checkpoints/CC_SideTest1_1.uasset deleted file mode 100644 index 8ed2eabd..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/Checkpoints/CC_SideTest1_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2d30e5ffdcb69db19e7d829035a0ebd1e73cac5fd1b10300e081a7bb67d4a92 -size 39477 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/Checkpoints/CC_SideTest1_Replacement_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/Checkpoints/CC_SideTest1_Replacement_1.uasset deleted file mode 100644 index 72155b25..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/Checkpoints/CC_SideTest1_Replacement_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:14eaef3239f5095b66728601fa95223c30fd67cc9bf4c52b055734aac60a7388 -size 39708 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/SB_TestSideBounty1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/SB_TestSideBounty1.uasset deleted file mode 100644 index 8d8f5cc2..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty1/SB_TestSideBounty1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e13db15ea111f6efb21a5777152b8a4a6a34c5af4aa592b73b6fe7d0b9f0a9c -size 27169 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/Checkpoints/CC_SideTest2_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/Checkpoints/CC_SideTest2_1.uasset deleted file mode 100644 index 1f9e13bf..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/Checkpoints/CC_SideTest2_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a87f05fe6854ed82a5db66b2c07fbb381be0d153e5abba8a486f408b2e004b27 -size 39387 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/Checkpoints/CC_SideTest2_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/Checkpoints/CC_SideTest2_2.uasset deleted file mode 100644 index d8e02fed..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/Checkpoints/CC_SideTest2_2.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3cf8bab0d0b5317a555098d30d7d4864b800c47b81dcd522cc64fc142153ac3e -size 39564 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/SB_TestSideBounty_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/SB_TestSideBounty_2.uasset deleted file mode 100644 index a04d5636..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty1/SideBounties/TestSideBounty2/SB_TestSideBounty_2.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:646e508a4884b73eaac398d4061f707f16b12a4eccd28bee398496050b16aa9e -size 27303 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/BC_TestBounty2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/BC_TestBounty2.uasset deleted file mode 100644 index 885ca38f..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/BC_TestBounty2.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:42dfa3a8b7f8c66bbdf4f9875672f9efc2501e7aee9e28f0dfbd72a1259b0493 -size 22778 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/SB_SideTest2_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/SB_SideTest2_1.uasset deleted file mode 100644 index abd1ec8f..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/SB_SideTest2_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2190aa3998c9523b02ee9f4e31c6baa8797c220bf1f0a024a05110034ac4ef1b -size 23037 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/checkpoints/CC_Replacement_SideTest2_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/checkpoints/CC_Replacement_SideTest2_1.uasset deleted file mode 100644 index ede79440..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/checkpoints/CC_Replacement_SideTest2_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:62aabf7b119ce98c1b24d02b5e1f16040b79d1777b6971d344aae896481b93a9 -size 39556 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/checkpoints/CC_SideTest2_First.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/checkpoints/CC_SideTest2_First.uasset deleted file mode 100644 index a83ba390..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/SideBounties/checkpoints/CC_SideTest2_First.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f92ca0a9deafc5e5cad2efc032ff4c6f96ffcfaeeab24074e6dd2cffcdfb765d -size 39558 diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/checkpoints/CC_Test2_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/checkpoints/CC_Test2_1.uasset deleted file mode 100644 index ec736e3e..00000000 --- a/EndlessVendetta/Content/BountySystem/TestBounties/Test_Bounty2/checkpoints/CC_Test2_1.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ea139267d19360db4dadf77cd0e2684922997ddaec704ff427b261a38051cfab -size 39284 diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset index 6e0e13d4..fbbc1d32 100644 --- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset +++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d593d68d5b9a9fc58b1b7ecc44936b84e361aaa1762ab04c5924e36bfd45bee9 -size 61494 +oid sha256:511de8633b9a821219aa62eb16918529e83282a370301627484865a83a470109 +size 62122 diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Interact.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Interact.uasset new file mode 100644 index 00000000..ef199a6b --- /dev/null +++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Interact.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56e5fddda3b901b313fde855f6615339551cedbc06032712cda370c384bab101 +size 1370 diff --git a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset index 2bc21ec7..6f9680cf 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:e84853e2ab5cb8653ef3686fdd8ce458fbadd1261807bdc73feb5212015290ce -size 17496 +oid sha256:574a8a6fe6bd0d9ee1e4e32e2fadfbaea00a337525907ac14aba3dd4bef1b164 +size 18076 diff --git a/EndlessVendetta/Content/LevelPrototyping/Scenes/TutorialHit.umap b/EndlessVendetta/Content/LevelPrototyping/Scenes/TutorialHit.umap index 7e581a43..dfc5e57a 100644 --- a/EndlessVendetta/Content/LevelPrototyping/Scenes/TutorialHit.umap +++ b/EndlessVendetta/Content/LevelPrototyping/Scenes/TutorialHit.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ffb6c31ffcde26ae8a0f677a27ced553a7f10e9a7a41786f4c7a319f02205bc -size 411380 +oid sha256:2be413996287b89ce886902c79a65c948770ca63fb50fe29c142907ebc90056e +size 380456 diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset index a396b15f..df604f34 100644 --- a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset +++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04de015b0bb32939230883654ad41bf7054c369134749aeb11e98f963a1c0a09 -size 4464 +oid sha256:68858de7c5f528fefe1d4332ecb6d02bbb53a59f6ecb51c4c2f2d3920bf33ca5 +size 5710 diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp index 8e976d0a..6a2debfc 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp @@ -25,7 +25,6 @@ AAICharacter::AAICharacter() void AAICharacter::BeginPlay() { Super::BeginPlay(); - } // Called every frame @@ -54,31 +53,7 @@ float AAICharacter::TakeDamage(const float DamageAmount, FDamageEvent const& Dam CurrentHealth = 0; UE_LOG(LogTemp, Display, TEXT("%s is dead"), *CharacterName.ToString()); - /*const AAI_EnemyController* AIController = Cast(GetController()); - AIController->GetBrainComponent()->StopLogic(" is dead");*/ - this->Tags.Add(FName("Dead")); - //Ragdoll - DetachFromControllerPendingDestroy(); - UCapsuleComponent* CapsuleComp = GetCapsuleComponent(); - CapsuleComp->SetCollisionEnabled(ECollisionEnabled::NoCollision); - CapsuleComp->SetCollisionResponseToAllChannels(ECR_Ignore); - - GetMesh()->SetCollisionProfileName(TEXT("Ragdoll")); - SetActorEnableCollision(true); - - GetMesh()->SetAllBodiesSimulatePhysics(true); - GetMesh()->SetSimulatePhysics(true); - GetMesh()->WakeAllRigidBodies(); - GetMesh()->bBlendPhysics = true; - - if (UCharacterMovementComponent* CharacterComp = Cast(GetMovementComponent())) - { - CharacterComp->StopMovementImmediately(); - CharacterComp->DisableMovement(); - CharacterComp->SetComponentTickEnabled(false); - } - - SetLifeSpan(30.0f); + OnDeath(); } return Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser); } @@ -98,3 +73,31 @@ void AAICharacter::SetupStimuliSourceComponent() } } +void AAICharacter::OnDeath() +{ + /*const AAI_EnemyController* AIController = Cast(GetController()); + AIController->GetBrainComponent()->StopLogic(" is dead");*/ + this->Tags.Add(FName("Dead")); + //Ragdoll + DetachFromControllerPendingDestroy(); + UCapsuleComponent* CapsuleComp = GetCapsuleComponent(); + CapsuleComp->SetCollisionEnabled(ECollisionEnabled::NoCollision); + CapsuleComp->SetCollisionResponseToAllChannels(ECR_Ignore); + + GetMesh()->SetCollisionProfileName(TEXT("Ragdoll")); + SetActorEnableCollision(true); + + GetMesh()->SetAllBodiesSimulatePhysics(true); + GetMesh()->SetSimulatePhysics(true); + GetMesh()->WakeAllRigidBodies(); + GetMesh()->bBlendPhysics = true; + + if (UCharacterMovementComponent* CharacterComp = Cast(GetMovementComponent())) + { + CharacterComp->StopMovementImmediately(); + CharacterComp->DisableMovement(); + CharacterComp->SetComponentTickEnabled(false); + } + + SetLifeSpan(30.0f); +} diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h index 44bbd309..09d63741 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h @@ -35,6 +35,8 @@ protected: class UAIPerceptionStimuliSourceComponent* StimuliSourceComponent; void SetupStimuliSourceComponent(); + virtual void OnDeath(); + public: // Called every frame virtual void Tick(float DeltaTime) override; diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp index 75f4a7f1..6c14c0cc 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp @@ -74,3 +74,8 @@ void AAIControlHub::SetPlayerLastKnownLocation(FVector Location) PlayerLastKnownLocation = Location; } } + +void AAIControlHub::RemoveEnemyActor(AEnemyCharacter* EnemyActor) +{ + EnemyActors.Remove(EnemyActor); +} diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h index d75b7fd6..bbe2e21e 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h @@ -35,6 +35,7 @@ public: int GetAlertLevel() const; void OnAlertLevelChanged(); void SetPlayerLastKnownLocation(FVector Location = FVector(0, 0, 0)); + void RemoveEnemyActor(AEnemyCharacter* EnemyActor); private: int AlertLevel = 0; diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp index aa84cb9b..e7e9360c 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp @@ -23,6 +23,16 @@ void AEnemyCharacter::BeginPlay() CharacterName = "Enemy"; } +void AEnemyCharacter::OnDeath() +{ + Super::OnDeath(); + DelegatedControlHub->AlertLevelEvent.Remove(AlertLevelDelegateHandle); + DelegatedControlHub->HuntPlayerEvent.Remove(HuntPlayerDelegateHandle); + AlertLevelDelegateHandle.Reset(); + HuntPlayerDelegateHandle.Reset(); + DelegatedControlHub->RemoveEnemyActor(this); +} + // Called every frame void AEnemyCharacter::Tick(float DeltaTime) { @@ -38,6 +48,8 @@ void AEnemyCharacter::SubscribeToGroupAIEvents(AAIControlHub* ControlHub) void AEnemyCharacter::SetAlertLevel(const int NewAlertLevel) const { + if (!IsValid(this)) return; + if (!IsValid(GetController())) return; Cast(GetController())->GetBlackboardComponent()->SetValueAsInt("AlertLevel", NewAlertLevel); } @@ -49,6 +61,8 @@ void AEnemyCharacter::SetLocalAlertLevel(int NewAlertLevel) const void AEnemyCharacter::HuntPlayer(FVector PlayerLastKnownLocation) { + if (!IsValid(this)) return; + if (!IsValid(GetController())) return; SetAlertLevel(2); Cast(GetController())->GetBlackboardComponent()->SetValueAsVector("LastKnownLocation", PlayerLastKnownLocation); } diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h index 6d3deab7..7b6f23f4 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h @@ -21,6 +21,7 @@ protected: // Called when the game starts or when spawned virtual void BeginPlay() override; class AAIControlHub* DelegatedControlHub; + virtual void OnDeath() override; public: // Called every frame diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp index d7371066..0a866247 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp @@ -19,7 +19,7 @@ EBTNodeResult::Type UBTTask_AttackPlayer::ExecuteTask(UBehaviorTreeComponent& Ow { FVector const Origin = AIController->GetPawn()->GetActorLocation(); FVector const PlayerLocation = Blackboard->GetValueAsVector("TargetLocation"); - DrawDebugLine(GetWorld(), Origin, PlayerLocation, FColor::Green, false, 1.f, 0, 1.f); + //DrawDebugLine(GetWorld(), Origin, PlayerLocation, FColor::Green, false, 1.f, 0, 1.f); FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); return EBTNodeResult::Succeeded; diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp index ae8fbd8d..fe2a8c58 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp @@ -61,7 +61,7 @@ void ABountyClass::IncrementBountyCheckpoint() } // Bounty Completion Condition - if (BountyCheckpoints.Num() <= MinCPsRequiredForCompletion) + if (BountyCheckpoints.Num() <= 1) { Completed = true; BountyCheckpoints[0]->Active = false; @@ -93,38 +93,6 @@ void ABountyClass::CollectRewards_Implementation() UE_LOG(LogTemp, Warning, TEXT("The player has gained $%d for completing the bounty!"), RewardMoney); } -void ABountyClass::UpdateBountyCheckpoints(TMap> ReplacementCheckpoints) -{ - if (ReplacementCheckpoints.IsEmpty()) - { - UE_LOG(LogTemp, Warning, TEXT("No Replacement Steps found")); - return; - } - FActorSpawnParameters SpawnParameters; - SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; - for (auto ReplacementCheckpoint : ReplacementCheckpoints) - { - BountyCheckpoints[ReplacementCheckpoint.Key]->Destroy(); - ReplacementCheckpointClass = ReplacementCheckpoint.Value; - - FVector Loc = ReplacementCheckpointClass.GetDefaultObject()->GetCheckpointSpawnTransform().GetLocation(); - FRotator Rot = ReplacementCheckpointClass.GetDefaultObject()->GetCheckpointSpawnTransform().GetRotation().Rotator(); - ACheckpointClass* SpawnedCheckpoint = Cast(GetWorld()->SpawnActor(ReplacementCheckpoint.Value, Loc, Rot, SpawnParameters)); - - if (SpawnedCheckpoint == nullptr) - { - UE_LOG(LogTemp, Fatal, TEXT("The new checkpoint hasn't spawned in properly or can't be cast to")); - return; - } - - BountyCheckpoints[ReplacementCheckpoint.Key] = SpawnedCheckpoint; - if (ReplacementCheckpoint.Key == 0) - { - BountyCheckpoints[ReplacementCheckpoint.Key]->Active = true; - BountyCheckpoints[ReplacementCheckpoint.Key]->CompletedCheckpoint.AddDynamic(this, &ABountyClass::IncrementBountyCheckpoint); - } - } -} diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h index 4f65bae9..88a6c5e7 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h @@ -36,12 +36,6 @@ protected: bool Completed = false; - /** - * Default is 2 as final step in most Bounties is to return to ship, - * which can't be completed. Change to 1 if that's not the case. - */ - int MinCPsRequiredForCompletion = 2; - // Spawned in Checkpoints for this Bounty TArray BountyCheckpoints; @@ -61,7 +55,7 @@ public: { return Completed; } - + FString GetBountyTitle() { return BountyTitle; @@ -72,6 +66,11 @@ public: return BountyDesc; } + int GetBountyrewardMoney() + { + return RewardMoney; + } + FVector GetCheckpointLocation() { if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr) @@ -126,17 +125,4 @@ public: // Collect Money in C++, any other special reward will be implemented in BP if neccessary UFUNCTION(BlueprintCallable, BlueprintNativeEvent) void CollectRewards(); - - void DestroyReturnToShipStep() - { - if (BountyCheckpoints.Num() > 1) - { - UE_LOG(LogTemp, Warning, TEXT("Didn't Destroy final step as more than one steps still left in Bounty")); - } - - BountyCheckpoints[0]->Destroy(); - } - - // Called by Bounty Director, replaces specified checkpoints to alter Bounty when player completes a side bounty - void UpdateBountyCheckpoints(TMap> ReplacementCheckpoints); }; diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp index 7cf44c2a..56ed2056 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp @@ -3,6 +3,7 @@ #include "BountyDirector.h" +#include "Blueprint/UserWidget.h" #include "Components/ArrowComponent.h" // Sets default values @@ -34,16 +35,8 @@ void ABountyDirector::BeginPlay() if (!IsValid(BountyAttachmentPoint)) UE_LOG(LogTemp, Fatal, TEXT("There's no Bounty Attachment UArrowComponent on Players Char ")); break; } - - // Setup up starting Side Bounty indexes - for (int Index = 0; Index < 3; Index++) - { - CurrentSideBountyIndexes.Add(Index); - } - - ActiveSideBounties.SetNum(3); + SpawnBountyAndItsSideBounties(); - UpdateBountyDisplay(); } void ABountyDirector::SpawnBountyAndItsSideBounties() @@ -61,27 +54,22 @@ void ABountyDirector::SpawnBountyAndItsSideBounties() const FAttachmentTransformRules AttachmentTransformRules(EAttachmentRule::SnapToTarget, true); BountyActor->AttachToComponent(BountyAttachmentPoint, AttachmentTransformRules); - ActiveBounty = Cast(BountyActor); + ActiveBounty = Cast(BountyActor); if (!IsValid(ActiveBounty)) UE_LOG(LogTemp, Fatal, TEXT("Failed to Cast to Bounty class")); // WHEN MARCEL STOPS PLAYING WITH THE CHARACTER, ADD THIS BOUNTY TO PLAYERS ARRAY OF ACTIVE BOUNTIES!!!!! ActiveBounty->CompletedFirstCheckpoint.AddDynamic(this, &ABountyDirector::DestroyActiveSideBounties); - - // Spawn in Side Bounties which are linked to the Main Bounty - int ActiveSideBountyIndex = 0; - for (int CurrentSideBountyIndex : CurrentSideBountyIndexes) + ActiveSideBounties.Reset(); + for (TSubclassOf SideBountyClass : ActiveBounty->GetSideBountiesToSpawn()) { - if (SideBountyClassArray.Num() <= CurrentSideBountyIndex || !IsValid(SideBountyClassArray[CurrentSideBountyIndex])) continue; - - AActor* SideBountyActor = GetWorld()->SpawnActor(SideBountyClassArray[CurrentSideBountyIndex], PlayerChar->GetActorLocation(), PlayerChar->GetActorRotation(), SpawnParams); + if (!IsValid(SideBountyClass)) continue; + AActor* SideBountyActor = GetWorld()->SpawnActor(SideBountyClass, PlayerChar->GetActorLocation(), PlayerChar->GetActorRotation(), SpawnParams); + SideBountyActor->AttachToComponent(BountyAttachmentPoint, AttachmentTransformRules); ASideBountyClass* SideBounty = Cast(SideBountyActor); - SideBounty->AttachToComponent(BountyAttachmentPoint, AttachmentTransformRules); - - ActiveSideBounties[ActiveSideBountyIndex] = SideBounty; - SideBounty->ActiveSBC_Index = ActiveSideBountyIndex; - ActiveSideBounties[ActiveSideBountyIndex]->CompletedSideBounty.AddDynamic(this, &ABountyDirector::SideBountyCompleted); + if (!IsValid(SideBounty)) UE_LOG(LogTemp, Fatal, TEXT("A SideBounty for %s has been set to a wrong type"), *ActiveBounty->GetBountyTitle()); + int i = ActiveSideBounties.Add(SideBounty); + ActiveSideBounties[i]->CompletedSideBounty.AddDynamic(this, &ABountyDirector::EarnFavours); // ONCE AGAIN WHEN MARCEL STOPS PLAYING WITH THE CHARACTER, ADD THIS SIDE BOUNTY TO PLAYERS ARRAY OF ACTIVE BOUNTIES!!!!! - ActiveSideBountyIndex++; } } @@ -97,28 +85,21 @@ void ABountyDirector::FinishActiveBounty() ActiveBounty->CollectRewards(); // Destroy old Bounties - ActiveBounty->DestroyReturnToShipStep(); ActiveBounty->Destroy(); DestroyActiveSideBounties(); // Increment Main and Side Bounty Indexes CurrentBountyIndex++; - for (int i = 0; i < 3; i++) - { - CurrentSideBountyIndexes[i] += 3; - } // Game Completion Check if (CurrentBountyIndex >= BountyClassArray.Num()) { UE_LOG(LogTemp, Warning, TEXT("Finished all bounties currently available in the game :)")); ActiveBounty = nullptr; - UpdateBountyDisplay(); return; } SpawnBountyAndItsSideBounties(); - UpdateBountyDisplay(); } void ABountyDirector::DestroyActiveSideBounties() @@ -132,21 +113,169 @@ void ABountyDirector::DestroyActiveSideBounties() SideBounty->DestroyCheckpoints(); SideBounty->Destroy(); } - - UpdateBountyDisplay(); } -void ABountyDirector::SideBountyCompleted(int SideBountyIndex) +// ----------- Favour Shop --------------- + +void ABountyDirector::EarnFavours(int FavoursEarned) { - UE_LOG(LogTemp,Warning,TEXT("Updating Main Bounties Checkpoints")); - ActiveBounty->UpdateBountyCheckpoints(ActiveSideBounties[SideBountyIndex]->GetReplacementCheckpoints()); + Favours += FavoursEarned; +} - // WHEN MARCEL STOPS PLAYING WITH PLAYER CHAR, REMOVE THIS SIDE BOUNTY FROM ACTIVE BOUNTIES - ActiveSideBounties[SideBountyIndex]->CollectRewards(); - ActiveSideBounties[SideBountyIndex]->DestroyCheckpoints(); - ActiveSideBounties[SideBountyIndex]->Destroy(); - - UpdateBountyDisplay(); +void ABountyDirector::BuyCustomBountyAlteration_1() +{ + if (!IsValid(ActiveBounty)) return; + int Cost = ActiveBounty->GetCustomBountyAlteration_1_Cost(); + if (Cost == 0 || Favours < Cost || ActiveBounty->ActivatedCBA_1) return; + Favours -= Cost; + PC_Display->UpdateFavourCount(Favours); + ActiveBounty->ActivatedCBA_1 = true; + ActiveBounty->ActivateCustomBountyAlteration_1(); +} + + +void ABountyDirector::BuyCustomBountyAlteration_2() +{ + if (!IsValid(ActiveBounty)) return; + int Cost = ActiveBounty->GetCustomBountyAlteration_2_Cost(); + if (Cost == 0 || Favours < Cost || ActiveBounty->ActivatedCBA_2) return; + Favours -= Cost; + PC_Display->UpdateFavourCount(Favours); + ActiveBounty->ActivatedCBA_2 = true; + ActiveBounty->ActivateCustomBountyAlteration_2(); +} + +void ABountyDirector::BuyCustomBountyAlteration_3() +{ + if (!IsValid(ActiveBounty)) return; + int Cost = ActiveBounty->GetCustomBountyAlteration_3_Cost(); + if (Cost == 0 || Favours < Cost || ActiveBounty->ActivatedCBA_3) return; + Favours -= Cost; + PC_Display->UpdateFavourCount(Favours); + ActiveBounty->ActivatedCBA_3 = true; + ActiveBounty->ActivateCustomBountyAlteration_3(); +} + +void ABountyDirector::BuyAmmoDrop() +{ + if (!IsValid(ActiveBounty)) return; + if (Favours < 1 || ActiveBounty->ActivateAmmoDrops) return; + Favours--; + PC_Display->UpdateFavourCount(Favours); + ActiveBounty->ActivateAmmoDrops = true; + ActiveBounty->SpawnAmmoDrops(); +} + +void ABountyDirector::BuyHealthDrop() +{ + if (!IsValid(ActiveBounty)) return; + if (Favours < 1 || ActiveBounty->ActivatedHealthDrops) return; + Favours--; + PC_Display->UpdateFavourCount(Favours); + ActiveBounty->ActivatedHealthDrops = true; + ActiveBounty->SpawnHealthDrops(); +} + +void ABountyDirector::BuyEnemyRadio() +{ + if (!IsValid(ActiveBounty)) return; + if (Favours < 1 || ActiveBounty->ActivatedRadio) return; + Favours--; + PC_Display->UpdateFavourCount(Favours); + ActiveBounty->ActivatedRadio = true; + ActiveBounty->ActivateEnemyRadio(); +} + +void ABountyDirector::BuyFavours() +{ + if (PlayerChar->Money < FavourCost) return; + PlayerChar->Money -= FavourCost; + Favours++; + PC_Display->UpdateFavourCount(Favours); +} + +// ----------- PC Display --------------- + +void ABountyDirector::Interact() +{ + UpdateBountyProgression(); + FInputModeUIOnly InputMode; + APlayerController* PlayerController = GetWorld()->GetFirstPlayerController(); + + PC_DisplayWidget = CreateWidget(GetWorld(), PC_DisplayWidgetClass); + PC_DisplayWidget->AddToViewport(3); + + PlayerController->SetInputMode(InputMode); + PlayerController->bShowMouseCursor = true; + PlayerController->bEnableClickEvents = true; + PlayerController->bEnableMouseOverEvents = true; + + PC_Display = Cast(PC_DisplayWidget); + bool GameOver = !IsValid(ActiveBounty); + PC_Display->PC_Display_Info.IsGameOver = GameOver; + PC_Display->LogoutFromBountyDirectorPC.AddDynamic(this, &ABountyDirector::DestroyBountyDirectorPCWidget); + + if (GameOver) + { + PC_Display->LoadOS(); + return; + } + + // Info about main bounty + PC_Display->PC_Display_Info.MB_Title = GetBountyTitle(); + PC_Display->PC_Display_Info.MB_Desc = GetBountyDescription(); + PC_Display->PC_Display_Info.MB_Reward = GetBountyReward(); + + // Info about side bounties + PC_Display->PC_Display_Info.SB_Title.Reset(); + PC_Display->PC_Display_Info.SB_Icon.Reset(); + PC_Display->PC_Display_Info.SB_Desc.Reset(); + PC_Display->PC_Display_Info.SB_Reward.Reset(); + for (ASideBountyClass* SideBounty : ActiveSideBounties) + { + if (!IsValid(SideBounty) || SideBounty->IsCompleted()) continue; + PC_Display->PC_Display_Info.SB_Title.Add(SideBounty->GetBountyTitle()); + PC_Display->PC_Display_Info.SB_Icon.Add(SideBounty->GetActiveWaypointIcon()); + PC_Display->PC_Display_Info.SB_Desc.Add(SideBounty->GetBountyDesc()); + PC_Display->PC_Display_Info.SB_Reward.Add(SideBounty->GetRewardInFavours()); + } + + // Info about main bounty alterations + PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Reset(); + PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Reset(); + + PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Add(ActiveBounty->GetCustomBountyAlteration_1_Description()); + PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Add(ActiveBounty->GetCustomBountyAlteration_2_Description()); + PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Add(ActiveBounty->GetCustomBountyAlteration_3_Description()); + + PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Add(ActiveBounty->GetCustomBountyAlteration_1_Cost()); + PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Add(ActiveBounty->GetCustomBountyAlteration_2_Cost()); + PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Add(ActiveBounty->GetCustomBountyAlteration_3_Cost()); + + PC_Display->PC_Display_Info.PlayersFavourAmount = Favours; + + // Button Delegates + PC_Display->BuyCba_1.AddDynamic(this, &ABountyDirector::BuyCustomBountyAlteration_1); + PC_Display->BuyCba_2.AddDynamic(this, &ABountyDirector::BuyCustomBountyAlteration_2); + PC_Display->BuyCba_3.AddDynamic(this, &ABountyDirector::BuyCustomBountyAlteration_3); + PC_Display->BuyAmmoDrop.AddDynamic(this, &ABountyDirector::BuyAmmoDrop); + PC_Display->BuyHealthDrop.AddDynamic(this, &ABountyDirector::BuyHealthDrop); + PC_Display->BuyRadio.AddDynamic(this, &ABountyDirector::BuyEnemyRadio); + PC_Display->BuyFavour.AddDynamic(this, &ABountyDirector::BuyFavours); + + PC_Display->LoadOS(); +} + +void ABountyDirector::DestroyBountyDirectorPCWidget() +{ + if (IsValid(PC_DisplayWidget)) PC_DisplayWidget->RemoveFromParent(); + + FInputModeGameOnly InputMode; + APlayerController* PlayerController = GetWorld()->GetFirstPlayerController(); + PlayerController->SetInputMode(InputMode); + PlayerController->bShowMouseCursor = false; + PlayerController->bEnableClickEvents = false; + PlayerController->bEnableMouseOverEvents = false; } diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h index c5c67311..41fc840c 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h @@ -3,14 +3,16 @@ #pragma once #include "CoreMinimal.h" -#include "BountyClass.h" +#include "MainBountyClass.h" #include "SideBountyClass.h" #include "EndlessVendetta/EndlessVendettaCharacter.h" +#include "EndlessVendetta/InteractableActor.h" +#include "EndlessVendetta/UserWidgets/PC_Display.h" #include "GameFramework/Actor.h" #include "BountyDirector.generated.h" UCLASS() -class ENDLESSVENDETTA_API ABountyDirector : public AActor +class ENDLESSVENDETTA_API ABountyDirector : public AInteractableActor { GENERATED_BODY() @@ -20,48 +22,76 @@ class ENDLESSVENDETTA_API ABountyDirector : public AActor UArrowComponent* BountyAttachmentPoint; // Ordered Array of Main Bounties - UPROPERTY(EditDefaultsOnly, Category = "Bounty") - TArray> BountyClassArray; + UPROPERTY(EditDefaultsOnly, Category = "Bounty Director") + TArray> BountyClassArray; - // Ordered Array of Side Bounties, in three's - UPROPERTY(EditDefaultsOnly, Category = "Bounty") - TArray> SideBountyClassArray; + UPROPERTY(EditDefaultsOnly, Category = "Bounty Director") + int FavourCost = 500; + + UPROPERTY(EditDefaultsOnly, Category = "Bounty Director") + TSubclassOf PC_DisplayWidgetClass; + + UUserWidget* PC_DisplayWidget; + + UPC_Display* PC_Display; int CurrentBountyIndex = 0; - TArray CurrentSideBountyIndexes; - UPROPERTY(VisibleAnywhere, Category = "Bounty") - ABountyClass* ActiveBounty; + AMainBountyClass* ActiveBounty; UPROPERTY(VisibleAnywhere, Category = "Bounty") TArray ActiveSideBounties; // Checks if completed the bounty, and moves onto the next if so - UFUNCTION(BlueprintCallable, Category = "Bounty") void UpdateBountyProgression(); void SpawnBountyAndItsSideBounties(); // Collect reward for current Bounty and prepare for the next void FinishActiveBounty(); + + // Opens up Bounty Director PC Interface + void Interact() override; protected: + int Favours = 20; + // Called when the game starts or when spawned virtual void BeginPlay() override; - - /** Blueprint implemented function called from c++, handles aesthetic changes to bounty display - based on data from ActiveBC and ActiveSBC */ - UFUNCTION(BlueprintImplementableEvent, Category = "bounty") - void UpdateBountyDisplay(); - - // Ran when a Side Bounty is completed and wants to update the active bounties checkpoints - UFUNCTION() - void SideBountyCompleted(int SideBountyIndex); - + UFUNCTION() void DestroyActiveSideBounties(); + UFUNCTION() + void DestroyBountyDirectorPCWidget(); + + // Listens for when a side bounty is completed + UFUNCTION() + void EarnFavours(int FavoursEarned); + +// -------- Buy Buttons -------- + UFUNCTION() + void BuyCustomBountyAlteration_1(); + + UFUNCTION() + void BuyCustomBountyAlteration_2(); + + UFUNCTION() + void BuyCustomBountyAlteration_3(); + + UFUNCTION() + void BuyAmmoDrop(); + + UFUNCTION() + void BuyHealthDrop(); + + UFUNCTION() + void BuyEnemyRadio(); + + UFUNCTION() + void BuyFavours(); + public: // Called every frame virtual void Tick(float DeltaTime) override; @@ -70,29 +100,24 @@ public: ABountyDirector(); // ------ Getters ------ - UFUNCTION(BlueprintCallable, Category = "Bounty") FString GetBountyTitle() { - return !IsValid(ActiveBounty) ? FString("N/A") : ActiveBounty->GetBountyTitle(); + return !IsValid(ActiveBounty) ? FString("") : ActiveBounty->GetBountyTitle(); } - UFUNCTION(BlueprintCallable, Category = "Bounty") + UTexture2D* GetBountyIcon() + { + return !IsValid(ActiveBounty) ? nullptr : ActiveBounty->GetActiveWaypointIcon(); + } + FString GetBountyDescription() { - return !IsValid(ActiveBounty) ? FString("N/A") : ActiveBounty->GetBountyDesc(); + return !IsValid(ActiveBounty) ? FString("") : ActiveBounty->GetBountyDesc(); } - UFUNCTION(BlueprintCallable, Category = "Bounty") - FString GetSideBountyTitle(int SideBountyIndex) + int GetBountyReward() { - return (SideBountyIndex > 2 || SideBountyIndex < 0 || !IsValid(ActiveSideBounties[SideBountyIndex])) ? FString("N/A") : ActiveSideBounties[SideBountyIndex]->GetBountyTitle(); + return !IsValid(ActiveBounty) ? 0 : ActiveBounty->GetBountyrewardMoney(); } - - UFUNCTION(BlueprintCallable, Category = "Bounty") - FString GetSideBountyDescription(int SideBountyIndex) - { - return (SideBountyIndex > 2 || SideBountyIndex < 0 || !IsValid(ActiveSideBounties[SideBountyIndex])) ? FString("N/A") : ActiveSideBounties[SideBountyIndex]->GetBountyDesc(); - } - }; diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp new file mode 100644 index 00000000..f6cc0edd --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "MainBountyClass.h" + +void AMainBountyClass::SpawnAmmoDrops() +{ + UE_LOG(LogTemp, Display, TEXT("Bought Ammo Drops, but its not implemented yet")); + // FActorSpawnParameters SpawnParameters; + // SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + // for (FTransform Spawn : AmmoDropSpawnTransforms) + // { + // GetWorld()->SpawnActor(AmmoDropClass, Spawn.GetLocation(), Spawn.GetRotation().Rotator(), SpawnParameters); + // } +} + +void AMainBountyClass::SpawnHealthDrops() +{ + UE_LOG(LogTemp, Display, TEXT("Bought Health Drops, but its not implemented yet")); + // FActorSpawnParameters SpawnParameters; + // SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + // for (FTransform Spawn : HealthDropSpawnTransforms) + // { + // GetWorld()->SpawnActor(HealthDropClass, Spawn.GetLocation(), Spawn.GetRotation().Rotator(), SpawnParameters); + // } +} \ No newline at end of file diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h new file mode 100644 index 00000000..96dc99cc --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h @@ -0,0 +1,122 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "BountyClass.h" +#include "SideBountyClass.h" +#include "MainBountyClass.generated.h" + +/** + * + */ +UCLASS() +class ENDLESSVENDETTA_API AMainBountyClass : public ABountyClass +{ + GENERATED_BODY() + +protected: + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TArray> SideBountiesToSpawn; + + // ---------------- Bounty Alterations ---------------- + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TArray CustomBountyAlteration_Description; + + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TArray CustomBountyAlteration_Cost; + + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TArray AmmoDropSpawnTransforms; + + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TSubclassOf AmmoDropClass; + + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TArray HealthDropSpawnTransforms; + + UPROPERTY(EditDefaultsOnly, Category = "Bounty") + TSubclassOf HealthDropClass; + + bool HasEnemyRadio = false; + +public: + TArray> GetSideBountiesToSpawn() + { + return SideBountiesToSpawn; + } + + // ------------- Custom Bounty Alterations ------------- + UFUNCTION(BlueprintImplementableEvent, Category = "Bounty") + void ActivateCustomBountyAlteration_1(); + + UFUNCTION(BlueprintImplementableEvent, Category = "Bounty") + void ActivateCustomBountyAlteration_2(); + + UFUNCTION(BlueprintImplementableEvent, Category = "Bounty") + void ActivateCustomBountyAlteration_3(); + + bool ActivatedCBA_1 = false; + bool ActivatedCBA_2 = false; + bool ActivatedCBA_3 = false; + + UFUNCTION(BlueprintCallable, Category = "Bounty") + FString GetCustomBountyAlteration_1_Description() + { + return CustomBountyAlteration_Description.IsEmpty() ? FString("") : CustomBountyAlteration_Description[0]; + } + + UFUNCTION(BlueprintCallable, Category = "Bounty") + FString GetCustomBountyAlteration_2_Description() + { + return CustomBountyAlteration_Description.Num() <= 1 ? FString("") : CustomBountyAlteration_Description[1]; + } + + UFUNCTION(BlueprintCallable, Category = "Bounty") + FString GetCustomBountyAlteration_3_Description() + { + return CustomBountyAlteration_Description.Num() <= 2 ? FString("") : CustomBountyAlteration_Description[2]; + } + + UFUNCTION(BlueprintCallable, Category = "Bounty") + int GetCustomBountyAlteration_1_Cost() + { + return CustomBountyAlteration_Cost.IsEmpty() ? 0 : CustomBountyAlteration_Cost[0]; + } + + UFUNCTION(BlueprintCallable, Category = "Bounty") + int GetCustomBountyAlteration_2_Cost() + { + return CustomBountyAlteration_Cost.Num() <= 1 ? 0 : CustomBountyAlteration_Cost[1]; + } + + UFUNCTION(BlueprintCallable, Category = "Bounty") + int GetCustomBountyAlteration_3_Cost() + { + return CustomBountyAlteration_Cost.Num() <= 2 ? 0 : CustomBountyAlteration_Cost[2]; + } + // ------------- Simple Bounty Alterations ------------- + + void SpawnAmmoDrops(); + + bool ActivateAmmoDrops = false; + + void SpawnHealthDrops(); + + bool ActivatedHealthDrops = false; + + void ActivateEnemyRadio() + { + UE_LOG(LogTemp, Display, TEXT("Bought Radio, but it's not implemented yet")); + HasEnemyRadio = true; + } + + bool ActivatedRadio = false; + + // Concerned Enemies will call this function, if true, play funny poop voice line and stop enemies from being concerned + bool CheckIfHasEnemyRadio() + { + return HasEnemyRadio; + }; + +}; diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp index 7d63f3ba..d28c84e6 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp @@ -6,8 +6,7 @@ void ASideBountyClass::BeginPlay() { Super::BeginPlay(); - - MinCPsRequiredForCompletion = 1; + } void ASideBountyClass::IncrementBountyCheckpoint() @@ -16,8 +15,7 @@ void ASideBountyClass::IncrementBountyCheckpoint() if (Completed) { - - CompletedSideBounty.Broadcast(ActiveSBC_Index); + CompletedSideBounty.Broadcast(FavoursEarnedForCompletion); } } diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h index 9c0dd1e2..758c1e77 100644 --- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h @@ -6,30 +6,26 @@ #include "BountyClass.h" #include "SideBountyClass.generated.h" -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCompletedSideBounty, int, SB_Index); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCompletedSideBounty, int, FavoursEarned); UCLASS() class ENDLESSVENDETTA_API ASideBountyClass : public ABountyClass { GENERATED_BODY() - - UPROPERTY(EditDefaultsOnly, Category = "Side Bounty") - TMap> ReplacementCheckpoints; - + protected: + UPROPERTY(EditDefaultsOnly, Category = "Side Bounty") + int FavoursEarnedForCompletion = 1; + virtual void BeginPlay() override; public: FCompletedSideBounty CompletedSideBounty; - int ActiveSBC_Index; - - TMap> GetReplacementCheckpoints() - { - return ReplacementCheckpoints; - } - virtual void IncrementBountyCheckpoint() override; - void DestroyCheckpoints(); + int GetRewardInFavours() + { + return FavoursEarnedForCompletion; + } }; diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp index d27bdc42..1d8f5d11 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp @@ -6,6 +6,7 @@ #include "Components/CapsuleComponent.h" #include "EnhancedInputComponent.h" #include "EnhancedInputSubsystems.h" +#include "InteractableActor.h" #include "AI/EnemyCharacter.h" #include "GameFramework/CharacterMovementComponent.h" #include "Kismet/GameplayStatics.h" @@ -102,9 +103,29 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent* //Crouching EnhancedInputComponent->BindAction(CrouchAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::SetCrouch); EnhancedInputComponent->BindAction(CrouchAction, ETriggerEvent::Completed, this, &AEndlessVendettaCharacter::SetUnCrouch); + + //Interacting + EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::Interact); } } +void AEndlessVendettaCharacter::Interact() +{ + FHitResult OutHit; + FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam; + QueryParams.AddIgnoredActor(this); + FVector LT_Start = FirstPersonCameraComponent->GetComponentLocation(); + FVector LT_End = LT_Start + (FirstPersonCameraComponent->GetForwardVector() * InteractionRange); + if (!GetWorld()->LineTraceSingleByChannel(OutHit, LT_Start, LT_End, ECC_Camera, QueryParams)) return; + + AActor* HitActor = OutHit.GetActor(); + AInteractableActor* InteractableActor = Cast(HitActor); + if (!IsValid(InteractableActor)) return; + + InteractableActor->Interact(); +} + + void AEndlessVendettaCharacter::SetCrouch() { Crouch(); diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h index 3fb99716..cc936f99 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h @@ -68,6 +68,9 @@ class AEndlessVendettaCharacter : public ACharacter UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true")) UInputAction* CrouchAction; + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true")) + UInputAction* InteractAction; + public: AEndlessVendettaCharacter(); @@ -86,6 +89,8 @@ protected: AGadgetManager* GadgetManager; public: + int Money = 2000; + /** Look Input Action */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true")) class UInputAction* LookAction; @@ -144,6 +149,9 @@ protected: void EquipPrimary(); void EquipSecondary(); + UPROPERTY(EditDefaultsOnly, Category = "Interaction") + float InteractionRange = 250; + void Interact(); protected: // APawn interface diff --git a/EndlessVendetta/Source/EndlessVendetta/InteractableActor.cpp b/EndlessVendetta/Source/EndlessVendetta/InteractableActor.cpp new file mode 100644 index 00000000..346e151d --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/InteractableActor.cpp @@ -0,0 +1,33 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "InteractableActor.h" + +// Sets default values +AInteractableActor::AInteractableActor() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + +} + +// Called when the game starts or when spawned +void AInteractableActor::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void AInteractableActor::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + +void AInteractableActor::Interact() +{ + UE_LOG(LogTemp, Warning, TEXT("Interacted with %s"), *GetName()); +} + + diff --git a/EndlessVendetta/Source/EndlessVendetta/InteractableActor.h b/EndlessVendetta/Source/EndlessVendetta/InteractableActor.h new file mode 100644 index 00000000..4756112c --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/InteractableActor.h @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "InteractableActor.generated.h" + +UCLASS() +class ENDLESSVENDETTA_API AInteractableActor : public AActor +{ + GENERATED_BODY() + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + +public: + // Sets default values for this actor's properties + AInteractableActor(); + // Called every frame + virtual void Tick(float DeltaTime) override; + + virtual void Interact(); + +}; diff --git a/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.cpp b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.cpp new file mode 100644 index 00000000..1909b302 --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.cpp @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "PC_Display.h" + + diff --git a/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.h b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.h new file mode 100644 index 00000000..e2d8a2ca --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.h @@ -0,0 +1,93 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "PC_Display.generated.h" + +USTRUCT(BlueprintType) +struct FPC_Display_Info +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + bool IsGameOver; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + FString MB_Title; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + FString MB_Desc; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + int MB_Reward; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + TArray SB_Title; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + TArray SB_Icon; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + TArray SB_Desc; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + TArray SB_Reward; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + TArray CustomBountyAlteration_Desc; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + TArray CustomBountyAlteration_Cost; + + UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info") + int PlayersFavourAmount; +}; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FLogoutFromBountyDirectorPC); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyCBA_1); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyCBA_2); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyCBA_3); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyAmmoDrop); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyHealthDrop); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyRadio); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyFavour); + +UCLASS() +class ENDLESSVENDETTA_API UPC_Display : public UUserWidget +{ + GENERATED_BODY() +public: + // Button Delegates + UPROPERTY(BlueprintCallable, Category = PC_Display) + FLogoutFromBountyDirectorPC LogoutFromBountyDirectorPC; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyCBA_1 BuyCba_1; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyCBA_2 BuyCba_2; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyCBA_3 BuyCba_3; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyAmmoDrop BuyAmmoDrop; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyHealthDrop BuyHealthDrop; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyRadio BuyRadio; + UPROPERTY(BlueprintCallable, Category = PC_Display) + FBuyFavour BuyFavour; + + // USTRUCT + UPROPERTY(BlueprintReadOnly) + FPC_Display_Info PC_Display_Info; + + // Takes USTRUCT and uses its values to fill in widget + UFUNCTION(BlueprintImplementableEvent, Category = "PC_Display") + void LoadOS(); + + UFUNCTION(BlueprintImplementableEvent, Category = "PC_Display") + void UpdateFavourCount(int NewFavourCount); + + +}; +