From 488387767b5015e2873008a36a6eae1a43d679a6 Mon Sep 17 00:00:00 2001 From: baz Date: Wed, 16 Apr 2025 14:37:42 +0100 Subject: [PATCH] Port Fire Wand to new ProjectileWeapon implementation --- Source/vampires/Weapons/FireWandWeapon.cpp | 59 ++++++++++++---------- Source/vampires/Weapons/FireWandWeapon.h | 3 ++ 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Source/vampires/Weapons/FireWandWeapon.cpp b/Source/vampires/Weapons/FireWandWeapon.cpp index a881352..58cf859 100644 --- a/Source/vampires/Weapons/FireWandWeapon.cpp +++ b/Source/vampires/Weapons/FireWandWeapon.cpp @@ -23,33 +23,6 @@ void AFireWandWeapon::BeginPlay() void AFireWandWeapon::FireWeaponAction_Implementation() { Super::FireWeaponAction_Implementation(); - - if (ProjectileTemplate && OverlappedEnemies.Num() > 0) - { - AGameModeBase* gamemode = UGameplayStatics::GetGameMode(GetWorld()); - - if (UKismetSystemLibrary::DoesImplementInterface(gamemode, UPools::StaticClass())) - { - if (AObjectPoolManager* objectPoolManager = IPools::Execute_GetProjectileObjectPoolManager(gamemode)) - { - AActor* projectile = objectPoolManager->GetObject(); - - if (UKismetSystemLibrary::DoesImplementInterface(projectile, UProjectilable::StaticClass())) - { - IProjectilable::Execute_LoadDataFromDataAsset(projectile, ProjectileTemplate); - projectile->SetOwner(this); - - AActor* target = OverlappedEnemies[FMath::RandRange(0, OverlappedEnemies.Num() - 1)]; - FVector direction = UKismetMathLibrary::GetDirectionUnitVector( - GetActorLocation(), target->GetActorLocation()); - direction.Z = 0.0; - direction.Normalize(); - - IProjectilable::Execute_SetTargetDirection(projectile, direction); - } - } - } - } } bool AFireWandWeapon::UpgradeWeapon_Implementation() @@ -89,3 +62,35 @@ bool AFireWandWeapon::UpgradeWeapon_Implementation() ResetWeaponTimer(); return true; } + +void AFireWandWeapon::FireProjectile() +{ + if (ProjectileTemplate && OverlappedEnemies.Num() > 0) + { + AGameModeBase* gamemode = UGameplayStatics::GetGameMode(GetWorld()); + + if (UKismetSystemLibrary::DoesImplementInterface(gamemode, UPools::StaticClass())) + { + if (AObjectPoolManager* objectPoolManager = IPools::Execute_GetProjectileObjectPoolManager(gamemode)) + { + AActor* projectile = objectPoolManager->GetObject(); + + if (UKismetSystemLibrary::DoesImplementInterface(projectile, UProjectilable::StaticClass())) + { + IProjectilable::Execute_LoadDataFromDataAsset(projectile, ProjectileTemplate); + projectile->SetOwner(this); + + AActor* target = OverlappedEnemies[FMath::RandRange(0, OverlappedEnemies.Num() - 1)]; + FVector direction = UKismetMathLibrary::GetDirectionUnitVector( + GetActorLocation(), target->GetActorLocation()); + direction.Z = 0.0; + direction.Normalize(); + + IProjectilable::Execute_SetTargetDirection(projectile, direction); + } + + Super::FireProjectile(); + } + } + } +} diff --git a/Source/vampires/Weapons/FireWandWeapon.h b/Source/vampires/Weapons/FireWandWeapon.h index c7007ee..205d336 100644 --- a/Source/vampires/Weapons/FireWandWeapon.h +++ b/Source/vampires/Weapons/FireWandWeapon.h @@ -24,4 +24,7 @@ public: virtual void FireWeaponAction_Implementation() override; virtual bool UpgradeWeapon_Implementation() override; + +protected: + virtual void FireProjectile() override; };