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

145 lines
3.1 KiB
Ucode

//=============================================================================
// KFProj_Bolt_CompoundBowSharp
//=============================================================================
// Bullet class for the Compound Bow Sharp Arrows
//=============================================================================
// Killing Floor 2
// Copyright (C) 2019 Tripwire Interactive LLC
// - Tulio Beloqui (Saber Interactive)
//=============================================================================
class KFProj_Bolt_CompoundBowSharp extends KFProj_RicochetStickBullet
hidedropdown;
var repnotify int ChargeLevel;
replication
{
if (bNetInitial)
ChargeLevel;
}
simulated event ReplicatedEvent(name VarName)
{
if (VarName == nameof(ChargeLevel))
{
SpawnFlightEffects();
}
Super.ReplicatedEvent(VarName);
}
simulated function PostBeginPlay ()
{
local KFWeap_Bow_CompoundBow CompoundBow;
if (Role == ROLE_Authority)
{
CompoundBow = KFWeap_Bow_CompoundBow(Owner);
if (CompoundBow != none)
{
ChargeLevel = CompoundBow.GetChargeLevel();
}
}
Super.PostBeginPlay ();
}
simulated function float GetChargeLevelTrail ()
{
if (ChargeLevel >= 2)
{
if (WorldInfo.NetMode == NM_Client)
{
return 1.0;
}
return 0.73;
}
if (ChargeLevel == 1)
{
if (WorldInfo.NetMode == NM_Client)
{
return 0.825;
}
return 0.365;
}
// For level 0, no charge on the arrow:
if (WorldInfo.NetMode == NM_Client)
{
return 0.66;
}
return 0;
}
simulated function SpawnFlightEffects ()
{
if (ChargeLevel < 0)
{
// we need ChargeLevel to be replicated to Spawn the projectile!
return;
}
super.SpawnFlightEffects ();
if (ProjEffects != none)
{
ProjEffects.SetVectorParameter('ChargeLevelTrail', GetChargeLevelTrail() * vect(1.f, 1.f, 1.f));
}
}
// Last location needs to be correct, even on first tick.
simulated function SyncOriginalLocation()
{
LastLocation = OriginalLocation;
Super.SyncOriginalLocation();
}
defaultproperties
{
bWarnAIWhenFired=true
// Speed is defined by the charge level of the bow:
MaxSpeed=15000.0
Speed=15000.0
TerminalVelocity=15000.0
DamageRadius=0
ChargeLevel=-1
BouncesLeft=0
ProjFlightTemplate=ParticleSystem'WEP_CompoundBow_EMIT.FX_Compound_Bow_Sharp_Projectile'
LifeSpan=10
LifeSpanAfterStick=180
bBlockedByInstigator=false
bCollideActors=true
bCollideComplex=true
bNoEncroachCheck=true
bNoReplicationToInstigator=false
bUseClientSideHitDetection=true
bUpdateSimulatedPosition=false
bRotationFollowsVelocity=false
bNetTemporary=false
bSyncToOriginalLocation=true
ImpactEffects=KFImpactEffectInfo'FX_Impacts_ARCH.Crossbow_impact'
AmbientSoundPlayEvent=AkEvent'WW_WEP_SA_Crossbow.Play_Bolt_Fly_By'
AmbientSoundStopEvent=AkEvent'WW_WEP_SA_Crossbow.Stop_Bolt_Fly_By'
WeaponClassName=KFWeap_Bow_CompoundBow
ProjPickupTemplate=ParticleSystem'WEP_Crossbow_EMIT.FX_Crossbow_Projectile_Pickup'
AmmoPickupSound=AkEvent'WW_WEP_SA_Crossbow.Play_Crossbow_Bolt_Pickup'
TouchTimeThreshhold=0.15
}