1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFWeapAttach_Railgun.uc

112 lines
3.3 KiB
Ucode
Raw Permalink Normal View History

2020-12-13 15:01:13 +00:00
//=============================================================================
// KFWeapAttach_Railgun
//=============================================================================
// Custom weapon attachment for the third person Railgun
//=============================================================================
// Killing Floor 2
// Copyright (C) 2016 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class KFWeapAttach_Railgun extends KFWeaponAttachment;
/*********************************************************************************************
* @name Ambient sound
********************************************************************************************* */
/** Pilot light sound play event */
var AkEvent AmbientSoundPlayEvent;
/** Pilot light sound stop event */
var AkEvent AmbientSoundStopEvent;
/**
* Starts playing looping ambient sound
*/
simulated function StartAmbientSound()
{
if( Instigator != none && !Instigator.IsFirstPerson() )
{
if ( AmbientSoundPlayEvent != None )
{
Instigator.PlaySoundBase(AmbientSoundPlayEvent, true, true, true,, true);
}
}
}
/**
* Stops playing looping ambient sound
*/
simulated function StopAmbientSound()
{
if ( AmbientSoundStopEvent != None )
{
Instigator.PlaySoundBase(AmbientSoundStopEvent, true, true, true,, true);
}
}
/** Attach weapon to owner's skeletal mesh */
simulated function AttachTo(KFPawn P)
{
Super.AttachTo(P);
StartAmbientSound();
}
/** Detach weapon from owner's skeletal mesh */
simulated function DetachFrom(KFPawn P)
{
StopAmbientSound();
Super.DetachFrom(P);
}
simulated function Destroyed()
{
StopAmbientSound();
super.Destroyed();
}
/** Spawn tracer effects for this weapon */
simulated function SpawnTracer(vector EffectLocation, vector HitLocation)
{
local ParticleSystemComponent E;
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 )
{
E = WorldInfo.MyEmitterPool.SpawnEmitter( TracerInfo.TracerTemplate, EffectLocation, rotator(Dir) );
E.SetFloatParameter( 'Tracer_Lifetime', TracerDuration );
// Add the railgun tracer shot end parameter
E.SetVectorParameter( 'Shotend', HitLocation );
}
}
}
}
defaultproperties
{
AmbientSoundPlayEvent=AkEvent'WW_WEP_SA_Railgun.Play_Railgun_Loop'
AmbientSoundStopEvent=AkEvent'WW_WEP_SA_Railgun.Stop_Railgun_Loop'
}