1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFProj_GroundIce.uc
2020-12-13 18:01:13 +03:00

155 lines
4.1 KiB
Ucode

//=============================================================================
// KFProj_GroundIce
//=============================================================================
// Projectile class for ground ice from freeze thrower, etc
//=============================================================================
// Killing Floor 2
// Copyright (C) 2016 Tripwire Interactive LLC
//=============================================================================
class KFProj_GroundIce extends KFProjectile;
var() float DamageInterval;
/** Warns AI that this projectile has been fired */
function WarnAI( vector Direction )
{
local KFPawn_Monster KFPM;
local vector DangerPoint;
DangerPoint = Location;
foreach WorldInfo.AllPawns( class'KFPawn_Monster', KFPM )
{
if( KFPM.MyKFAIC != none && KFPM.IsAliveAndWell() )
{
// Distance check
if( VSizeSQ(KFPM.Location - Location) > 90000.f )
{
continue;
}
// Visibility check
if( `FastTracePhysX(Location, KFPM.Location) )
{
// Scale danger point up to pawn's Z location
DangerPoint.Z = KFPM.Location.Z;
// Tell the zed to evade away from the DangerPoint
KFPM.MyKFAIC.ReceiveLocationalWarning( DangerPoint, Location, self );
}
}
}
}
simulated event ReplicatedEvent( name VarName )
{
if( VarName == nameof( bHasExploded ) )
{
return; // This would trigger another explosion, we don't need to do it for the groundfire.
}
else
{
super.ReplicatedEvent( VarName );
}
}
/**
* Set the initial velocity and cook time
*/
simulated function PostBeginPlay()
{
local KFPlayerReplicationInfo InstigatorPRI;
// Checks if we want to swap the explosion effects
if( AltExploEffects != none )
{
InstigatorPRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo);
if( InstigatorPRI != none )
{
bAltExploEffects = InstigatorPRI.bSplashActive;
}
}
else
{
bAltExploEffects = false;
}
TriggerExplosion( Location, vector(Rotation), None );
Super.PostBeginPlay();
}
/*********************************************************************************************
* Collision
********************************************************************************************* */
simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal )
{
//Super(Projectile).Touch(Other, OtherComp, HitLocation, HitNormal);
}
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
{
local KFExplosionActorLingering KFE_GroundFire;
KFE_GroundFire = KFExplosionActorLingering( GEA );
if( KFE_GroundFire != none )
{
KFE_GroundFire.Interval = DamageInterval;
}
}
/**
* Force the fire not to burn the instigator, since setting it in the default props is not working for some reason - Ramm
*/
simulated protected function PrepareExplosionTemplate()
{
ExplosionTemplate.bIgnoreInstigator=true;
// Swap the ExplosionTemplate's effect if necessary
if( bAltExploEffects )
{
ExplosionTemplate.ExplosionEffects = AltExploEffects;
}
}
defaultproperties
{
PostExplosionLifetime=2.5
bStopAmbientSoundOnExplode=false
bAutoStartAmbientSound=true
bAmbientSoundZedTimeOnly=false
ExplosionActorClass=class'KFExplosion_GroundIce'
AltExploEffects=none//KFImpactEffectInfo'WEP_Flamethrower_ARCH.GroundFire_Splash_Impacts'
// explosion
Begin Object Class=KFGameExplosion Name=ExploTemplate0
Damage=5
DamageRadius=180
DamageFalloffExponent=1.f
DamageDelay=0.f
MyDamageType=class'KFDT_Freeze_Ground'
// Don't freeze the guy with the freezethrower
bIgnoreInstigator=true
// Damage Effects
KnockDownStrength=0
KnockDownRadius=0
FractureMeshRadius=0
FracturePartVel=0
ExplosionEffects=KFImpactEffectInfo'WEP_CryoGun_ARCH.GroundCryo_Impacts'
ExplosionSound=none
MomentumTransferScale=0
bAllowPerMaterialFX=true
// Camera Shake
CamShake=none
End Object
ExplosionTemplate=ExploTemplate0
DamageInterval=0.25f
RemoteRole=ROLE_None
}