//============================================================================= // KFProj_MolotovFlare //============================================================================= // Flare that is dropped by molotov upon exploding if instigator has medic // "Flaretov" ability set. It's basically just a light, and it's not actually a projectile. //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC // - Jeff Robinson //============================================================================= class KFProj_MolotovFlare extends Actor; // NOTE: not actually a projectile /** This is the effect that is played while in flight */ var ParticleSystemComponent ProjEffects; var(Projectile) ParticleSystem ProjFlightTemplate; /** Point light and related params */ var PointLightComponent PointLight; var float LightFadeStartTime; var float LightFadeTime; var transient float LightFadePerSecond; /** Ambient sound to play */ var AkEvent FuseEvent; simulated event PostBeginPlay() { super.PostBeginPlay(); if( WorldInfo.NetMode != NM_DedicatedServer ) { if( ProjFlightTemplate != None ) { ProjEffects = WorldInfo.MyEmitterPool.SpawnEmitterCustomLifetime(ProjFlightTemplate); if( ProjEffects != none ) { ProjEffects.SetAbsolute(false, false, false); ProjEffects.SetLODLevel(WorldInfo.bDropDetail ? 1 : 0); ProjEffects.bUpdateComponentInTick = true; ProjEffects.SetTranslation( vect(0, 0, 2) ); AttachComponent(ProjEffects); } } LightFadePerSecond = PointLight.Brightness / LightFadeTime; PlaySoundBase( FuseEvent, true,, true ); } } simulated event Tick( float DeltaTime ) { local float NewBrightness; super.Tick( DeltaTime ); if( WorldInfo.NetMode != NM_DedicatedServer ) { return; } // gradually fade light if( LifeSpan < default.LifeSpan - LightFadeStartTime ) { if( PointLight.Brightness > 0 ) { NewBrightness = FMax( 0, PointLight.Brightness - (LightFadePerSecond * DeltaTime) ); PointLight.SetLightProperties( NewBrightness ); } } } defaultproperties { Physics=PHYS_Falling bCollideComplex=TRUE // Ignore simple collision on StaticMeshes, and collide per poly TickGroup=TG_PreAsyncWork bAlwaysRelevant=true bSkipActorPropertyReplication=true Begin Object Class=CylinderComponent Name=CollisionCylinder CollisionRadius=0 CollisionHeight=0 AlwaysLoadOnClient=True AlwaysLoadOnServer=True End Object CollisionComponent=CollisionCylinder Components.Add(CollisionCylinder) bCollideActors=true bCollideWorld=true bNetTemporary=true bReplicateInstigator=true NetPriority=+00002.500000 RemoteRole=ROLE_SimulatedProxy LifeSpan=31 Begin Object Class=PointLightComponent Name=PointLightComponent0 LightColor=(R=245,G=190,B=140,A=255) Brightness=3.f Radius=800.f FalloffExponent=10.f CastShadows=False CastStaticShadows=FALSE CastDynamicShadows=FALSE bCastPerObjectShadows=false bEnabled=TRUE LightingChannels=(Indoor=TRUE,Outdoor=TRUE,bInitialized=TRUE) End Object PointLight=PointLightComponent0 Components.Add(PointLightComponent0) LightFadeStartTime=27.5 LightFadeTime=2.75 ProjFlightTemplate=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Flare_fire_01' FuseEvent=AkEvent'WW_WEP_EXP_Dynamite.Play_WEP_EXP_Dynamite_Fuse_LP' }