//============================================================================= // AICommand_Base_Fleshpound //============================================================================= // Base AI Command for the Fleshpound. //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC //============================================================================= class AICommand_Base_Fleshpound extends AICommand_Base_Zed within KFAIController_ZedFleshpound native(AI); /********************************************************************************************* * Initialization **********************************************************************************************/ function Pushed() { EnableSeePlayer(); Super.Pushed(); } function Popped() { Super.Popped(); } /** Notification from controller that enemy has become visible */ function bool NotifyPlayerBecameVisible( Pawn VisiblePlayer ) { local float DistSqToEnemy, DistSqToVisiblePlayer; local int NumZedsTargetingEnemy, NumZedsTargetingVP; /** Only allowed to consider changing enemy every MinTimeBetweenEnemyChanges seconds */ if( `TimeSince(LastSetEnemyTime) > MinTimeBetweenEnemyChanges ) { /** If VisiblePlayer is alive and isn't my enemy (who's still alive) and isn't currently visible */ if( VisiblePlayer != Enemy && Enemy != none && Enemy.IsAliveAndWell() && VisiblePlayer.IsAliveAndWell() && !bEnemyIsVisible ) { DistSqToEnemy = VSizeSq( Enemy.Location - Pawn.Location ); DistSqToVisiblePlayer = VSizeSq( VisiblePlayer.Location - Pawn.Location ); /** If VisiblePlayer is closer to me than my current enemy */ if( DistSqToVisiblePlayer < DistSqToEnemy ) { NumZedsTargetingEnemy = NumberOfZedsTargetingPawn( Enemy,, 700.f ); NumZedsTargetingVP = NumberOfZedsTargetingPawn( VisiblePlayer,, 700.f ); /** Check if more Zeds are targeting my enemy than VisiblePlayer (and those Zeds are within 700 units of their target) */ if( NumZedsTargetingEnemy > NumZedsTargetingVP ) { /** My enemy seems preoccupied with other Zeds, so I'm changing my enemy to be VisiblePlayer instead */ SetEnemy( VisiblePlayer ); return true; } } } } return false; } /********************************************************************************************* * Combat **********************************************************************************************/ /** Notification that I've changed my enemy (which has already been to to Enemy) */ function NotifyEnemyChanged( optional Pawn OldEnemy ) { if( CachedChildCommand != None ) { CachedChildCommand.NotifyEnemyChanged( OldEnemy ); } if( LineOfSightTo(Enemy) ) { bSawEnemy = true; } else { bSawEnemy = false; } } function bool NotifyCombatBehaviorChange( name BehaviorName, bool bEnabled ) { if( BehaviorName == 'Enraged' && bEnabled ) { bReadyToBecomeEnraged = true; MyKFPawn.SetEnraged( true ); if( (LastTauntTime == 0 || `TimeSince(LastTauntTime > 260.f)) ) { `AILog( "Doing rage taunt at "$Enemy, 'Charging' ); AbortMovementCommands(); AbortMovementPlugIns(); DoRageTauntAt( KFPawn(Enemy) ); LastTauntTime = WorldInfo.TimeSeconds; } return true; } else if( BehaviorName == 'Enraged' && !bEnabled ) { bReadyToBecomeEnraged = false; MyKFPawn.SetEnraged( false ); } } DefaultProperties { bAllowedToAttack=true }