179{
180 if(!HasAuthority())
181 {
182 return;
183 }
185 {
188 return;
189 }
191
192 if(HitResult.PhysMaterial.Get() != nullptr)
193 {
194 UE_LOG(LogWeaponSystem,
Error, TEXT(
"Physical Material Hit"));
195 UE_LOG(LogWeaponSystem,
Error, TEXT(
"Physical Material: %s"), *HitResult.PhysMaterial.Get()->GetName());
196 }
198 {
200 }
201
204
205 TArray<AActor*> ActorsToIgnore;
206
208 {
211 }
212
214 {
215 ActorsToIgnore.Empty();
216 }
217
218 const FVector TraceStart = HitResult.ImpactPoint;
219 const FVector TraceEnd = TraceStart - FVector(1.0f,1.0f,1.0f);
220
221 TArray<FHitResult> SphereHits;
222 const bool bHit = UKismetSystemLibrary::SphereTraceMulti(
223 this, TraceStart, TraceEnd,
226 SphereHits, true, FLinearColor::Red, FLinearColor::Yellow, 2.0f);
228 {
229 if(HitResult.Component != nullptr)
230 {
231 if(HitResult.Component->IsSimulatingPhysics())
232 {
235 HitResult.Component->AddImpulseAtLocation(ClampedVector, HitResult.Location, HitResult.BoneName);
236 }
237 }
240 {
242 }
243 TArray<AActor*> ActorsPushed;
244 if(bHit)
245 {
246 for(FHitResult& SphereHit : SphereHits)
247 {
248 if(SphereHit.Component != nullptr)
249 {
250 UPrimitiveComponent* PrimitiveComponent = Cast<UPrimitiveComponent>(SphereHit.Component);
251 if(PrimitiveComponent != nullptr)
252 {
253 if(ActorsPushed.Contains(SphereHit.GetActor())){continue;}
254 ERadialImpulseFalloff ImpulseFalloff = ERadialImpulseFalloff::RIF_Constant;
256 {
257 ImpulseFalloff = ERadialImpulseFalloff::RIF_Linear;
258 }
259 ACharacter* CharacterHit = Cast<ACharacter>(SphereHit.GetActor());
260 if(CharacterHit != nullptr)
261 {
262 const float ExplosionDistance = UKismetMathLibrary::Vector_Distance(HitResult.ImpactPoint,CharacterHit->GetActorLocation());
264 FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(HitResult.ImpactPoint, SphereHit.GetActor()->GetActorLocation());
266 CharacterHit->LaunchCharacter(LaunchVelocity, true, true);
268 }
269 else
270 {
272 }
273 ActorsPushed.AddUnique(SphereHit.GetActor());
274 }
275 }
276 }
277 }
278 }
281 {
282 UGameplayStatics::ApplyRadialDamageWithFalloff(
this,
DefaultDamage, 1.0f, HitResult.ImpactPoint,
ProjectileStats.
DamageInnerRadius,
ProjectileStats.
DamageOuterRadius,
ProjectileStats.
DamageFalloff,
ProjectileStats.
DamageType, ActorsToIgnore,
this,
InstigatorController);
283 }
285 {
288 }
290 {
292 }
294 {
297 }
299 {
301 }
302}
FTimerHandle ProjectileFTimerHandle
Definition ProjectileBase.h:86
bool bDebuggingMode
Definition ProjectileBase.h:22
void RagdollActor(AActor *Actor) const
Definition ProjectileBase.cpp:149
virtual void ProjectileDestroy()
Definition ProjectileBase.cpp:304
void SpawnImpactSound(const FVector &Location) const
Definition ProjectileBase.cpp:143
void AttachToHitActor(AActor *Actor, const FName &BoneName)
Definition ProjectileBase.cpp:159
AController * InstigatorController
Definition ProjectileBase.h:67
void SpawnImpactEffects(const FVector &Location) const
Definition ProjectileBase.cpp:137
TArray< AActor * > DamageActorsToIgnore
Definition ProjectileBase.h:65
UAudioComponent * ProjectileSound
Definition ProjectileBase.h:57
float DefaultDamage
Definition ProjectileBase.h:82
virtual void DelayTrigger()
Definition ProjectileBase.cpp:52
FTimerHandle DelayTriggerTimerHandle
Definition ProjectileBase.h:87
static EDrawDebugTrace::Type GetDrawDebugType(const bool bDebuggingMode)
Definition BaseHelpersBPLib.cpp:910
bool bImpulseFalloffLinear
Definition WeaponStructs.h:314
float CharacterExplosionClampMinOutput
Definition WeaponStructs.h:324
TSubclassOf< UDamageType > DamageType
Definition WeaponStructs.h:298
bool bDealsDamage
Definition WeaponStructs.h:296
float ImpulseMultiplier
Definition WeaponStructs.h:316
float CharacterExplosionClampMax
Definition WeaponStructs.h:320
float TriggerDelay
Definition WeaponStructs.h:342
bool bSticky
Definition WeaponStructs.h:363
float CharacterExplosionClampMaxOutput
Definition WeaponStructs.h:322
float RadialForceStrength
Definition WeaponStructs.h:312
bool bDealsImpulse
Definition WeaponStructs.h:310
float DamageFalloff
Definition WeaponStructs.h:307
bool bHideMeshOnHit
Definition WeaponStructs.h:336
bool bDestroyAfterHit
Definition WeaponStructs.h:366
float ImpulseMax
Definition WeaponStructs.h:318
float DestroyDelay
Definition WeaponStructs.h:368
float DamageOuterRadius
Definition WeaponStructs.h:304
float DamageInnerRadius
Definition WeaponStructs.h:301
bool bIgnoreOwner
Definition WeaponStructs.h:334