//============================================================================= // KFWeapAttach_HRG_Dragonbreath //============================================================================= // //============================================================================= // Killing Floor 2 // Copyright (C) 2022 Tripwire Interactive LLC //============================================================================= class KFWeapAttach_HRG_Dragonbreath extends KFWeaponAttachment; `define HRGDRAGONBREATH_MIC_BARREL_INDEX 0 var transient float BarrelHeatPerProjectile; var transient float MaxBarrelHeat; var transient float BarrelCooldownRate; var transient float CurrentBarrelHeat; var transient float LastBarrelHeat; var transient int NumPelletsDefault; var transient int NumPelletsAlt; simulated event PreBeginPlay() { Super.PreBeginPlay(); BarrelHeatPerProjectile = class'KFWeap_HRG_Dragonbreath'.default.BarrelHeatPerProjectile; MaxBarrelHeat = class'KFWeap_HRG_Dragonbreath'.default.MaxBarrelHeat; BarrelCooldownRate = class'KFWeap_HRG_Dragonbreath'.default.BarrelCooldownRate; NumPelletsDefault = class'KFWeap_HRG_Dragonbreath'.default.NumPellets[0]; NumPelletsAlt = class'KFWeap_HRG_Dragonbreath'.default.NumPellets[1]; } simulated event PostBeginPlay() { Super.PostBeginPlay(); // Force start with "Glow_Intensity" of 0.0f LastBarrelHeat = MaxBarrelHeat; ChangeBarrelMaterial(); } simulated function ChangeBarrelMaterial() { if( CurrentBarrelHeat != LastBarrelHeat ) { if ( WeaponMIC == None && WeapMesh != None ) { WeaponMIC = WeapMesh.CreateAndSetMaterialInstanceConstant(`HRGDRAGONBREATH_MIC_BARREL_INDEX); } WeaponMIC.SetScalarParameterValue('Barrel_intensity', CurrentBarrelHeat); } } simulated function Tick(float Delta) { Super.Tick(Delta); CurrentBarrelHeat = fmax(CurrentBarrelHeat - BarrelCooldownRate * Delta, 0.0f); ChangeBarrelMaterial(); } /** Override to update emissive in weapon's barrel after firing */ simulated function PlayWeaponFireAnim() { local float BarrelHeatPerShot; local KFPawn OwnerPawn; Super.PlayWeaponFireAnim(); OwnerPawn = KFPawn(Owner); BarrelHeatPerShot = BarrelHeatPerProjectile * (OwnerPawn.FiringMode == 0 ? NumPelletsDefault : NumPelletsAlt); CurrentBarrelHeat = fmin(CurrentBarrelHeat + BarrelHeatPerShot, MaxBarrelHeat); } defaultproperties { CurrentBarrelHeat=0.0f LastBarrelHeat=0.0f NumPelletsDefault=0 NumPelletsAlt=0 }