//============================================================================= // KFWeapAttach_M99 //============================================================================= // //============================================================================= // Killing Floor 2 // Copyright (C) 2018 Tripwire Interactive LLC //============================================================================= class KFWeapAttach_M99 extends KFWeaponAttachment; /** Spawn tracer effects for this weapon */ simulated function SpawnTracer(vector EffectLocation, vector HitLocation) { local ParticleSystemComponent PSC; local vector Dir; local float DistSQ; local float TracerDuration; local KFTracerInfo TracerInfo; if (Instigator == None || Instigator.FiringMode >= TracerInfos.Length) { return; } TracerInfo = TracerInfos[Instigator.FiringMode]; if (((`NotInZedTime(self) && TracerInfo.bDoTracerDuringNormalTime) || (`IsInZedTime(self) && TracerInfo.bDoTracerDuringZedTime)) && TracerInfo.TracerTemplate != none ) { Dir = HitLocation - EffectLocation; DistSQ = VSizeSq(Dir); if (DistSQ > TracerInfo.MinTracerEffectDistanceSquared) { // Lifetime scales based on the distance from the impact point. Subtract a frame so it doesn't clip. TracerDuration = fMin((Sqrt(DistSQ) - 100.f) / TracerInfo.TracerVelocity, 1.f); if (TracerDuration > 0.f) { PSC = WorldInfo.MyEmitterPool.SpawnEmitter(TracerInfo.TracerTemplate, EffectLocation, rotator(Dir)); PSC.SetFloatParameter('Tracer_Lifetime', TracerDuration); PSC.SetVectorParameter('Shotend', HitLocation); } } } } defaultproperties { }