Updated TurnBasedCombat for Event Delegation

This commit is contained in:
Philip W 2023-02-27 20:01:02 +00:00
parent 775f3b4945
commit 02832aee0e
2 changed files with 11 additions and 6 deletions

View File

@ -18,7 +18,6 @@ ATurnBaseCombatV2::ATurnBaseCombatV2()
{ {
if (HUDWidget == nullptr) if (HUDWidget == nullptr)
{ {
// Load the HUD widget from the specified path
static ConstructorHelpers::FClassFinder<UUserWidget> HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI")); static ConstructorHelpers::FClassFinder<UUserWidget> HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI"));
HUDWidget = HUDWidgetClass.Class; HUDWidget = HUDWidgetClass.Class;
static ConstructorHelpers::FClassFinder<UStatusEffect> StatusEffectThornsClassFinder(TEXT("/Game/Blueprints/StatusEffects/BP_Thorns")); static ConstructorHelpers::FClassFinder<UStatusEffect> StatusEffectThornsClassFinder(TEXT("/Game/Blueprints/StatusEffects/BP_Thorns"));
@ -71,7 +70,7 @@ void ATurnBaseCombatV2::EndCombat()
{ {
StatusEffect->OnExpiry(PlayerActor); StatusEffect->OnExpiry(PlayerActor);
} }
//Remove the HUD from the viewport
HUD->RemoveFromParent(); HUD->RemoveFromParent();
APawn* PlayerPawn = Cast<APawn>(GetWorld()->GetFirstPlayerController()->GetPawn()); APawn* PlayerPawn = Cast<APawn>(GetWorld()->GetFirstPlayerController()->GetPawn());
PlayerPawn->bUseControllerRotationYaw = true; PlayerPawn->bUseControllerRotationYaw = true;
@ -143,7 +142,6 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
if (!IsValidCombo(Combo)) if (!IsValidCombo(Combo))
{ {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Invalid Combo")); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Invalid Combo"));
//For each character in the current combo add back the resource
for (int i = 0; i < Combo.Len(); i++) for (int i = 0; i < Combo.Len(); i++)
{ {
if (Combo[i] == 'P') if (Combo[i] == 'P')
@ -183,7 +181,6 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
if (GunEffect) if (GunEffect)
{ {
//Get Static Mesh Location on the player actor
const UStaticMeshComponent* GunComponent = Cast<UStaticMeshComponent>(PlayerActor->GetComponentsByTag(UPrimitiveComponent::StaticClass(), FName("Gun"))[0]); const UStaticMeshComponent* GunComponent = Cast<UStaticMeshComponent>(PlayerActor->GetComponentsByTag(UPrimitiveComponent::StaticClass(), FName("Gun"))[0]);
const FVector GunLocationOffset = GunComponent->GetSocketTransform("Muzzle").TransformPosition(FVector(-100, 0, 0)); const FVector GunLocationOffset = GunComponent->GetSocketTransform("Muzzle").TransformPosition(FVector(-100, 0, 0));
UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), GunEffect, GunLocationOffset, PlayerActor->GetActorRotation()); UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), GunEffect, GunLocationOffset, PlayerActor->GetActorRotation());
@ -200,14 +197,17 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
// Player Turn // Player Turn
DamageEnemy(*ValidCombos.Find(Combo)); DamageEnemy(*ValidCombos.Find(Combo));
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("Enemy Damaged %d"), *ValidCombos.Find(Combo))); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("Enemy Damaged %d"), *ValidCombos.Find(Combo)));
OnPlayerTurn.Broadcast(PlayerActor, EnemyActor);
break; break;
case false: case false:
// Enemy Turn // Enemy Turn
DamagePlayer(*ValidCombos.Find(Combo)); DamagePlayer(*ValidCombos.Find(Combo));
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("Player Damaged %d"), *ValidCombos.Find(Combo))); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("Player Damaged %d"), *ValidCombos.Find(Combo)));
OnEnemyTurn.Broadcast(EnemyActor, PlayerActor);
break; break;
} }
//End Combat if either the player or enemy is dead
//Ends Combat if either the player or enemy is dead
if (*EnemyHealth <= 0) if (*EnemyHealth <= 0)
{ {
EndCombat(); EndCombat();
@ -277,7 +277,7 @@ void ATurnBaseCombatV2::SwitchTurn()
//bIsPlayerTurn = !bIsPlayerTurn; //bIsPlayerTurn = !bIsPlayerTurn;
TurnIndicatorTextBlock->SetText(FText::FromString("Enemy Turn")); TurnIndicatorTextBlock->SetText(FText::FromString("Enemy Turn"));
ToggleButtons(); ToggleButtons();
//wait for 2 seconds
FTimerHandle UnusedHandle; FTimerHandle UnusedHandle;
GetWorldTimerManager().SetTimer(UnusedHandle, this, &ATurnBaseCombatV2::EnemyTurn, 2.0f, false); GetWorldTimerManager().SetTimer(UnusedHandle, this, &ATurnBaseCombatV2::EnemyTurn, 2.0f, false);

View File

@ -99,6 +99,11 @@ public:
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void WKeyPressed(); void WKeyPressed();
DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnPlayerTurn, AActor*, AActor*);
DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnEnemyTurn, AActor*, AActor*);
FOnPlayerTurn OnPlayerTurn;
FOnEnemyTurn OnEnemyTurn;
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
void ExecuteCast(FString Combo); void ExecuteCast(FString Combo);