Compare commits

..

4 Commits

10 changed files with 219 additions and 21 deletions

Binary file not shown.

BIN
Content/Widgets/Options/BP_OptionsMenuWidget.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -59,12 +59,26 @@ float UHealthComponent::GetCurrentHealth()
void UHealthComponent::SetCurrentHealth(float Value)
{
CurrentHealth = Value;
if (CurrentHealth > MaxHealth)
if (Value > MaxHealth)
{
CurrentHealth = MaxHealth;
}
else if (Value <= 0.0f)
{
IsDead = true;
OnDeath.Broadcast({GetOwner(), CurrentHealth - Value, nullptr, nullptr, nullptr});
CurrentHealth = 0.0f;
}
else
{
if (Value < CurrentHealth)
{
OnDamaged.Broadcast({GetOwner(), CurrentHealth - Value, nullptr, nullptr, nullptr});
}
CurrentHealth = Value;
}
}
void UHealthComponent::ResetHealth()
@ -75,8 +89,10 @@ void UHealthComponent::ResetHealth()
void UHealthComponent::RecoverHealth(float value)
{
// TODO: We might want to add some extra checking here
IncrementHealth(value);
if (value > 0)
{
IncrementHealth(value);
}
}
bool UHealthComponent::GetIsDead()

View File

@ -47,6 +47,7 @@ protected:
UPROPERTY(VisibleAnywhere)
float CurrentHealth;
private:
bool IsDead = false;
bool CanDamage = true;

View File

