//============================================================================= // KFWeapAttach_HRG_Energy //============================================================================= // //============================================================================= // Killing Floor 2 // Copyright (C) 2021 Tripwire Interactive LLC //============================================================================= class KFWeapAttach_HRG_Energy extends KFWeaponAttachment; `define HRG_ENERGY_MIC_LED_INDEX_1 0 `define HRG_ENERGY_MIC_SCREEN_INDEX 1 `define HRG_ENERGY_MIC_LED_INDEX_2 2 var MaterialInstanceConstant WeaponMIC_2; var MaterialInstanceConstant WeaponMICScreen; simulated function SetWeaponAltFireMode (bool bUsingAltFireMode) { super.SetWeaponAltFireMode(bUsingAltFireMode); UpdateMaterial(bUsingAltFireMode ? 1 : 0); } simulated function UpdateMaterial(byte FireMode) { local LinearColor MatColor; if (WeapMesh == none) { return; } MatColor = FireMode == 0 ? class'KFWeap_HRG_Energy'.default.DefaultFireMaterialColor : class'KFWeap_HRG_Energy'.default.AltFireMaterialColor; if ( WeaponMIC == none ) { WeaponMIC = WeapMesh.CreateAndSetMaterialInstanceConstant(`HRG_ENERGY_MIC_LED_INDEX_1); } if ( WeaponMIC_2 == none ) { WeaponMIC_2 = WeapMesh.CreateAndSetMaterialInstanceConstant(`HRG_ENERGY_MIC_LED_INDEX_2); } if (WeaponMICScreen == none) { WeaponMICScreen = WeapMesh.CreateAndSetMaterialInstanceConstant(`HRG_ENERGY_MIC_SCREEN_INDEX); } WeaponMIC.SetVectorParameterValue('Vector_GlowColor', MatColor); WeaponMIC_2.SetVectorParameterValue('Vector_GlowColor', MatColor); WeaponMICScreen.SetVectorParameterValue('Color_override', MatColor); } /** Plays fire animation on weapon mesh */ simulated function PlayWeaponFireAnim() { local float Duration, AnimRateModifier; local name Animation; local KFPawn_Human KFPH; KFPH = KFPawn_Human(Instigator); AnimRateModifier = (KFPH != none && KFPH.bUsingAltFireMode) ? class'KFWeap_HRG_Energy'.default.SecondaryFireAnimRateModifier : 1.0f; if ( Instigator.bIsWalking ) { Duration = WeapMesh.GetAnimLength( WeaponIronFireAnim ); Animation = WeaponIronFireAnim; } else { Duration = WeapMesh.GetAnimLength( WeaponFireAnim ); Animation = WeaponFireAnim; WeapMesh.PlayAnim( WeaponFireAnim, Duration / ThirdPersonAnimRate,, true ); } WeapMesh.PlayAnim( Animation, Duration / ThirdPersonAnimRate * AnimRateModifier,, true ); } /** Play a 3rd person reload animation */ simulated function PlayReloadMagazineAnim(EWeaponState NewWeaponState, KFPawn P) { local name AnimName; switch (NewWeaponState) { case WEP_Reload: case WEP_ReloadEmpty: AnimName = (!P.bIsCrouched) ? ReloadHalfAnim : CH_ReloadHalfAnim; break; case WEP_Reload_Elite: case WEP_ReloadEmpty_Elite: AnimName = (!P.bIsCrouched) ? ReloadHalfEliteAnim : CH_ReloadHalfEliteAnim; break; } PlayCharacterMeshAnim(P, AnimName, true); } defaultproperties { }