diff --git a/Scripts/verify_mvp_menu_input_and_quit_flow.py b/Scripts/verify_mvp_menu_input_and_quit_flow.py index 782258b..bc96fa3 100644 --- a/Scripts/verify_mvp_menu_input_and_quit_flow.py +++ b/Scripts/verify_mvp_menu_input_and_quit_flow.py @@ -33,6 +33,8 @@ EXPECTED = { "AgrarianGamePlayerController.h": [ "ShowMvpPauseMenu", "HandleMvpEscapeInput", + "RestoreGameplayControlState", + "AgrarianRepairGameplayInput", ], "AgrarianGamePlayerController.cpp": [ "SetIgnoreMoveInput(true)", @@ -46,6 +48,11 @@ EXPECTED = { "ResetIgnoreMoveInput();", "ResetIgnoreLookInput();", "ApplyDefaultInputMappingContexts();", + "void AAgrarianGamePlayerController::RestoreGameplayControlState()", + "ControlledPawn->SetActorHiddenInGame(false)", + "ControlledPawn->SetActorEnableCollision(true)", + "MovementComponent->SetMovementMode(MOVE_Walking)", + "void AAgrarianGamePlayerController::AgrarianRepairGameplayInput()", ], } diff --git a/Scripts/verify_mvp_segmented_startup_pause_flow.py b/Scripts/verify_mvp_segmented_startup_pause_flow.py index 8efb9c9..84148b3 100644 --- a/Scripts/verify_mvp_segmented_startup_pause_flow.py +++ b/Scripts/verify_mvp_segmented_startup_pause_flow.py @@ -52,8 +52,9 @@ def main() -> None: "SetIgnoreMoveInput(true)", "SetIgnoreLookInput(true)", "SetInputMode(FInputModeGameOnly())", - "SetIgnoreMoveInput(false)", - "SetIgnoreLookInput(false)", + "ResetIgnoreMoveInput()", + "ResetIgnoreLookInput()", + "RestoreGameplayControlState", "saving", ): require(token in controller + frontend, f"missing modal input or debug token: {token}") diff --git a/Source/AgrarianGame/AgrarianGamePlayerController.cpp b/Source/AgrarianGame/AgrarianGamePlayerController.cpp index 191b197..9787299 100644 --- a/Source/AgrarianGame/AgrarianGamePlayerController.cpp +++ b/Source/AgrarianGame/AgrarianGamePlayerController.cpp @@ -154,6 +154,10 @@ void AAgrarianGamePlayerController::AcknowledgePossession(APawn* P) { SetMvpFrontendPresentationActive(true); } + else + { + RestoreGameplayControlState(); + } } void AAgrarianGamePlayerController::SetupInputComponent() @@ -289,9 +293,7 @@ void AAgrarianGamePlayerController::SetMvpFrontendPresentationActive(bool bNewAc } else { - ResetIgnoreMoveInput(); - ResetIgnoreLookInput(); - ApplyDefaultInputMappingContexts(); + RestoreGameplayControlState(); } APawn* ControlledPawn = GetPawn(); @@ -334,6 +336,39 @@ void AAgrarianGamePlayerController::SetMvpFrontendPresentationActive(bool bNewAc } } +void AAgrarianGamePlayerController::RestoreGameplayControlState() +{ + if (!IsLocalPlayerController()) + { + return; + } + + ResetIgnoreMoveInput(); + ResetIgnoreLookInput(); + SetInputMode(FInputModeGameOnly()); + bShowMouseCursor = false; + ApplyDefaultInputMappingContexts(); + + APawn* ControlledPawn = GetPawn(); + if (!ControlledPawn) + { + return; + } + + ControlledPawn->SetActorHiddenInGame(false); + ControlledPawn->SetActorEnableCollision(true); + + if (ACharacter* ControlledCharacter = Cast(ControlledPawn)) + { + if (UCharacterMovementComponent* MovementComponent = ControlledCharacter->GetCharacterMovement()) + { + MovementComponent->SetMovementMode(MOVE_Walking); + } + } + + SetViewTarget(ControlledPawn); +} + void AAgrarianGamePlayerController::ApplyDefaultInputMappingContexts() { if (!IsLocalPlayerController()) @@ -743,9 +778,7 @@ void AAgrarianGamePlayerController::AgrarianCompleteFrontend() { ApplyMvpCharacterProxyToPawn(); SetMvpFrontendPresentationActive(false); - SetInputMode(FInputModeGameOnly()); - bShowMouseCursor = false; - ApplyDefaultInputMappingContexts(); + RestoreGameplayControlState(); if (const APawn* ControlledPawn = GetPawn()) { @@ -753,6 +786,13 @@ void AAgrarianGamePlayerController::AgrarianCompleteFrontend() } } +void AAgrarianGamePlayerController::AgrarianRepairGameplayInput() +{ + bMvpFrontendPresentationActive = false; + RestoreGameplayControlState(); + ClientMessage(TEXT("Agrarian gameplay input repaired.")); +} + void AAgrarianGamePlayerController::AgrarianShowMvpScreen(FName ScreenName) { if (!MvpFrontendWidget) diff --git a/Source/AgrarianGame/AgrarianGamePlayerController.h b/Source/AgrarianGame/AgrarianGamePlayerController.h index 763dabb..4a747ca 100644 --- a/Source/AgrarianGame/AgrarianGamePlayerController.h +++ b/Source/AgrarianGame/AgrarianGamePlayerController.h @@ -70,6 +70,7 @@ protected: void ApplyMvpCharacterProxyToPawn(); void SetMvpFrontendPresentationActive(bool bNewActive); void ApplyDefaultInputMappingContexts(); + void RestoreGameplayControlState(); void CreateOrUpdateMvpFrontendCamera(); void CacheAndApplyMvpHudSuppression(bool bSuppress); virtual void AcknowledgePossession(APawn* P) override; @@ -151,6 +152,9 @@ public: UFUNCTION(Exec) void AgrarianCompleteFrontend(); + UFUNCTION(Exec) + void AgrarianRepairGameplayInput(); + UFUNCTION(Exec) void AgrarianShowMvpScreen(FName ScreenName);