103 lines
3.0 KiB
Ucode
103 lines
3.0 KiB
Ucode
|
//=============================================================================
|
||
|
// KFWeapAttach_HRG_BarrierRifle
|
||
|
//=============================================================================
|
||
|
//
|
||
|
//=============================================================================
|
||
|
// Killing Floor 2
|
||
|
// Copyright (C) 2021 Tripwire Interactive LLC
|
||
|
//=============================================================================
|
||
|
|
||
|
class KFWeapAttach_HRG_BarrierRifle extends KFWeaponAttachment;
|
||
|
|
||
|
`define BARRIERRIFLE_MIC_SHIELD_INDEX 0
|
||
|
|
||
|
/** Indicates wheter we are activating/deactivating the shield fx */
|
||
|
var protected transient bool bActivatingShield;
|
||
|
var protected transient float FXDelta;
|
||
|
var protected transient float ShieldFXDuration;
|
||
|
var protected transient float OverlayDelta;
|
||
|
var protected transient float OverlayMax;
|
||
|
var protected transient float OverlayMin;
|
||
|
var protected transient float ShieldBlockVFXDuration;
|
||
|
|
||
|
simulated event PreBeginPlay()
|
||
|
{
|
||
|
Super.PreBeginPlay();
|
||
|
|
||
|
if ( WorldInfo.NetMode == NM_DedicatedServer )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ShieldFXDuration = class'KFWeap_HRG_BarrierRifle'.default.ShieldFXDuration;
|
||
|
OverlayMax = class'KFWeap_HRG_BarrierRifle'.default.RedOverlayMax;
|
||
|
OverlayMin = class'KFWeap_HRG_BarrierRifle'.default.RedOverlayMin;
|
||
|
ShieldBlockVFXDuration = class'KFWeap_HRG_BarrierRifle'.default.ShieldBlockVFXDuration;
|
||
|
|
||
|
UpdateShieldFXValue(0.0f);
|
||
|
}
|
||
|
|
||
|
simulated function UpdateShieldFXValue(float Value)
|
||
|
{
|
||
|
if ( WeaponMIC == None && WeapMesh != None )
|
||
|
{
|
||
|
WeaponMIC = WeapMesh.CreateAndSetMaterialInstanceConstant(`BARRIERRIFLE_MIC_SHIELD_INDEX);
|
||
|
}
|
||
|
|
||
|
WeaponMIC.SetScalarParameterValue('Opacity', Value);
|
||
|
}
|
||
|
|
||
|
unreliable client function SetShieldActive(bool bActive)
|
||
|
{
|
||
|
bActivatingShield = bActive;
|
||
|
}
|
||
|
|
||
|
/** Special event added for weap attachments. Free for use */
|
||
|
function OnSpecialEvent(int Arg)
|
||
|
{
|
||
|
if (Arg < 2)
|
||
|
{
|
||
|
SetShieldActive(Arg == 1 ? True : False);
|
||
|
}
|
||
|
else if (Arg == 3)
|
||
|
{
|
||
|
UpdateShieldBlockVFX(OverlayMax);
|
||
|
OverlayDelta = OverlayMax;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
simulated function UpdateShieldBlockVFX(float Value)
|
||
|
{
|
||
|
if ( WeaponMIC == None && WeapMesh != None )
|
||
|
{
|
||
|
WeaponMIC = WeapMesh.CreateAndSetMaterialInstanceConstant(`BARRIERRIFLE_MIC_SHIELD_INDEX);
|
||
|
}
|
||
|
WeaponMIC.SetScalarParameterValue('RedOverlay', Value);
|
||
|
}
|
||
|
|
||
|
simulated event Tick(float DeltaTime)
|
||
|
{
|
||
|
// Update Shield visuals
|
||
|
if (bActivatingShield && FXDelta < class'KFWeap_HRG_BarrierRifle'.default.ShieldFXDuration)
|
||
|
{
|
||
|
FXDelta = FMin(FXDelta + DeltaTime, ShieldFXDuration);
|
||
|
UpdateShieldFXValue(FXDelta / ShieldFXDuration);
|
||
|
}
|
||
|
else if (!bActivatingShield && FXDelta > 0.0f)
|
||
|
{
|
||
|
FXDelta = FMax(FXDelta - DeltaTime, 0.0f);
|
||
|
UpdateShieldFXValue(FXDelta / ShieldFXDuration);
|
||
|
}
|
||
|
|
||
|
if (OverlayDelta > 0.0f)
|
||
|
{
|
||
|
OverlayDelta = FMax(OverlayDelta - DeltaTime, OverlayMin);
|
||
|
UpdateShieldBlockVFX(OverlayMax * (OverlayDelta / ShieldBlockVFXDuration));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
OverlayDelta=0.0f
|
||
|
}
|