From a05a24dc6263dfb8b6367ade6ab8ad305d15ed2f Mon Sep 17 00:00:00 2001 From: baz Date: Tue, 15 Apr 2025 21:49:05 +0100 Subject: [PATCH] Finalise base implementation of the Lightning Ring weapon --- .../BP_LightningRingWeapon.uasset | 4 +-- .../vampires/Weapons/LightningRingWeapon.cpp | 35 +++++++++++++------ Source/vampires/Weapons/LightningRingWeapon.h | 5 +++ 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset b/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset index f18bd2d..eb15618 100644 --- a/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset +++ b/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff463908ff055be62ac54d48ebcbd4996dec791f19e8d814b64c64e419106b3e -size 23557 +oid sha256:4de9fff11f72fce532f97a233fd214d68dc0a46df6732cba03e1c9cc98b0a002 +size 23128 diff --git a/Source/vampires/Weapons/LightningRingWeapon.cpp b/Source/vampires/Weapons/LightningRingWeapon.cpp index bbcba3a..d2cafc8 100644 --- a/Source/vampires/Weapons/LightningRingWeapon.cpp +++ b/Source/vampires/Weapons/LightningRingWeapon.cpp @@ -3,6 +3,8 @@ #include "LightningRingWeapon.h" #include "Components/SphereComponent.h" +#include "Kismet/GameplayStatics.h" +#include "Kismet/KismetSystemLibrary.h" #include "vampires/EnemyCharacter.h" #include "vampires/HealthComponent.h" @@ -27,18 +29,31 @@ void ALightningRingWeapon::FireWeaponAction_Implementation() { Super::FireWeaponAction_Implementation(); - if (OverlappedEnemies.Num() > 0) + TArray targetableEnemies = OverlappedEnemies; + + for (int i = 0; i < LightningBolts && targetableEnemies.Num() > 0; i++) { - AEnemyCharacter* target = OverlappedEnemies[FMath::RandRange(0, OverlappedEnemies.Num() - 1)]; - UHealthComponent* EnemyHealthComponent = target->GetHealthComponent(); - - AController* ownerController = nullptr; - if (AVampireCharacter* character = Cast(GetOwner())) - { - ownerController = character->GetController(); + AEnemyCharacter* target = targetableEnemies[FMath::RandRange(0, targetableEnemies.Num() - 1)]; + + TArray actorsToIgnore = TArray({ GetOwner() }); + TArray hitResults; + UKismetSystemLibrary::SphereTraceMultiByProfile(GetWorld(), + target->GetActorLocation(), + target->GetActorLocation(), + 500.0f, + FName(TEXT("Funny")), + false, + actorsToIgnore, + EDrawDebugTrace::ForDuration, + hitResults, + true); + + for (FHitResult EnemyHitResult : hitResults) + { + UGameplayStatics::ApplyDamage(EnemyHitResult.GetActor(), Damage, nullptr, this, nullptr); } - - EnemyHealthComponent->TakeDamage(target, Damage, nullptr, ownerController, this); + + targetableEnemies.Remove(target); } } diff --git a/Source/vampires/Weapons/LightningRingWeapon.h b/Source/vampires/Weapons/LightningRingWeapon.h index a34003a..568bc9c 100644 --- a/Source/vampires/Weapons/LightningRingWeapon.h +++ b/Source/vampires/Weapons/LightningRingWeapon.h @@ -20,6 +20,11 @@ class VAMPIRES_API ALightningRingWeapon : public AWeapon TArray OverlappedEnemies; +public: + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + int LightningBolts = 1; + public: ALightningRingWeapon();