diff --git a/Content/Assets/FX/SmokeBeam/BeamTextureThin.uasset b/Content/Assets/FX/SmokeBeam/BeamTextureThin.uasset new file mode 100644 index 0000000..4f857f1 Binary files /dev/null and b/Content/Assets/FX/SmokeBeam/BeamTextureThin.uasset differ diff --git a/Content/Assets/FX/SmokeBeam/M_Beam.uasset b/Content/Assets/FX/SmokeBeam/M_Beam.uasset new file mode 100644 index 0000000..bad2abc Binary files /dev/null and b/Content/Assets/FX/SmokeBeam/M_Beam.uasset differ diff --git a/Content/Assets/FX/SmokeBeam/P_SmokeTrail.uasset b/Content/Assets/FX/SmokeBeam/P_SmokeTrail.uasset new file mode 100644 index 0000000..28e3a8b Binary files /dev/null and b/Content/Assets/FX/SmokeBeam/P_SmokeTrail.uasset differ diff --git a/Content/Blueprints/Weapon/BP_Pistol.uasset b/Content/Blueprints/Weapon/BP_Pistol.uasset index d53008d..735bacb 100644 Binary files a/Content/Blueprints/Weapon/BP_Pistol.uasset and b/Content/Blueprints/Weapon/BP_Pistol.uasset differ diff --git a/Source/Blaster/Weapon/HitScanWeapon.cpp b/Source/Blaster/Weapon/HitScanWeapon.cpp index 853eb27..389ef8f 100644 --- a/Source/Blaster/Weapon/HitScanWeapon.cpp +++ b/Source/Blaster/Weapon/HitScanWeapon.cpp @@ -6,6 +6,7 @@ #include "Blaster/Character/BlasterCharacter.h" #include "Engine/SkeletalMeshSocket.h" #include "Kismet/GameplayStatics.h" +#include "Particles/ParticleSystemComponent.h" void AHitScanWeapon::Fire(const FVector& HitTarget) { @@ -16,7 +17,7 @@ void AHitScanWeapon::Fire(const FVector& HitTarget) AController* InstigatorController = OwnerPawn->GetController(); const USkeletalMeshSocket* MuzzleFlashSocket = GetWeaponMesh()->GetSocketByName("MuzzleFlash"); - if (MuzzleFlashSocket && InstigatorController) + if (MuzzleFlashSocket) { FTransform SocketTransform = MuzzleFlashSocket->GetSocketTransform(GetWeaponMesh()); FVector Start = SocketTransform.GetLocation(); @@ -32,21 +33,20 @@ void AHitScanWeapon::Fire(const FVector& HitTarget) End, ECC_Visibility ); + FVector BeamEnd = End; if (FireHit.bBlockingHit) { + BeamEnd = FireHit.ImpactPoint; ABlasterCharacter* BlasterCharacter = Cast(FireHit.GetActor()); - if (BlasterCharacter) + if (BlasterCharacter && HasAuthority() && InstigatorController) { - if (HasAuthority()) - { - UGameplayStatics::ApplyDamage( - BlasterCharacter, - Damage, - InstigatorController, - this, - UDamageType::StaticClass() - ); - } + UGameplayStatics::ApplyDamage( + BlasterCharacter, + Damage, + InstigatorController, + this, + UDamageType::StaticClass() + ); } if (ImpactParticles) @@ -59,6 +59,19 @@ void AHitScanWeapon::Fire(const FVector& HitTarget) ); } } + + if (BeamParticles) + { + UParticleSystemComponent* Beam = UGameplayStatics::SpawnEmitterAtLocation( + World, + BeamParticles, + SocketTransform + ); + if (Beam) + { + Beam->SetVectorParameter(FName("Target"), BeamEnd); + } + } } } } diff --git a/Source/Blaster/Weapon/HitScanWeapon.h b/Source/Blaster/Weapon/HitScanWeapon.h index 1ba2439..328a2ff 100644 --- a/Source/Blaster/Weapon/HitScanWeapon.h +++ b/Source/Blaster/Weapon/HitScanWeapon.h @@ -24,5 +24,9 @@ private: float Damage = 20.f; UPROPERTY(EditAnywhere) - class UParticleSystem* ImpactParticles; + UParticleSystem* ImpactParticles; + + UPROPERTY(EditAnywhere) + UParticleSystem* BeamParticles; + };