Bugfix Game End on Player Death & Lock Combat on Tutorial
This commit is contained in:
parent
b1bdcb7618
commit
5634557af2
BIN
Content/Blueprints/Combat_UI/BookCombat_UI.uasset
(Stored with Git LFS)
BIN
Content/Blueprints/Combat_UI/BookCombat_UI.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Blueprints/Combat_UI/CombatCharacter.uasset
(Stored with Git LFS)
BIN
Content/Blueprints/Combat_UI/CombatCharacter.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Blueprints/Combat_UI/CombatTutorial.uasset
(Stored with Git LFS)
BIN
Content/Blueprints/Combat_UI/CombatTutorial.uasset
(Stored with Git LFS)
Binary file not shown.
@ -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);
|
||||||
|
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user