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,46 +35,13 @@ ATurnBaseCombatV2::ATurnBaseCombatV2()
|
||||
void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
|
||||
{
|
||||
if (Enemy == nullptr) return;
|
||||
EnemyActor = Enemy;
|
||||
if (bIsInCombat) return;
|
||||
BookHUD->SetVisibility(ESlateVisibility::SelfHitTestInvisible);
|
||||
EscapePercentage = CalculateEscapePercentage();
|
||||
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;
|
||||
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
|
||||
APlayerController* PlayerController = GetWorld()->GetFirstPlayerController();
|
||||
@ -89,7 +56,34 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
|
||||
LookAtRotation.Pitch = -9.0f;
|
||||
PlayerController->SetControlRotation(LookAtRotation);
|
||||
|
||||
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 = "";
|
||||
UpdateComboString(CurrentComboString);
|
||||
@ -97,15 +91,24 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
|
||||
UpdateActionPoints();
|
||||
UpdateResourceBars();
|
||||
ClearBattleLog();
|
||||
EnableButtons();
|
||||
|
||||
if (EnemyBlackboard->GetValueAsBool("Sight"))
|
||||
{
|
||||
//bEnemyHasExtraTurn = true;
|
||||
SwitchTurn();
|
||||
}
|
||||
else
|
||||
{
|
||||
bPlayerHasExtraTurn = true;
|
||||
}
|
||||
}
|
||||
|
||||
void ATurnBaseCombatV2::EndCombat()
|
||||
{
|
||||
BookHUD->SetVisibility(ESlateVisibility::Hidden);
|
||||
Cast<ATempCharacter>(PlayerActor)->ResetWidgetPointer();
|
||||
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
||||
TurnIndicatorTextBlock->SetText(FText::FromString(""));
|
||||
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
|
||||
bEnemyHasExtraTurn = false;
|
||||
bPlayerHasExtraTurn = false;
|
||||
bIsInCombat = false;
|
||||
@ -130,8 +133,6 @@ void ATurnBaseCombatV2::EndCombat()
|
||||
void ATurnBaseCombatV2::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
||||
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
|
||||
|
||||
TArray<AActor*> AllCharacterActorsInScene;
|
||||
|
||||
@ -142,6 +143,7 @@ void ATurnBaseCombatV2::BeginPlay()
|
||||
}
|
||||
PlayerHealth = &Cast<ATempCharacter>(PlayerActor)->Health;
|
||||
|
||||
CombatTutorialWidgetInstance = CreateWidget<UUserWidget>(GetWorld(), CombatTutorialWidget);
|
||||
HUD = CreateWidget<UUserWidget>(GetWorld(), HUDWidget);
|
||||
TArray<AActor*> PlayerChildActors;
|
||||
PlayerActor->GetAllChildActors(PlayerChildActors, false);
|
||||
@ -256,21 +258,6 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
|
||||
RevertActionPoints();
|
||||
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
|
||||
switch (bIsPlayerTurn)
|
||||
{
|
||||
@ -316,6 +303,20 @@ void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
|
||||
*PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100);
|
||||
UpdateProgressBars();
|
||||
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)
|
||||
@ -323,6 +324,20 @@ void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType)
|
||||
*EnemyHealth -= FMath::Clamp(Damage * BaseDamageMultiplier, 0, 100);
|
||||
UpdateProgressBars();
|
||||
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
|
||||
@ -501,6 +516,7 @@ void ATurnBaseCombatV2::RunButtonOnClick()
|
||||
SwitchTurn();
|
||||
return;
|
||||
}
|
||||
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Escape Successful"));
|
||||
UBlackboardComponent* EnemyBlackboard = Cast<AAIController>(EnemyActor->GetInstigatorController())->GetBlackboardComponent();
|
||||
EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString("--"), FText::FromString("%")));
|
||||
EnemyBlackboard->SetValueAsBool("IsInCombat", false);
|
||||
@ -571,6 +587,28 @@ void ATurnBaseCombatV2::ToggleButtons() const
|
||||
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()
|
||||
{
|
||||
DamagePlayer(10);
|
||||
|
@ -54,7 +54,7 @@ public:
|
||||
|
||||
UPROPERTY(VisibleAnywhere)
|
||||
AActor* PlayerActor;
|
||||
UPROPERTY(VisibleAnywhere)
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
|
||||
AActor* EnemyActor;
|
||||
// AActor* ActiveActor;
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
@ -71,7 +71,7 @@ public:
|
||||
TSubclassOf<UUserWidget> HUDWidget;
|
||||
UPROPERTY(EditAnywhere)
|
||||
TSubclassOf<UUserWidget> CombatTutorialWidget;
|
||||
UPROPERTY()
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
bool HasSeenTutorial = false;
|
||||
UPROPERTY(EditAnywhere)
|
||||
TMap<FString, int32> ValidCombos =
|
||||
@ -99,6 +99,8 @@ public:
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void StartCombat(AActor* Enemy);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void CombatCheck();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void EndCombat();
|
||||
|
||||
DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnPlayerTurn, AActor*, AActor*);
|
||||
@ -217,6 +219,10 @@ private:
|
||||
void UpdateResourceBars() const;
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ToggleButtons() const;
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void DisableButtons() const;
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void EnableButtons() const;
|
||||
void EnemyTurn();
|
||||
|
||||
UPROPERTY()
|
||||
|
Loading…
Reference in New Issue
Block a user