1
0
KF2-Dev-Scripts/KFGame/Classes/KFAIController_ZedBoss.uc
2020-12-13 18:01:13 +03:00

134 lines
3.7 KiB
Ucode

//=============================================================================
// KFAIController_ZedBoss
//=============================================================================
// Base Zed boss AIController
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
//
class KFAIController_ZedBoss extends KFAIController_Monster
native(AI);
/*********************************************************************************************
* Battle phases
**********************************************************************************************/
/** TRUE if we've already summoned minions this battle phase */
var bool bSummonedThisPhase;
/** NPC has lost sight of current enemy */
event EnemyNotVisible()
{
local KFPawn_Human HumanEnemy;
// EnemyNotVisible can be triggered rapidly due to minor obstructions like streetlights,
// so try to account for that by only having the player say something after a period of
// visibility
if( `TimeSince(EnemyVisibilityTime) > 1.f )
{
HumanEnemy = KFPawn_Human(Enemy);
if( HumanEnemy != none )
{
`DialogManager.PlayLoseSightOfBossDialog( MyKFPawn, HumanEnemy );
`DialogManager.PlayBossLoseSightOfDialog( MyKFPawn, HumanEnemy );
}
}
super.EnemyNotVisible();
}
event bool SetEnemy( Pawn NewEnemy )
{
if( NewEnemy != Enemy )
{
`DialogManager.PlayBossChallengeDialog( MyKFPawn );
}
return super.SetEnemy( NewEnemy );
}
/** Bosses should not be processed in frustration mode */
function UpdateSprintFrustration( optional byte bForceFrustrationState=255 )
{
}
function PlayDamagePlayerDialog( class<DamageType> DmgType );
/** Stub debug command to advance battle phase */
function DebugNextPhase();
/** Stop summoning zeds */
function Timer_StopSummoningZeds()
{
MyKFGameInfo.SpawnManager.StopSummoningBossMinions();
}
function PawnDied(Pawn InPawn)
{
super.PawnDied(InPawn);
Timer_StopSummoningZeds();
}
/*********************************************************************************************
* Victory
********************************************************************************************* */
function EnterZedVictoryState()
{
ClearMovementInfo();
if( CommandList != None )
{
AbortCommand( CommandList );
}
DisableMeleeRangeEventProbing();
ChangeEnemy(none);
MyKFPawn.SetSprinting( false );
// Keep boss looking at the camera
LockPawnRotationTo(MyKFPawn.Rotation);
MyKFPawn.SetRemoteViewPitch(0);
// Force end any special moves
if( MyKFPawn.IsDoingSpecialMove() )
{
MyKFPawn.EndSpecialMove();
}
GotoState( 'ZedVictory', 'Begin');
}
state ZedVictory
{
Begin:
Sleep(0.1f);
if (MyKFPawn != none)
{
class'AICommand_BossTheatrics'.static.DoTheatrics(self, THEATRIC_Victory, -1);
}
}
/*********************************************************************************************
* Possess
********************************************************************************************* */
event Possess(Pawn inPawn, bool bVehicleTransition)
{
local KFGameReplicationInfo KFGRI;
super.Possess(inPawn, bVehicleTransition);
// Play entrance animation
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
if (KFGRI != none && KFGRI.IsBossWave() && KFGRI.ShouldSetBossCamOnBossSpawn())
{
class'AICommand_BossTheatrics'.static.DoTheatrics(self, THEATRIC_Entrance);
}
}
DefaultProperties
{
FrustrationThreshold=0
bCanTeleportCloser=false
LowIntensityAttackCooldown=0
}