@ -15,7 +15,7 @@ void UGameOverWidget::NativeConstruct()
if (ReturnButton)
{
ReturnButton->OnClicked.AddUniqueDynamic(this, &UGameOverWidget::ReturnButtonClicked);
ReturnButton->OnClicked.AddUniqueDynamic(this, &UGameOverWidget::ReturnButtonOnClicked);
ReturnButton->OnClicked.AddUniqueDynamic(this, &UGameOverWidget::PlayClickedSound);
ReturnButton->OnHovered.AddUniqueDynamic(this, &UGameOverWidget::PlayHoveredSound);
@ -55,7 +55,7 @@ void UGameOverWidget::SetGameInfo(int Level, float Timer, int Kill, int Gold)
GoldBlock->SetText(FText::FromString(FString::FromInt(Gold)));
}
void UGameOverWidget::ReturnButtonClicked()
void UGameOverWidget::ReturnButtonOnClicked()
{
if (UVampireGameInstance* GameInstance = Cast<UVampireGameInstance>(GetGameInstance()))
{

View File

@ -43,7 +43,7 @@ public:
private:
UFUNCTION()
void ReturnButtonClicked();
void ReturnButtonOnClicked();
UFUNCTION()
void ReturnTextBlockHoveredDelegate() { SetTextBlockHovered(ReturnBlock); }

View File

@ -24,6 +24,18 @@ void UMainMenuWidget::NativeConstruct()
NewGameButton->OnUnhovered.AddUniqueDynamic(this, &UMainMenuWidget::PlayUnhoveredSound);
}
if (OptionsButton)
{
OptionsButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::OptionsButtonOnClicked);
OptionsButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::PlayClickedSound);
OptionsButton->OnHovered.AddUniqueDynamic(this, &UMainMenuWidget::PlayHoveredSound);
OptionsButton->OnHovered.AddUniqueDynamic(this, &UMainMenuWidget::OptionsTextBlockHoveredDelegate);
OptionsButton->OnUnhovered.AddUniqueDynamic(this, &UMainMenuWidget::OptionsTextBlockUnhoveredDelegate);
OptionsButton->OnUnhovered.AddUniqueDynamic(this, &UMainMenuWidget::PlayUnhoveredSound);
}
if (QuitButton)
{
QuitButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::QuitButtonOnClicked);
@ -61,6 +73,22 @@ void UMainMenuWidget::NewGameButtonOnClicked()
}
}
void UMainMenuWidget::OptionsButtonOnClicked()
{
if (OptionsMenuWidget)
{
RemoveFromParent();
UUserWidget* OptionWeaponWidget = CreateWidget<UUserWidget, APlayerController*>(
UGameplayStatics::GetPlayerController(GetWorld(), 0), OptionsMenuWidget);
if (OptionWeaponWidget)
{
OptionWeaponWidget->AddToViewport();
}
}
}
void UMainMenuWidget::QuitButtonOnClicked()
{
// TODO: Add platform specific Exit requests

View File

@ -15,30 +15,33 @@ class VAMPIRES_API UMainMenuWidget : public UVampireInteractiveWidget
{
GENERATED_BODY()
// TODO: Add options menu
protected:
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> NewGameButton;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> NewGameTextBlock;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> OptionsButton;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> OptionsTextBlock;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> QuitButton;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> QuitTextBlock;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Widget Settings | New Game")
TSubclassOf<class UUserWidget> NewGameMenuWidget;
UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game")
TSubclassOf<UUserWidget> NewGameMenuWidget;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Widget Settings | New Game")
UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game")
TSoftObjectPtr<UWorld> NewGameLevel;
private:
UPROPERTY()
TObjectPtr<UUserWidget> CurrentNewGameWidget;
UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | Options")
TSubclassOf<UUserWidget> OptionsMenuWidget;
public:
virtual void NativeConstruct() override;
@ -47,6 +50,9 @@ private:
UFUNCTION()
void NewGameButtonOnClicked();
UFUNCTION()
void OptionsButtonOnClicked();
UFUNCTION()
void QuitButtonOnClicked();
@ -56,6 +62,12 @@ private:
UFUNCTION()
void NewGameTextBlockUnhoveredDelegate() { SetTextBlockUnhovered(NewGameTextBlock); }
UFUNCTION()
void OptionsTextBlockHoveredDelegate() { SetTextBlockHovered(OptionsTextBlock); }
UFUNCTION()
void OptionsTextBlockUnhoveredDelegate() { SetTextBlockUnhovered(OptionsTextBlock); }
UFUNCTION()
void QuitTextBlockHoveredDelegate() { SetTextBlockHovered(QuitTextBlock); }

View File

@ -0,0 +1,69 @@
// Louis Hobbs | 2024-2025
#include "OptionsMenuWidget.h"
#include <string>
#include "Components/Button.h"
#include "Components/ComboBoxString.h"
#include "Kismet/GameplayStatics.h"
#include "Kismet/KismetSystemLibrary.h"
void UOptionsMenuWidget::NativeConstruct()
{
Super::NativeConstruct();
GenerateResolutionOptions();
if (ReturnButton)
{
ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnButtonOnClicked);
ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayClickedSound);
ReturnButton->OnHovered.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayHoveredSound);
ReturnButton->OnHovered.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnTextBlockHoveredDelegate);
ReturnButton->OnUnhovered.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnTextBlockUnhoveredDelegate);
ReturnButton->OnUnhovered.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayUnhoveredSound);
}
}
void UOptionsMenuWidget::GenerateResolutionOptions()
{
ResolutionComboBox->ClearOptions();
TArray<FIntPoint> Resolutions;
UKismetSystemLibrary::GetSupportedFullscreenResolutions(Resolutions);
for (FIntPoint Resolution : Resolutions)
{
ResolutionComboBox->AddOption(FString::FromInt(Resolution.X) + "x" + FString::FromInt(Resolution.Y));
}
FVector2D Resolution = FVector2D::ZeroVector;
GEngine->GameViewport->GetViewportSize(Resolution);
FString ResolutionString = FString::FromInt(Resolution.X) + "x" + FString::FromInt(Resolution.Y);
if (ResolutionComboBox->FindOptionIndex(ResolutionString) == -1)
{
ResolutionComboBox->AddOption(ResolutionString);
}
ResolutionComboBox->SetSelectedOption(ResolutionString);
}
void UOptionsMenuWidget::ReturnButtonOnClicked()
{
if (MainMenuMenuWidget)
{
RemoveFromParent();
UUserWidget* SelectWeaponWidget = CreateWidget<UUserWidget, APlayerController*>(
UGameplayStatics::GetPlayerController(GetWorld(), 0), MainMenuMenuWidget);
if (SelectWeaponWidget)
{
SelectWeaponWidget->AddToViewport();
}
}
}

View File

@ -0,0 +1,69 @@
// Louis Hobbs | 2024-2025
#pragma once
#include "CoreMinimal.h"
#include "VampireInteractiveWidget.h"
#include "OptionsMenuWidget.generated.h"
class UComboBoxString;
class UComboBox;
class UComboBox;
class UButton;
/**
*
*/
UCLASS()
class VAMPIRES_API UOptionsMenuWidget : public UVampireInteractiveWidget
{
GENERATED_BODY()
public:
UPROPERTY(meta = (BindWidget))
TObjectPtr<UComboBoxString> ResolutionComboBox;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> ResolutionTextBlock;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UComboBoxString> WindowTypeComboBox;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UComboBoxString> VsyncComboBox;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UComboBoxString> RefreshRateComboBox;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UComboBoxString> DynamicResolutionComboBox;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> ReturnButton;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> ReturnBlock;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> ResetToDefaultsButton;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> ResetToDefaultsBlock;
UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game")
TSubclassOf<UUserWidget> MainMenuMenuWidget;
protected:
virtual void NativeConstruct() override;
private:
void GenerateResolutionOptions();
UFUNCTION()
void ReturnButtonOnClicked();
UFUNCTION()
void ReturnTextBlockHoveredDelegate() { SetTextBlockHovered(ReturnBlock); }
UFUNCTION()
void ReturnTextBlockUnhoveredDelegate() { SetTextBlockUnhovered(ReturnBlock); }
};