From 109da799f2a7fec6a767a492e2244ecfee37283c Mon Sep 17 00:00:00 2001 From: baz Date: Thu, 31 Jul 2025 21:04:43 +0100 Subject: [PATCH] Add template game over ui --- .../MainMenu/BP_MainMenuGameMode.uasset | 4 ++-- .../Levels/MainMenu/BP_MainMenuPawn.uasset | 3 +++ .../Widgets/GameOver/BP_GameOverWidget.uasset | 3 +++ Source/vampires/VampireGameMode.cpp | 16 ++++++++++++-- Source/vampires/VampireGameMode.h | 5 ++++- Source/vampires/VampirePlayerController.cpp | 19 +++++++++++++++++ Source/vampires/VampirePlayerController.h | 21 +++++++++++++++---- Source/vampires/Widgets/GameOverWidget.cpp | 4 ++++ Source/vampires/Widgets/GameOverWidget.h | 16 ++++++++++++++ 9 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 Content/Levels/MainMenu/BP_MainMenuPawn.uasset create mode 100644 Content/Widgets/GameOver/BP_GameOverWidget.uasset create mode 100644 Source/vampires/Widgets/GameOverWidget.cpp create mode 100644 Source/vampires/Widgets/GameOverWidget.h diff --git a/Content/Levels/MainMenu/BP_MainMenuGameMode.uasset b/Content/Levels/MainMenu/BP_MainMenuGameMode.uasset index eef76b0..c06a15b 100644 --- a/Content/Levels/MainMenu/BP_MainMenuGameMode.uasset +++ b/Content/Levels/MainMenu/BP_MainMenuGameMode.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c0864fa2b1296369cbb88b7d87aa37d37b21d82d53de2dae1b496c82475c16c -size 20728 +oid sha256:2431c5285e012bb4f07a510da3bf8e95750413e832f7a9ede80760497a92aef2 +size 21157 diff --git a/Content/Levels/MainMenu/BP_MainMenuPawn.uasset b/Content/Levels/MainMenu/BP_MainMenuPawn.uasset new file mode 100644 index 0000000..b0de6c6 --- /dev/null +++ b/Content/Levels/MainMenu/BP_MainMenuPawn.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e532c2b6d675779d5d03bb78f5a7f5485ca7144cb00fbcfdc86de083e501804a +size 25184 diff --git a/Content/Widgets/GameOver/BP_GameOverWidget.uasset b/Content/Widgets/GameOver/BP_GameOverWidget.uasset new file mode 100644 index 0000000..0b1dd6f --- /dev/null +++ b/Content/Widgets/GameOver/BP_GameOverWidget.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58801e8ecba29fb9bf0fcb365f471996ddfa2f8e62595e76df86bd97402b7d3f +size 25324 diff --git a/Source/vampires/VampireGameMode.cpp b/Source/vampires/VampireGameMode.cpp index 86cda28..46b21a5 100644 --- a/Source/vampires/VampireGameMode.cpp +++ b/Source/vampires/VampireGameMode.cpp @@ -19,8 +19,15 @@ void AVampireGameMode::BeginPlay() Super::BeginPlay(); PlayerCharacter = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); + PlayerController = Cast(UGameplayStatics::GetPlayerController(PlayerCharacter, 0)); + if (UHealthComponent* HealthComponent = PlayerCharacter->GetHealthComponent()) + { + HealthComponent->OnDeath.AddDynamic(this, &AVampireGameMode::OnPlayerDeath); + HealthComponent->OnDeath.AddDynamic(PlayerController, &AVampirePlayerController::OnDeath); + } + GetWorldTimerManager().SetTimer(SpawnEnemyTimerDelegate, this, &AVampireGameMode::SpawnEnemy, 1.0f, true); } @@ -29,10 +36,10 @@ int AVampireGameMode::GetEnemyDeathCount() return EnemyDeathCount; } -void AVampireGameMode::HandleOnEnemyDeath(FDamageInfo damageInfo) +void AVampireGameMode::HandleOnEnemyDeath(FDamageInfo DamageInfo) { IncrementEnemyDeathCount(); - EnemyObjectPoolManager->ReturnObject(damageInfo.DamagedActor); + EnemyObjectPoolManager->ReturnObject(DamageInfo.DamagedActor); OnEnemyDeathCountIncrementDelegate.Broadcast(EnemyDeathCount); } @@ -149,6 +156,11 @@ void AVampireGameMode::AddRandomEnemyTypeToPool() } } +void AVampireGameMode::OnPlayerDeath(FDamageInfo DamageInfo) +{ + GetWorldTimerManager().ClearTimer(SpawnEnemyTimerDelegate); +} + void AVampireGameMode::EndGame() { UKismetSystemLibrary::QuitGame(GetWorld(), UGameplayStatics::GetPlayerController(GetWorld(), 0), EQuitPreference::Quit, true); diff --git a/Source/vampires/VampireGameMode.h b/Source/vampires/VampireGameMode.h index 755c921..6dca434 100644 --- a/Source/vampires/VampireGameMode.h +++ b/Source/vampires/VampireGameMode.h @@ -71,7 +71,7 @@ public: protected: UFUNCTION() - void HandleOnEnemyDeath(FDamageInfo damageInfo); + void HandleOnEnemyDeath(FDamageInfo DamageInfo); UFUNCTION() void IncrementEnemyDeathCount(); @@ -85,6 +85,9 @@ protected: UFUNCTION(BlueprintCallable) void AddRandomEnemyTypeToPool(); + UFUNCTION() + void OnPlayerDeath(FDamageInfo DamageInfo); + UFUNCTION(BlueprintCallable) void EndGame(); diff --git a/Source/vampires/VampirePlayerController.cpp b/Source/vampires/VampirePlayerController.cpp index 1035862..f6a2e72 100644 --- a/Source/vampires/VampirePlayerController.cpp +++ b/Source/vampires/VampirePlayerController.cpp @@ -15,6 +15,7 @@ #include "Blueprint/UserWidget.h" #include "Blueprint/WidgetBlueprintLibrary.h" #include "Kismet/GameplayStatics.h" +#include "Widgets/GameOverWidget.h" #include "Widgets/HUDWidget.h" #include "Widgets/LevelUpWidget.h" #include "Widgets/PauseWidget.h" @@ -132,6 +133,24 @@ void AVampirePlayerController::OnPause(const FInputActionValue& PauseInput) } } +void AVampirePlayerController::OnDeath(FDamageInfo DamageInfo) +{ + if (GameOverUI) + { + if (CurrentPlayerHUD) { CurrentPlayerHUD->RemoveFromParent(); } + if (CurrentLevelUpUI) { CurrentLevelUpUI->RemoveFromParent(); } + if (CurrentPauseUI) { CurrentPauseUI->RemoveFromParent(); } + + CurrentGameOverUI = CreateWidget(this, GameOverUI.Get()); + if (CurrentGameOverUI) + { + CurrentGameOverUI->AddToViewport(); + UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentPauseUI, EMouseLockMode::LockInFullscreen); + bShowMouseCursor = true; + } + } +} + void AVampirePlayerController::UpdatePlayerEXPHUD(int Exp, float CurrentLevelPercent) { if (CurrentPlayerHUD) diff --git a/Source/vampires/VampirePlayerController.h b/Source/vampires/VampirePlayerController.h index 5a934b4..d1022c0 100644 --- a/Source/vampires/VampirePlayerController.h +++ b/Source/vampires/VampirePlayerController.h @@ -7,11 +7,14 @@ #include "Interfaces/Playerable.h" #include "VampirePlayerController.generated.h" +struct FDamageInfo; +class UGameOverWidget; class ULevelUpWidget; class UPauseWidget; struct FInputActionValue; class UInputAction; class UHUDWidget; + /** * */ @@ -22,15 +25,18 @@ class VAMPIRES_API AVampirePlayerController : public APlayerController, public I public: // UI - UPROPERTY(EditAnywhere, BlueprintReadWrite) + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) TSubclassOf PlayerHUD = nullptr; - UPROPERTY(EditAnywhere, BlueprintReadWrite) + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) TSubclassOf PauseUI = nullptr; - UPROPERTY(EditAnywhere, BlueprintReadWrite) + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) TSubclassOf LevelUpUI = nullptr; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + TSubclassOf GameOverUI = nullptr; + // Inputs UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) TObjectPtr MovementAction; @@ -39,7 +45,6 @@ public: TObjectPtr PauseAction; private: - UPROPERTY() TObjectPtr CurrentPlayerHUD = nullptr; @@ -48,9 +53,16 @@ private: UPROPERTY() TObjectPtr CurrentLevelUpUI = nullptr; + + UPROPERTY() + TObjectPtr CurrentGameOverUI = nullptr; FTimerHandle PawnLifeTimeHandle; +public: + UFUNCTION() + void OnDeath(FDamageInfo DamageInfo); + protected: virtual void OnPossess(APawn* aPawn) override; @@ -64,6 +76,7 @@ protected: UFUNCTION() void OnPause(const FInputActionValue& PauseInput); + UFUNCTION() void UpdatePlayerEXPHUD(int Exp, float CurrentLevelPercent); diff --git a/Source/vampires/Widgets/GameOverWidget.cpp b/Source/vampires/Widgets/GameOverWidget.cpp new file mode 100644 index 0000000..8c35fe5 --- /dev/null +++ b/Source/vampires/Widgets/GameOverWidget.cpp @@ -0,0 +1,4 @@ +// Louis Hobbs | 2024-2025 + + +#include "GameOverWidget.h" diff --git a/Source/vampires/Widgets/GameOverWidget.h b/Source/vampires/Widgets/GameOverWidget.h new file mode 100644 index 0000000..e612ebd --- /dev/null +++ b/Source/vampires/Widgets/GameOverWidget.h @@ -0,0 +1,16 @@ +// Louis Hobbs | 2024-2025 + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "GameOverWidget.generated.h" + +/** + * + */ +UCLASS() +class VAMPIRES_API UGameOverWidget : public UUserWidget +{ + GENERATED_BODY() +};