Bugfix Game End on Player Death & Lock Combat on Tutorial

This commit is contained in:
Philip W 2023-04-26 05:28:02 +01:00
parent b1bdcb7618
commit 5634557af2
5 changed files with 107 additions and 63 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -35,47 +35,14 @@ ATurnBaseCombatV2::ATurnBaseCombatV2()
void ATurnBaseCombatV2::StartCombat(AActor* Enemy) void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
{ {
if (Enemy == nullptr) return; if (Enemy == nullptr) return;
EnemyActor = Enemy;
if (bIsInCombat) return; if (bIsInCombat) return;
BookHUD->SetVisibility(ESlateVisibility::SelfHitTestInvisible); BookHUD->SetVisibility(ESlateVisibility::SelfHitTestInvisible);
EscapePercentage = CalculateEscapePercentage(); EscapePercentage = CalculateEscapePercentage();
EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString(FString::FromInt(EscapePercentage * 100)), FText::FromString("%"))); EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString(FString::FromInt(EscapePercentage * 100)), FText::FromString("%")));
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
bIsInCombat = true; bIsInCombat = true;
UBlackboardComponent* EnemyBlackboard = Cast<AAIController>(Enemy->GetInstigatorController())->GetBlackboardComponent(); UBlackboardComponent* EnemyBlackboard = Cast<AAIController>(Enemy->GetInstigatorController())->GetBlackboardComponent();
if (!HasSeenTutorial)
{
ToggleButtons();
CombatTutorialWidgetInstance = CreateWidget<UUserWidget>(GetWorld(), CombatTutorialWidget);
CombatTutorialWidgetInstance->AddToViewport();
HasSeenTutorial = true;
}
if (EnemyBlackboard->GetValueAsBool("IsInCombat")) return;
EnemyBlackboard->SetValueAsBool("IsInCombat", true);
FProperty* HealthProperty = Enemy->GetClass()->FindPropertyByName(FName("Health"));
int32* EnemyHealthPtr = HealthProperty->ContainerPtrToValuePtr<int32>(Enemy);
EnemyHealth = EnemyHealthPtr;
if (EnemyBlackboard->GetValueAsBool("Sight"))
{
//bEnemyHasExtraTurn = true;
SwitchTurn();
}
else
{
bPlayerHasExtraTurn = true;
}
if (HUD->IsInViewport()) return;
//HUD->AddToViewport();
EnemyActor = Enemy;
ProbertiumResource = 10;
EisResource = 10;
AzosResource = 10;
IroquoidResource = 10;
//Disable Character Movement //Disable Character Movement
APlayerController* PlayerController = GetWorld()->GetFirstPlayerController(); APlayerController* PlayerController = GetWorld()->GetFirstPlayerController();
PlayerController->SetIgnoreMoveInput(true); PlayerController->SetIgnoreMoveInput(true);
@ -89,23 +56,59 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
LookAtRotation.Pitch = -9.0f; LookAtRotation.Pitch = -9.0f;
PlayerController->SetControlRotation(LookAtRotation); PlayerController->SetControlRotation(LookAtRotation);
//DrawDebugPoint(GetWorld(), Enemy->GetActorLocation(), 10, FColor::Red, false, 10); if (EnemyBlackboard->GetValueAsBool("IsInCombat")) return;
EnemyBlackboard->SetValueAsBool("IsInCombat", true);
FProperty* HealthProperty = Enemy->GetClass()->FindPropertyByName(FName("Health"));
int32* EnemyHealthPtr = HealthProperty->ContainerPtrToValuePtr<int32>(Enemy);
EnemyHealth = EnemyHealthPtr;
if (IsValid(CombatTutorialWidgetInstance) && CombatTutorialWidgetInstance->IsInViewport()) return;
if (!HasSeenTutorial)
{
DisableButtons();
CombatTutorialWidgetInstance->AddToViewport();
HasSeenTutorial = true;
return;
}
CombatCheck();
//DrawDebugPoint(GetWorld(), Enemy->GetActorLocation(), 10, FColor::Red, false, 10);
}
void ATurnBaseCombatV2::CombatCheck()
{
const UBlackboardComponent* EnemyBlackboard = Cast<AAIController>(EnemyActor->GetInstigatorController())->GetBlackboardComponent();
//TODO: REMOVE THIS
ProbertiumResource = 10;
EisResource = 10;
AzosResource = 10;
IroquoidResource = 10;
CurrentComboString = ""; CurrentComboString = "";
UpdateComboString(CurrentComboString); UpdateComboString(CurrentComboString);
RevertActionPoints(); RevertActionPoints();
UpdateActionPoints(); UpdateActionPoints();
UpdateResourceBars(); UpdateResourceBars();
ClearBattleLog(); ClearBattleLog();
EnableButtons();
if (EnemyBlackboard->GetValueAsBool("Sight"))
{
//bEnemyHasExtraTurn = true;
SwitchTurn();
}
else
{
bPlayerHasExtraTurn = true;
}
} }
void ATurnBaseCombatV2::EndCombat() void ATurnBaseCombatV2::EndCombat()
{ {
BookHUD->SetVisibility(ESlateVisibility::Hidden); BookHUD->SetVisibility(ESlateVisibility::Hidden);
Cast<ATempCharacter>(PlayerActor)->ResetWidgetPointer(); Cast<ATempCharacter>(PlayerActor)->ResetWidgetPointer();
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
TurnIndicatorTextBlock->SetText(FText::FromString("")); TurnIndicatorTextBlock->SetText(FText::FromString(""));
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
bEnemyHasExtraTurn = false; bEnemyHasExtraTurn = false;
bPlayerHasExtraTurn = false; bPlayerHasExtraTurn = false;
bIsInCombat = false; bIsInCombat = false;
@ -130,8 +133,6 @@ void ATurnBaseCombatV2::EndCombat()
void ATurnBaseCombatV2::BeginPlay() void ATurnBaseCombatV2::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
TArray<AActor*> AllCharacterActorsInScene; TArray<AActor*> AllCharacterActorsInScene;
@ -142,6 +143,7 @@ void ATurnBaseCombatV2::BeginPlay()
} }
PlayerHealth = &Cast<ATempCharacter>(PlayerActor)->Health; PlayerHealth = &Cast<ATempCharacter>(PlayerActor)->Health;
CombatTutorialWidgetInstance = CreateWidget<UUserWidget>(GetWorld(), CombatTutorialWidget);
HUD = CreateWidget<UUserWidget>(GetWorld(), HUDWidget); HUD = CreateWidget<UUserWidget>(GetWorld(), HUDWidget);
TArray<AActor*> PlayerChildActors; TArray<AActor*> PlayerChildActors;
PlayerActor->GetAllChildActors(PlayerChildActors, false); PlayerActor->GetAllChildActors(PlayerChildActors, false);
@ -256,21 +258,6 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
RevertActionPoints(); RevertActionPoints();
UpdateActionPoints(); UpdateActionPoints();
//Ends Combat if either the player or enemy is dead
if (*EnemyHealth <= 0)
{
EndCombat();
EnemyActor->Destroy();
return;
}
if (*PlayerHealth <= 0)
{
//EndCombat();
DeathScreenWidget = CreateWidget<UUserWidget>(GetWorld(), DeathScreenWidgetSubclass);
DeathScreenWidget->AddToViewport();
return;
}
//Damage Calculation //Damage Calculation
switch (bIsPlayerTurn) switch (bIsPlayerTurn)
{ {
@ -316,6 +303,20 @@ void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
*PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100); *PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100);
UpdateProgressBars(); UpdateProgressBars();
AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage * BaseDefenseMultiplier) + " HP by " + DamageType + "."); AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage * BaseDefenseMultiplier) + " HP by " + DamageType + ".");
//Ends Combat if either the player or enemy is dead
if (*EnemyHealth <= 0)
{
EndCombat();
EnemyActor->Destroy();
return;
}
if (*PlayerHealth <= 0)
{
//EndCombat();
DeathScreenWidget = CreateWidget<UUserWidget>(GetWorld(), DeathScreenWidgetSubclass);
DeathScreenWidget->AddToViewport();
return;
}
} }
void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType) void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType)
@ -323,6 +324,20 @@ void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType)
*EnemyHealth -= FMath::Clamp(Damage * BaseDamageMultiplier, 0, 100); *EnemyHealth -= FMath::Clamp(Damage * BaseDamageMultiplier, 0, 100);
UpdateProgressBars(); UpdateProgressBars();
AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage * BaseDamageMultiplier) + " HP by " + DamageType + "."); AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage * BaseDamageMultiplier) + " HP by " + DamageType + ".");
//Ends Combat if either the player or enemy is dead
if (*EnemyHealth <= 0)
{
EndCombat();
EnemyActor->Destroy();
return;
}
if (*PlayerHealth <= 0)
{
//EndCombat();
DeathScreenWidget = CreateWidget<UUserWidget>(GetWorld(), DeathScreenWidgetSubclass);
DeathScreenWidget->AddToViewport();
return;
}
} }
void ATurnBaseCombatV2::UpdateProgressBars() const void ATurnBaseCombatV2::UpdateProgressBars() const
@ -501,6 +516,7 @@ void ATurnBaseCombatV2::RunButtonOnClick()
SwitchTurn(); SwitchTurn();
return; return;
} }
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Escape Successful"));
UBlackboardComponent* EnemyBlackboard = Cast<AAIController>(EnemyActor->GetInstigatorController())->GetBlackboardComponent(); UBlackboardComponent* EnemyBlackboard = Cast<AAIController>(EnemyActor->GetInstigatorController())->GetBlackboardComponent();
EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString("--"), FText::FromString("%"))); EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString("--"), FText::FromString("%")));
EnemyBlackboard->SetValueAsBool("IsInCombat", false); EnemyBlackboard->SetValueAsBool("IsInCombat", false);
@ -571,6 +587,28 @@ void ATurnBaseCombatV2::ToggleButtons() const
RunButton->SetIsEnabled(!RunButton->GetIsEnabled()); RunButton->SetIsEnabled(!RunButton->GetIsEnabled());
} }
void ATurnBaseCombatV2::DisableButtons() const
{
PButton->SetIsEnabled(false);
EButton->SetIsEnabled(false);
AButton->SetIsEnabled(false);
IButton->SetIsEnabled(false);
BackspaceButton->SetIsEnabled(false);
CastButton->SetIsEnabled(false);
RunButton->SetIsEnabled(false);
}
void ATurnBaseCombatV2::EnableButtons() const
{
PButton->SetIsEnabled(true);
EButton->SetIsEnabled(true);
AButton->SetIsEnabled(true);
IButton->SetIsEnabled(true);
BackspaceButton->SetIsEnabled(true);
CastButton->SetIsEnabled(true);
RunButton->SetIsEnabled(true);
}
void ATurnBaseCombatV2::EnemyTurn() void ATurnBaseCombatV2::EnemyTurn()
{ {
DamagePlayer(10); DamagePlayer(10);

View File

@ -54,7 +54,7 @@ public:
UPROPERTY(VisibleAnywhere) UPROPERTY(VisibleAnywhere)
AActor* PlayerActor; AActor* PlayerActor;
UPROPERTY(VisibleAnywhere) UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
AActor* EnemyActor; AActor* EnemyActor;
// AActor* ActiveActor; // AActor* ActiveActor;
UPROPERTY(BlueprintReadWrite) UPROPERTY(BlueprintReadWrite)
@ -71,7 +71,7 @@ public:
TSubclassOf<UUserWidget> HUDWidget; TSubclassOf<UUserWidget> HUDWidget;
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
TSubclassOf<UUserWidget> CombatTutorialWidget; TSubclassOf<UUserWidget> CombatTutorialWidget;
UPROPERTY() UPROPERTY(BlueprintReadWrite)
bool HasSeenTutorial = false; bool HasSeenTutorial = false;
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
TMap<FString, int32> ValidCombos = TMap<FString, int32> ValidCombos =
@ -99,6 +99,8 @@ public:
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void StartCombat(AActor* Enemy); void StartCombat(AActor* Enemy);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void CombatCheck();
UFUNCTION(BlueprintCallable)
void EndCombat(); void EndCombat();
DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnPlayerTurn, AActor*, AActor*); DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnPlayerTurn, AActor*, AActor*);
@ -217,6 +219,10 @@ private:
void UpdateResourceBars() const; void UpdateResourceBars() const;
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void ToggleButtons() const; void ToggleButtons() const;
UFUNCTION(BlueprintCallable)
void DisableButtons() const;
UFUNCTION(BlueprintCallable)
void EnableButtons() const;
void EnemyTurn(); void EnemyTurn();
UPROPERTY() UPROPERTY()