//============================================================================= // KFSM_PlayerZedBlockBase //============================================================================= // Player-controlled zed block special move base class //============================================================================= // Killing Floor 2 // Copyright (C) 2016 Tripwire Interactive LLC //============================================================================= class KFSM_PlayerZedBlockBase extends KFSM_PlaySingleAnim abstract; /** Minimum duration the move has to run */ var float MinimumBlockTime; function SpecialMoveStarted( bool bForced, Name PrevMove ) { super.SpecialMoveStarted( bForced, PrevMove ); // Set our block flag to true KFPawn_Monster(KFPOwner).bIsBlocking = true; // Disallow sprinting if( KFPOwner.bIsSprinting ) { KFPOwner.SetSprinting( false ); } // Set a timer to force block to stay active for a minimum amount of time if( KFPOwner.IsLocallyControlled() ) { KFPOwner.SetTimer( MinimumBlockTime, false, nameOf(Timer_CheckIfBlockReleased), self ); } } function SpecialMoveEnded( Name PrevMove, Name NextMove ) { super.SpecialMoveEnded( PrevMove, NextMove ); // Stop looping anim, clear blocking flag if( KFPOwner != none ) { KFPOwner.ClearTimer( nameOf(Timer_CheckIfBlockReleased), self ); KFPOwner.StopBodyAnim( AnimStance, BlendOutTime ); KFPawn_Monster(KFPOwner).bIsBlocking = false; } } /** End the move if the player released the block button */ function Timer_CheckIfBlockReleased() { if( bPendingStopFire ) { KFPOwner.EndSpecialMove(); if( KFPOwner.Role < ROLE_Authority && KFPOwner.IsLocallyControlled() ) { KFPOwner.ServerDoSpecialMove( SM_None, true ); } } } /* Called on some player-controlled moves when a firemode input has been pressed */ function SpecialMoveButtonRetriggered() { bPendingStopFire = false; } /** Called on some player-controlled moves when a firemode input has been released */ function SpecialMoveButtonReleased() { bPendingStopFire = true; // Wait out the minimum block duration if( KFPOwner.IsTimerActive( nameOf(Timer_CheckIfBlockReleased), self) ) { return; } KFPOwner.EndSpecialMove(); if( KFPOwner.Role < ROLE_Authority && KFPOwner.IsLocallyControlled() ) { KFPOwner.ServerDoSpecialMove( SM_None, true ); } } defaultproperties { // --------------------------------------------- // SpecialMove Handle=KFSM_PlayerBlockBase bCanBeInterrupted=false MinimumBlockTime=0.4f // --------------------------------------------- // Animations AnimStance=EAS_UpperBody bUseRootMotion=false bLoopAnim=true BlendInTime=0.2f }