Add Niagara System to Lightning Ring

This commit is contained in:
baz 2025-07-23 21:07:37 +01:00
parent 692bd2d38e
commit a0cb52c17e
4 changed files with 58 additions and 43 deletions

Binary file not shown.

BIN
Content/Weapons/LightningRing/NS_LIghtningRingEffect.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -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<AActor*> 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<TEnumAsByte<EObjectTypeQuery>> traceObjectTypes;
traceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECC_Pawn));
TArray<AActor*> actorsToIgnore = TArray<AActor*>({ GetOwner() });
TArray<AActor*> actorsToIgnore = TArray<AActor*>({GetOwner()});
TArray<AActor*> 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;

View File

@ -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<UNiagaraSystem> LightningEffectSystem;
public:
ALightningRingWeapon();