diff --git a/Audio/Sounds/Signal_C.mp3 b/Audio/Sounds/Signal_C.mp3 new file mode 100644 index 0000000..38198ed Binary files /dev/null and b/Audio/Sounds/Signal_C.mp3 differ diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Characters/BP_Player.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Characters/BP_Player.uasset index ff43b04..16be0ba 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Characters/BP_Player.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Characters/BP_Player.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edce730484d91942f257ae29265f7a5fc69f2ff5c0f0a40d9c6fec1ae2437658 -size 439607 +oid sha256:d5ab9ac887ac3ffc32d57192270ac1b8e6328d590b7a4e8a589145137efa6bea +size 447199 diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/BP_Minigame_AgeOfWar.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/BP_Minigame_AgeOfWar.uasset index c798ecd..f1368b0 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/BP_Minigame_AgeOfWar.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/BP_Minigame_AgeOfWar.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c180606f9e398f29ad715aa49c40d0fa6be85c224e4ce9a553f7e4c1f8cdb8a -size 502100 +oid sha256:1c9428c3a8079d7d182c643a642edb5af9037df452285095e3c7b01cc445e000 +size 516415 diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/UI_Minigame_AgeOfWar.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/UI_Minigame_AgeOfWar.uasset index 9f5c5a6..743d31d 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/UI_Minigame_AgeOfWar.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/AgeOfWar/UI_Minigame_AgeOfWar.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72ed0e104513dd6ecbc8f74c552bbc2916c117a290a8896b0b73686fff8fb1d6 -size 212913 +oid sha256:0e0b9156e0e7f96d9ecbbbcfa0075a359cd76372e9883b47303ff194cdd12f33 +size 218094 diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/CrossyRoad/BP_Minigame_CrossyRoadManager.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/CrossyRoad/BP_Minigame_CrossyRoadManager.uasset index 751b5eb..3c1959a 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/CrossyRoad/BP_Minigame_CrossyRoadManager.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/CrossyRoad/BP_Minigame_CrossyRoadManager.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8be25049605dfc1c8641f94f1eceed0132727851e00f6b881d79110f83195ad2 -size 53846 +oid sha256:ebf8b5df949e26d340f892abe9518073b74369f34ca00b8d9628a240c103dc35 +size 74282 diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/BP_Minigame_RythmClickManager.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/BP_Minigame_RythmClickManager.uasset index c371a8b..12c3ffc 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/BP_Minigame_RythmClickManager.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/BP_Minigame_RythmClickManager.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f267ba1f4ef5f72ddc44a67bfbe4a0879c1f77076b5c0d1c1738957f3d34b3a -size 67082 +oid sha256:436ac7d8cc671cda0b46ac1d948d45b536c18d3570b849f708b495a54fe31880 +size 68230 diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/UI_Minigame_RythmClickCanvas.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/UI_Minigame_RythmClickCanvas.uasset index 40ea817..af8efb4 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/UI_Minigame_RythmClickCanvas.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/RythmClick/UI_Minigame_RythmClickCanvas.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f545dd5a4e914e277643b6015f4caaad5a78892f9a19a51b795fb57a27d09922 -size 205361 +oid sha256:df3822e34dbe1ccd7f50575340712b1befd39c94e2b3f719a7a836bef91cd2a5 +size 281862 diff --git a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/SubwaySurf/BP_Minigame_SubwaySurfManager.uasset b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/SubwaySurf/BP_Minigame_SubwaySurfManager.uasset index 01bbf81..8ad7172 100644 --- a/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/SubwaySurf/BP_Minigame_SubwaySurfManager.uasset +++ b/UnrealProject/Lost_Edge/Content/Blueprints/Minigames/SubwaySurf/BP_Minigame_SubwaySurfManager.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d64d8cc33d3db551fe17efc28db64f8d8b0ca7e1cea1c1da54b10486a4d61595 -size 36767 +oid sha256:1c57d859641b332d8fd333e9dda1e424acfbf04ec1caba73a4698b85259a1b5b +size 58132 diff --git a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_AgeOfWar.uasset b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_AgeOfWar.uasset index 0814872..e8492ff 100644 --- a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_AgeOfWar.uasset +++ b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_AgeOfWar.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cae293633cb67098d9bf39d8efd55324dbe2b300001438829ee7abeeec916347 -size 32662 +oid sha256:13075f11cc7ea874e99b69abbd58529c0ea3e90807fb5896548a51003ce91086 +size 34140 diff --git a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_CrossyRoad.uasset b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_CrossyRoad.uasset index 7e0dadb..8070377 100644 --- a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_CrossyRoad.uasset +++ b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_CrossyRoad.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1de8241d54ca7d81dc4637201975e3376b16e93df90f4418350bd5a50dddf0bd -size 32698 +oid sha256:93dc2fb050fb90f7edc5f38ed92b2d539e9f7d40d90d09998f68148ca3fd9187 +size 34176 diff --git a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Fishing.uasset b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Fishing.uasset index d924c09..73eb820 100644 --- a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Fishing.uasset +++ b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Fishing.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:868120cba6c45f4a10ba2c72e49461a433be6341e00dae80d50c6c8e8956b189 -size 32684 +oid sha256:b8e546c21b1874065f3cb5e5ac047e8d5999b2645b1618ac857220a0b29c3f31 +size 34118 diff --git a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Rythm.uasset b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Rythm.uasset index 01b1b80..a033757 100644 --- a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Rythm.uasset +++ b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_Rythm.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e1cfe00201ee73e1894448c83408af8f98029bf7346c830052c65fabac5b0ed -size 32648 +oid sha256:3d361b83bd3a2d6965249173e110a86fada015c830dee544c4a8c2c0f1e74b2d +size 34082 diff --git a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_SubwaySurf.uasset b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_SubwaySurf.uasset index 2ced5d4..d252940 100644 --- a/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_SubwaySurf.uasset +++ b/UnrealProject/Lost_Edge/Content/Levels/Test/Actors/Minigame/BP_Test_SubwaySurf.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d436bd2e3641353e937db681020e04371db28b30d2783f8846dc89c2f3a7cb1 -size 32682 +oid sha256:f56c813e684013ae7701ae6c88fa58697ce122f0190b682521a50b6a783782ca +size 35112 diff --git a/UnrealProject/Lost_Edge/Content/Levels/Test/L_Test.umap b/UnrealProject/Lost_Edge/Content/Levels/Test/L_Test.umap index c1c4b28..06d40a0 100644 --- a/UnrealProject/Lost_Edge/Content/Levels/Test/L_Test.umap +++ b/UnrealProject/Lost_Edge/Content/Levels/Test/L_Test.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d40d1be43319f17c68db6c391d023e38f79a3f4c256fb0741789f011177f0b27 -size 2916531 +oid sha256:386daf846b454ae8db416cfaf4905dca8da51a7b64268fe62ede197754bf8d39 +size 2916187 diff --git a/UnrealProject/Lost_Edge/Content/UI/BP_MainWidgetManager.uasset b/UnrealProject/Lost_Edge/Content/UI/BP_MainWidgetManager.uasset index 3c91fa7..5e40c5c 100644 --- a/UnrealProject/Lost_Edge/Content/UI/BP_MainWidgetManager.uasset +++ b/UnrealProject/Lost_Edge/Content/UI/BP_MainWidgetManager.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d91fb19b4df3c5e5975e5e69d7c03e0fccb04ebd5597110665fd221cbe29121 -size 8472 +oid sha256:bd3d79d408992ed469a40ca81efc6e21ffdda7b01986b9e6f6e603684ac90c63 +size 8678 diff --git a/UnrealProject/Lost_Edge/Content/UI/Blueprints/Interactables/UI_InteractableHint.uasset b/UnrealProject/Lost_Edge/Content/UI/Blueprints/Interactables/UI_InteractableHint.uasset index 4d4094a..e0424a5 100644 --- a/UnrealProject/Lost_Edge/Content/UI/Blueprints/Interactables/UI_InteractableHint.uasset +++ b/UnrealProject/Lost_Edge/Content/UI/Blueprints/Interactables/UI_InteractableHint.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12c568a32d174235ca8f69bb88895e386784238d65913aaf4e1b8fc7f0ca4abe -size 426340 +oid sha256:1cc4cb5dc115b01bb827d80b8660e8aa5d981afb78d98588f283c781c1d3b375 +size 424928 diff --git a/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_ControlsHint.uasset b/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_ControlsHint.uasset new file mode 100644 index 0000000..4d76ba8 --- /dev/null +++ b/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_ControlsHint.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4092330bdf51b296747387c7b582647b2f99b15313d3472d1cbccd663d534ed +size 68970 diff --git a/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_DevelopBuildWarning.uasset b/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_DevelopBuildWarning.uasset index 05daa9b..847a25c 100644 --- a/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_DevelopBuildWarning.uasset +++ b/UnrealProject/Lost_Edge/Content/UI/Blueprints/Overlays/UI_DevelopBuildWarning.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b266613fa16a4526d3e42d8a5570df118fef6d715a514a38b957e91a1ef94c4 -size 14274 +oid sha256:f42262dca1d6ef37f13f0e1d34a94e6d6a6f4faed02418d3d4653b9e2369a413 +size 14643 diff --git a/UnrealProject/Lost_Edge/Content/UI/Blueprints/UI_CheatMenu.uasset b/UnrealProject/Lost_Edge/Content/UI/Blueprints/UI_CheatMenu.uasset new file mode 100644 index 0000000..829ef2a --- /dev/null +++ b/UnrealProject/Lost_Edge/Content/UI/Blueprints/UI_CheatMenu.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:584185bd79628dce07459d392a15f76bbcd15c49a3939ed0b52e37efc89e5da7 +size 108467 diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.cpp index 25e6951..b58b161 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.cpp @@ -13,12 +13,12 @@ TMap AAgeOfWarManager::unitStats = {}; const FAgeOfWarUnitStats& AAgeOfWarManager::UnitGetStats(TSubclassOf unitClass) { - check(unitStats.Contains(*unitClass)); - //if(!unitStats.Contains(*unitClass)) - //{ - // static FAgeOfWarUnitStats empty; - // return empty; - //} + //check(unitStats.Contains(*unitClass)); + if(!unitStats.Contains(*unitClass)) + { + static FAgeOfWarUnitStats empty; + return empty; + } return unitStats[unitClass]; } @@ -31,16 +31,12 @@ AAgeOfWarManager::AAgeOfWarManager() camera->SetupAttachment(root); } -void AAgeOfWarManager::Start(APlayerBase* playerPawn, FMinigameEndCallback delegate) +void AAgeOfWarManager::OnStart_Internal() { - if(!playerPawn) - return; - - AMinigame::Start(playerPawn, delegate); - player->LockPlayer(FPlayerLock::All()); player->SwitchToView(this); + InitUI(); FillUnitStats(); TArray units; GetComponents(units); @@ -54,7 +50,7 @@ void AAgeOfWarManager::Start(APlayerBase* playerPawn, FMinigameEndCallback deleg } } -void AAgeOfWarManager::End() +void AAgeOfWarManager::OnEnd_Internal() { for(auto& unit : spawnedUnits) unit->Destroy(); @@ -64,8 +60,6 @@ void AAgeOfWarManager::End() player->ReturnPlayerView(); player->UnlockPlayer(FPlayerLock::All()); - - AMinigame::End(); } void AAgeOfWarManager::UnitKill(AAgeOfWarUnit* unit) diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.h index dbcdcb9..a9415fe 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/AgeOfWar/AgeOfWarManager.h @@ -16,14 +16,16 @@ public: AAgeOfWarManager(); - virtual void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate) override; - virtual void End() override; - void UnitKill(class AAgeOfWarUnit* unit); UFUNCTION(BlueprintImplementableEvent) void OnUnitKill(class AAgeOfWarUnit* unit); protected: + virtual void OnStart_Internal() override; + virtual void OnEnd_Internal() override; + + UFUNCTION(BlueprintImplementableEvent) + void InitUI(); UFUNCTION(BlueprintImplementableEvent) void FillUnitStats(); UFUNCTION(BlueprintCallable) diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.cpp index f24b032..fd50b2b 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.cpp @@ -32,13 +32,8 @@ ACrossyRoadManager::ACrossyRoadManager() mannequin->SetupAttachment(root); } -void ACrossyRoadManager::Start(APlayerBase* playerPawn, FMinigameEndCallback delegate) +void ACrossyRoadManager::OnStart_Internal() { - if(!playerPawn) - return; - - AMinigame::Start(playerPawn, delegate); - player->LockPlayer(FPlayerLock::All()); player->SwitchToView(this); @@ -65,7 +60,7 @@ void ACrossyRoadManager::Start(APlayerBase* playerPawn, FMinigameEndCallback del PrimaryActorTick.SetTickFunctionEnable(true); } -void ACrossyRoadManager::End() +void ACrossyRoadManager::OnEnd_Internal() { PrimaryActorTick.SetTickFunctionEnable(false); @@ -74,8 +69,6 @@ void ACrossyRoadManager::End() player->UnlockPlayer(FPlayerLock::All()); player->ReturnPlayerView(); - - AMinigame::End(); } void ACrossyRoadManager::Hit() diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.h index 8865efc..b9e188b 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/CrossyRoad/CrossyRoadManager.h @@ -14,9 +14,6 @@ class ACrossyRoadManager : public AMinigame public: ACrossyRoadManager(); - virtual void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate) override; - virtual void End() override; - void Hit(); void Finish(); @@ -29,6 +26,9 @@ protected: float speed; }; + virtual void OnStart_Internal() override; + virtual void OnEnd_Internal() override; + virtual void PostInitializeComponents() override; virtual void Tick(float deltaTime) override; diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.cpp index f30d2b4..1ddd71e 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.cpp @@ -15,13 +15,8 @@ AFishingManager::AFishingManager() context = asset.Object; } -void AFishingManager::Start(APlayerBase* playerPawn, FMinigameEndCallback delegate) +void AFishingManager::OnStart_Internal() { - if(!playerPawn) - return; - - AMinigame::Start(playerPawn, delegate); - player->LockPlayer(FPlayerLock::All()); auto input = ACustomPlayerController::GetInput(); @@ -30,13 +25,11 @@ void AFishingManager::Start(APlayerBase* playerPawn, FMinigameEndCallback delega handler2 = input->BindAction(mapping.Action, ETriggerEvent::Completed, this, &AFishingManager::OnInputUnhold).GetHandle(); } -void AFishingManager::End() +void AFishingManager::OnEnd_Internal() { auto input = ACustomPlayerController::GetInput(); input->RemoveBindingByHandle(handler1); input->RemoveBindingByHandle(handler2); player->UnlockPlayer(FPlayerLock::All()); - - AMinigame::End(); } diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.h index 59736f1..9ab6b89 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Fishing/FishingManager.h @@ -35,9 +35,6 @@ class AFishingManager : public AMinigame public: AFishingManager(); - virtual void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate) override; - virtual void End() override; - UFUNCTION(BlueprintImplementableEvent, BlueprintCallable) void CatchSucceed(int32 price); @@ -45,6 +42,9 @@ public: void CatchFailed(); protected: + virtual void OnStart_Internal() override; + virtual void OnEnd_Internal() override; + UFUNCTION(BlueprintImplementableEvent) void OnInputHold(); UFUNCTION(BlueprintImplementableEvent) diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.cpp index 04186f4..fe4b8b6 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.cpp @@ -7,27 +7,52 @@ #include "CustomPlayerController.h" #include "PlayerBase.h" +AMinigame* AMinigame::instance = nullptr; + +AMinigame* AMinigame::GetActiveInstance() +{ + return instance; +} + AMinigame::AMinigame() { PrimaryActorTick.bStartWithTickEnabled = false; PrimaryActorTick.bCanEverTick = true; } -void AMinigame::End() -{ - if(callback.IsBound()) - callback.Execute(result, score); - - OnEnd(); -} - void AMinigame::Start(APlayerBase* playerPawn, FMinigameEndCallback delegate) { + if(instance) + return; + instance = this; + player = playerPawn; callback = delegate; if(context.IsValid()) ACustomPlayerController::AppendInputContext(context); + OnStart_Internal(); OnStart(); } + +void AMinigame::End() +{ + if(instance != this) + return; + + ended = true; + if(callback.IsBound()) + callback.Execute(result, score); + + OnEnd_Internal(); + OnEnd(); + + instance = nullptr; +} + +void AMinigame::Restart() +{ + OnRestart_Internal(); + OnRestart(); +} diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.h index f1f7fdc..6244a0f 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/Minigame.h @@ -18,9 +18,10 @@ DECLARE_DYNAMIC_DELEGATE_TwoParams(FMinigameEndCallback, EMinigameResult, result /** * Interface for all minigame classes. * Any minigame is started/ended/restarted by executing Start()/End()/Restart() on specific instance. + * Only one minigame can be active in the same time to avoid control collisions. * Each call is after broadcasted into a blueprint event also. * On start the caller can pass a OnEndCallback delegate to receive result and score on a minigame end. - * Each minigame can have its own contextInput + * Each minigame can have its own contextInput. */ UCLASS(Abstract, Blueprintable, BlueprintType, MinimalAPI) class AMinigame : public AActor @@ -28,27 +29,36 @@ class AMinigame : public AActor GENERATED_BODY() public: + UFUNCTION(BlueprintPure, meta = (DisplayName = "GetActiveMinigame"), Category = "Minigame") + static AMinigame* GetActiveInstance(); + AMinigame(); UFUNCTION(BlueprintCallable) - virtual void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate); - UFUNCTION(BlueprintImplementableEvent) - void OnStart(); + void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate); UFUNCTION(BlueprintCallable) - virtual void End(); - UFUNCTION(BlueprintImplementableEvent) - void OnEnd(); + void End(); UFUNCTION(BlueprintCallable) - virtual void Restart() {} - UFUNCTION(BlueprintImplementableEvent) - void OnRestart(); + void Restart(); UFUNCTION(BlueprintPure) TSoftObjectPtr GetInputMappings() { return context; } protected: + virtual void OnStart_Internal() {} + UFUNCTION(BlueprintImplementableEvent) + void OnStart(); + + virtual void OnEnd_Internal() {} + UFUNCTION(BlueprintImplementableEvent) + void OnEnd(); + + virtual void OnRestart_Internal() {} + UFUNCTION(BlueprintImplementableEvent) + void OnRestart(); + FMinigameEndCallback callback; class APlayerBase* player; @@ -63,5 +73,9 @@ protected: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) TSoftObjectPtr context = nullptr; + +private: + static AMinigame* instance; // active minigame + }; diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.cpp index c664b22..5eb8994 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.cpp @@ -8,19 +8,12 @@ ARythmClickManager::ARythmClickManager() {} -void ARythmClickManager::Start(APlayerBase* playerPawn, FMinigameEndCallback delegate) +void ARythmClickManager::OnStart_Internal() { - if(!playerPawn) - return; - - AMinigame::Start(playerPawn, delegate); - player->LockPlayer(FPlayerLock::All()); } -void ARythmClickManager::End() +void ARythmClickManager::OnEnd_Internal() { player->UnlockPlayer(FPlayerLock::All()); - - AMinigame::End(); } diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.h index 23fc800..9e4c6a6 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/RythmClick/RythmClickManager.h @@ -14,6 +14,7 @@ class ARythmClickManager : public AMinigame public: ARythmClickManager(); - virtual void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate) override; - virtual void End() override; +protected: + virtual void OnStart_Internal() override; + virtual void OnEnd_Internal() override; }; diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.cpp index 3cf92af..e6eff62 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.cpp @@ -32,13 +32,8 @@ ASubwaySurfManager::ASubwaySurfManager() mannequin->SetupAttachment(root); } -void ASubwaySurfManager::Start(APlayerBase* playerPawn, FMinigameEndCallback delegate) +void ASubwaySurfManager::OnStart_Internal() { - if(!playerPawn) - return; - - AMinigame::Start(playerPawn, delegate); - player->LockPlayer(FPlayerLock::All()); player->SwitchToView(this); @@ -61,7 +56,7 @@ void ASubwaySurfManager::Start(APlayerBase* playerPawn, FMinigameEndCallback del PrimaryActorTick.SetTickFunctionEnable(true); } -void ASubwaySurfManager::End() +void ASubwaySurfManager::OnEnd_Internal() { PrimaryActorTick.SetTickFunctionEnable(false); @@ -70,8 +65,6 @@ void ASubwaySurfManager::End() player->UnlockPlayer(FPlayerLock::All()); player->ReturnPlayerView(); - - AMinigame::End(); } void ASubwaySurfManager::Hit() diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.h index 654d9e4..dd56392 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Minigame/SubwaySurf/SubwaySurfManager.h @@ -21,13 +21,13 @@ class ASubwaySurfManager : public AMinigame public: ASubwaySurfManager(); - virtual void Start(class APlayerBase* playerPawn, FMinigameEndCallback delegate) override; - virtual void End() override; - void Hit(); void Finish(); protected: + virtual void OnStart_Internal() override; + virtual void OnEnd_Internal() override; + virtual void PostInitializeComponents() override; virtual void Tick(float deltaTime) override; diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.cpp b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.cpp index fdb5c53..2931865 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.cpp +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.cpp @@ -151,10 +151,25 @@ void UWidgetsManager::UpdateWidgetsOwner() +void UWidgetsManager::AddOverlayWidget(UUserWidget* widget) +{ + overlayWidgetsInstances.Add(widget); + widget->AddToViewport(); +} + +void UWidgetsManager::RemoveOverlayWidget(UUserWidget* widget) +{ + overlayWidgetsInstances.Remove(widget); + widget->RemoveFromViewport(); +} + + + void UWidgetsManager::ShowMainMenu(bool pause) { mainMenuWidget->Show(pause); - journalWidget->Hide(); + HideJournal(); + HideCheatMenu(); } void UWidgetsManager::HideMainMenu() @@ -164,6 +179,35 @@ void UWidgetsManager::HideMainMenu() +void UWidgetsManager::SwitchCheatMenu() +{ + if(cheatMenuWidget) + HideCheatMenu(); + else + ShowCheatMenu(); +} + +void UWidgetsManager::ShowCheatMenu() +{ + if(cheatMenuWidget || mainMenuWidget->Visibility == ESlateVisibility::Visible) + return; + + if(auto PC = UGameplayStatics::GetPlayerController(GetWorld(), 0)) + cheatMenuWidget = CreateWidget(PC, cheatMenuWidgetClass); + cheatMenuWidget->AddToViewport(100); +} + +void UWidgetsManager::HideCheatMenu() +{ + if(!cheatMenuWidget) + return; + + cheatMenuWidget->RemoveFromParent(); + cheatMenuWidget = nullptr; +} + + + void UWidgetsManager::ShowFpsCount() { if(fpsCountWidget) diff --git a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.h b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.h index 0ddeafa..2403073 100644 --- a/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.h +++ b/UnrealProject/Lost_Edge/Source/Lost_Edge/Private/Widgets/WidgetsManager.h @@ -27,9 +27,21 @@ public: void HideWidgets(); void UpdateWidgetsOwner(); + UFUNCTION(BlueprintCallable, Category = WidgetsManager) + void AddOverlayWidget(class UUserWidget* widget); + UFUNCTION(BlueprintCallable, Category = WidgetsManager) + void RemoveOverlayWidget(class UUserWidget* widget); + void ShowMainMenu(bool pause = true); void HideMainMenu(); + UFUNCTION(BlueprintCallable, Category = WidgetsManager) + void SwitchCheatMenu(); + UFUNCTION(BlueprintCallable, Category = WidgetsManager) + void ShowCheatMenu(); + UFUNCTION(BlueprintCallable, Category = WidgetsManager) + void HideCheatMenu(); + void ShowFpsCount(); void HideFpsCount(); @@ -69,12 +81,16 @@ protected: UPROPERTY(EditDefaultsOnly) TSet> overlayWidgets; // hidden in pause, cutscene - TArray overlayWidgetsInstances; + TSet overlayWidgetsInstances; UPROPERTY(EditDefaultsOnly) TSubclassOf mainMenuWidgetClass; class UMainMenuWidget* mainMenuWidget = nullptr; + UPROPERTY(EditDefaultsOnly) + TSubclassOf cheatMenuWidgetClass; + class UUserWidget* cheatMenuWidget = nullptr; + UPROPERTY(EditDefaultsOnly) TSubclassOf fpsCountWidgetClass; class UUserWidget* fpsCountWidget = nullptr;