// Fill out your copyright notice in the Description page of Project Settings. #include "TurnBaseCombat.h" #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "Components/TextBlock.h" #include "Components/ProgressBar.h" #include "Kismet/GameplayStatics.h" ATurnBaseCombat::ATurnBaseCombat() { if (HUDWidget == nullptr) { // Load the HUD widget from the specified path static ConstructorHelpers::FClassFinder HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI")); HUDWidget = HUDWidgetClass.Class; } } void ATurnBaseCombat::BeginPlay() { Super::BeginPlay(); TArray AllCharacterActorsInScene; UGameplayStatics::GetAllActorsOfClassWithTag(GetWorld(), AActor::StaticClass(), FName("Character"), AllCharacterActorsInScene); ActiveActionPoints = DefaultActionPoints; UUserWidget* HUD = CreateWidget(GetWorld(), HUDWidget); HUD->AddToViewport(); TurnIndicator = Cast(HUD->GetWidgetFromName("TurnIndicator")); PlayerHealthBar = Cast(HUD->GetWidgetFromName("PlayerHealthBar")); EnemyHealthBar = Cast(HUD->GetWidgetFromName("EnemyHealthBar")); } void ATurnBaseCombat::ExecuteCast(FString Combo) { if (!IsValidCombo(Combo)) { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Invalid Combo")); return; } switch (bIsPlayerTurn) { case true: // Player Turn DamageEnemy(ValidCombos[Combo]); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Enemy Damaged %f"), ValidCombos[Combo]); break; case false: // Enemy Turn DamagePlayer(ValidCombos[Combo]); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Player Damaged %f"), ValidCombos[Combo]); break; } } void ATurnBaseCombat::UseActionPoint() { ActiveActionPoints -= 1; ActiveActionPoints = FMath::Clamp(ActiveActionPoints, 0, DefaultActionPoints); } void ATurnBaseCombat::ReuseActionPoint() { ActiveActionPoints += 1; ActiveActionPoints = FMath::Clamp(ActiveActionPoints, 0, DefaultActionPoints); } void ATurnBaseCombat::RevertActionPoints() { ActiveActionPoints = DefaultActionPoints; } void ATurnBaseCombat::DamagePlayer(int Damage) { PlayerHealth -= FMath::Clamp(Damage, 0, 100); } void ATurnBaseCombat::DamageEnemy(int Damage) { EnemyHealth -= FMath::Clamp(Damage, 0, 100); } void ATurnBaseCombat::UpdateProgressBars() const { PlayerHealthBar->SetPercent(PlayerHealth / 100); EnemyHealthBar->SetPercent(EnemyHealth / 100); } bool ATurnBaseCombat::IsValidCombo(FString Combo) const { return ValidCombos.Contains(Combo); } void ATurnBaseCombat::SwitchTurn() { activeActor = bIsPlayerTurn ? enemyActor : playerActor; }