From a0cb52c17edf69db3acb522cc2f963f91f0bbacb Mon Sep 17 00:00:00 2001 From: baz Date: Wed, 23 Jul 2025 21:07:37 +0100 Subject: [PATCH] Add Niagara System to Lightning Ring --- .../BP_LightningRingWeapon.uasset | 4 +- .../NS_LIghtningRingEffect.uasset | 3 + .../vampires/Weapons/LightningRingWeapon.cpp | 89 ++++++++++--------- Source/vampires/Weapons/LightningRingWeapon.h | 5 +- 4 files changed, 58 insertions(+), 43 deletions(-) create mode 100644 Content/Weapons/LightningRing/NS_LIghtningRingEffect.uasset diff --git a/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset b/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset index 30140b8..ed04558 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:d8c224b4d46a271bf4012f41b19ff5e7504e5dd8e83a31e59808dbf39968ad22 -size 25159 +oid sha256:355c827448e52c4539a2cf15b1dff949d5253c498130d3830a2772ad345b9674 +size 25836 diff --git a/Content/Weapons/LightningRing/NS_LIghtningRingEffect.uasset b/Content/Weapons/LightningRing/NS_LIghtningRingEffect.uasset new file mode 100644 index 0000000..522c288 --- /dev/null +++ b/Content/Weapons/LightningRing/NS_LIghtningRingEffect.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:880851c62b1ba128e13781fb1d6ebea07a07945b6548a94d0af8dcd2ef8663c6 +size 427790 diff --git a/Source/vampires/Weapons/LightningRingWeapon.cpp b/Source/vampires/Weapons/LightningRingWeapon.cpp index 523b810..1b10294 100644 --- a/Source/vampires/Weapons/LightningRingWeapon.cpp +++ b/Source/vampires/Weapons/LightningRingWeapon.cpp @@ -2,11 +2,10 @@ #include "LightningRingWeapon.h" -#include "Components/SphereComponent.h" #include "Kismet/GameplayStatics.h" #include "Kismet/KismetSystemLibrary.h" #include "vampires/EnemyCharacter.h" -#include "vampires/HealthComponent.h" +#include "NiagaraFunctionLibrary.h" ALightningRingWeapon::ALightningRingWeapon() { @@ -24,27 +23,34 @@ void ALightningRingWeapon::FireWeaponAction_Implementation() TArray targetableEnemies = OverlappedEnemies; - for (int i = 0; i < LightningBolts && targetableEnemies.Num() > 0; i++) + for (int i = 0; i < LightningBolts && targetableEnemies.Num() > 0; i++) { AActor* target = targetableEnemies[FMath::RandRange(0, targetableEnemies.Num() - 1)]; TArray> traceObjectTypes; traceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECC_Pawn)); - - TArray actorsToIgnore = TArray({ GetOwner() }); + + TArray actorsToIgnore = TArray({GetOwner()}); TArray hitResults; - + UKismetSystemLibrary::SphereOverlapActors(GetWorld(), - target->GetActorLocation(), - LightingBoltRadius, - traceObjectTypes, - AEnemyCharacter::StaticClass(), - actorsToIgnore, - hitResults); + target->GetActorLocation(), + LightingBoltRadius, + traceObjectTypes, + AEnemyCharacter::StaticClass(), + actorsToIgnore, + hitResults); + + if (LightningEffectSystem) + { + float scale = FMath::FloorToFloat((CurrentLevel + 2.0f) / 2.0f); + UNiagaraFunctionLibrary::SpawnSystemAtLocation(this, LightningEffectSystem, target->GetActorLocation(), + GetActorRotation(), FVector(scale)); + } for (AActor* EnemyHitResult : hitResults) - { + { UGameplayStatics::ApplyDamage(EnemyHitResult, Damage, nullptr, this, nullptr); } @@ -54,36 +60,39 @@ void ALightningRingWeapon::FireWeaponAction_Implementation() bool ALightningRingWeapon::UpgradeWeapon_Implementation() { - if (!Super::UpgradeWeapon_Implementation()) return false; + if (!Super::UpgradeWeapon_Implementation()) + { + return false; + } switch (CurrentLevel) { - case 1: - LightningBolts++; - break; - case 2: - LightingBoltRadius += LightingBoltRadius; - Damage += 10; - break; - case 3: - LightningBolts++; - break; - case 4: - LightingBoltRadius += LightingBoltRadius; - Damage += 20; - break; - case 5: - LightningBolts++; - break; - case 6: - LightingBoltRadius += LightingBoltRadius; - Damage += 20; - break; - case 7: - LightningBolts++; - break; - default: - return false; + case 1: + LightningBolts++; + break; + case 2: + LightingBoltRadius += LightingBoltRadius; + Damage += 10; + break; + case 3: + LightningBolts++; + break; + case 4: + LightingBoltRadius += LightingBoltRadius; + Damage += 20; + break; + case 5: + LightningBolts++; + break; + case 6: + LightingBoltRadius += LightingBoltRadius; + Damage += 20; + break; + case 7: + LightningBolts++; + break; + default: + return false; } return true; diff --git a/Source/vampires/Weapons/LightningRingWeapon.h b/Source/vampires/Weapons/LightningRingWeapon.h index 1184937..4197cd3 100644 --- a/Source/vampires/Weapons/LightningRingWeapon.h +++ b/Source/vampires/Weapons/LightningRingWeapon.h @@ -6,6 +6,7 @@ #include "../Weapon.h" #include "LightningRingWeapon.generated.h" +class UNiagaraSystem; class AEnemyCharacter; class USphereComponent; /** @@ -17,13 +18,15 @@ class VAMPIRES_API ALightningRingWeapon : public AWeapon GENERATED_BODY() public: - UPROPERTY(EditAnywhere, BlueprintReadWrite) int LightningBolts = 1; UPROPERTY(EditAnywhere, BlueprintReadWrite) float LightingBoltRadius = 200.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr LightningEffectSystem; + public: ALightningRingWeapon();