diff --git a/Content/Player/BP_PlayerCharacter.uasset b/Content/Player/BP_PlayerCharacter.uasset index fde2c69..60b85aa 100644 --- a/Content/Player/BP_PlayerCharacter.uasset +++ b/Content/Player/BP_PlayerCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dcd559a09fd6529bc6fc696b9bd5bedf07764aff8a9d625981a9b35fa19613cf -size 53468 +oid sha256:3c23a5f6fca89661511a0cd69487caf9950325c06cb3665f8af66b0976bbc61e +size 53459 diff --git a/Content/Player/BP_PlayerController.uasset b/Content/Player/BP_PlayerController.uasset index 3b73be9..f0dc7a8 100644 --- a/Content/Player/BP_PlayerController.uasset +++ b/Content/Player/BP_PlayerController.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:532ddb4c9d878af52996537d87231f76368042664fb6aaf15c8f0d410c1c81a9 -size 21173 +oid sha256:9ad042c2f0a2049fb8ed28507448931deccc4c27225c3910723d4dcb3e2effa4 +size 21374 diff --git a/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset b/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset new file mode 100644 index 0000000..b6d6480 --- /dev/null +++ b/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:498d63ae069ec2024bc731e45fe4f45d91f41a11051fa6d7b231fd34a35132a1 +size 30869 diff --git a/Source/vampires/VampirePlayerController.cpp b/Source/vampires/VampirePlayerController.cpp index bbee7e8..9707041 100644 --- a/Source/vampires/VampirePlayerController.cpp +++ b/Source/vampires/VampirePlayerController.cpp @@ -12,6 +12,7 @@ #include "Blueprint/WidgetBlueprintLibrary.h" #include "Kismet/GameplayStatics.h" #include "Widgets/HUDWidget.h" +#include "Widgets/LevelUpWidget.h" #include "Widgets/PauseWidget.h" void AVampirePlayerController::OnPossess(APawn* aPawn) @@ -34,6 +35,7 @@ void AVampirePlayerController::OnPossess(APawn* aPawn) { expComponent->OnEXPGained.AddUniqueDynamic(this, &AVampirePlayerController::UpdatePlayerEXPHUD); expComponent->OnEXPLevelUp.AddUniqueDynamic(this, &AVampirePlayerController::UpdatePlayerLevelHUD); + expComponent->OnEXPLevelUp.AddUniqueDynamic(this, &AVampirePlayerController::ShowLevelUpScreen); UpdatePlayerEXPHUD(expComponent->GetCurrentEXP(), expComponent->GetCurrentLevelPercent()); UpdatePlayerLevelHUD(expComponent->GetCurrentLevel()); } @@ -94,9 +96,9 @@ void AVampirePlayerController::OnPause(const FInputActionValue& PauseInput) } } - if (SetPause(true)) + if (PauseUI) { - if (PauseUI) + if (SetPause(true)) { currentPauseUI = CreateWidget(this, PauseUI.Get()); if (currentPauseUI) @@ -117,6 +119,35 @@ void AVampirePlayerController::UpdatePlayerEXPHUD(int exp, float currentLevelPer } } +void AVampirePlayerController::ShowLevelUpScreen(int level) +{ + APawn* pawn = GetPawn(); + if (!pawn) + { + return; + } + + UEXPComponent* expComponent = pawn->GetComponentByClass(); + if (!expComponent || expComponent->GetCurrentLevel() == 0) + { + return; + } + + if (LevelUpUI) + { + if (SetPause(true)) + { + currentLevelUpUI = CreateWidget(this, LevelUpUI.Get()); + if (currentLevelUpUI) + { + currentLevelUpUI->AddToViewport(); + UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, currentLevelUpUI, EMouseLockMode::LockInFullscreen); + bShowMouseCursor = true; + } + } + } +} + void AVampirePlayerController::UpdatePlayerLevelHUD(int level) { if (currentPlayerHUD) diff --git a/Source/vampires/VampirePlayerController.h b/Source/vampires/VampirePlayerController.h index 43bb4a7..3d29c17 100644 --- a/Source/vampires/VampirePlayerController.h +++ b/Source/vampires/VampirePlayerController.h @@ -6,6 +6,7 @@ #include "GameFramework/PlayerController.h" #include "VampirePlayerController.generated.h" +class ULevelUpWidget; class UPauseWidget; struct FInputActionValue; class UInputAction; @@ -26,6 +27,9 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite) TSubclassOf PauseUI = nullptr; + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TSubclassOf LevelUpUI = nullptr; + // Inputs UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) UInputAction* MovementAction; @@ -38,6 +42,8 @@ private: TObjectPtr currentPlayerHUD = nullptr; TObjectPtr currentPauseUI = nullptr; + + TObjectPtr currentLevelUpUI = nullptr; FTimerHandle pawnLifeTimeHandle; @@ -57,6 +63,9 @@ protected: UFUNCTION() void UpdatePlayerEXPHUD(int exp, float currentLevelPercent); + UFUNCTION() + void ShowLevelUpScreen(int level); + UFUNCTION() void UpdatePlayerLevelHUD(int level); diff --git a/Source/vampires/Widgets/LevelUpWidget.cpp b/Source/vampires/Widgets/LevelUpWidget.cpp new file mode 100644 index 0000000..d7422a5 --- /dev/null +++ b/Source/vampires/Widgets/LevelUpWidget.cpp @@ -0,0 +1,34 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "LevelUpWidget.h" + +#include "Blueprint/WidgetBlueprintLibrary.h" +#include "Components/Button.h" +#include "Kismet/GameplayStatics.h" + +void ULevelUpWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (ResumeButton) + { + ResumeButton->OnClicked.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonClicked); + } + + SetIsFocusable(true); +} + +void ULevelUpWidget::ResumeButtonClicked() +{ + RemoveFromParent(); + + if (APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0)) + { + UWidgetBlueprintLibrary::SetInputMode_GameOnly(playerController); + playerController->bShowMouseCursor = false; + playerController->SetPause(false); + } + + SetIsFocusable(false); +} diff --git a/Source/vampires/Widgets/LevelUpWidget.h b/Source/vampires/Widgets/LevelUpWidget.h new file mode 100644 index 0000000..b596824 --- /dev/null +++ b/Source/vampires/Widgets/LevelUpWidget.h @@ -0,0 +1,30 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "LevelUpWidget.generated.h" + +class UButton; +/** + * + */ +UCLASS() +class VAMPIRES_API ULevelUpWidget : public UUserWidget +{ + GENERATED_BODY() + +public: + + UPROPERTY(BlueprintReadWrite, meta=(BindWidget)) + UButton* ResumeButton; + + virtual void NativeConstruct() override; + +private: + + + UFUNCTION() + void ResumeButtonClicked(); +}; diff --git a/Source/vampires/Widgets/PauseWidget.cpp b/Source/vampires/Widgets/PauseWidget.cpp index c4a98cb..d3f5a19 100644 --- a/Source/vampires/Widgets/PauseWidget.cpp +++ b/Source/vampires/Widgets/PauseWidget.cpp @@ -25,8 +25,6 @@ void UPauseWidget::NativeConstruct() void UPauseWidget::ResumeButtonClicked() { - //TODO: Implementation - RemoveFromParent(); if (APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0))