50 lines
1.6 KiB
Ucode
50 lines
1.6 KiB
Ucode
|
//=============================================================================
|
||
|
// 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
|
||
|
{
|
||
|
|
||
|
}
|