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

117 lines
2.6 KiB
Ucode

//=============================================================================
// AICommand_BossTheatrics
//=============================================================================
// Handles AI use of the theatrical entrances and victory animations for bosses
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
class AICommand_BossTheatrics extends AICommand_SpecialMove
within KFAIController;
var byte TheatricType;
var int TheatricDuration;
/** Simple constructor that pushes a new instance of the command for the AI */
static function bool DoTheatrics( KFAIController AI, optional byte InTheatricType, optional int InTheatricDuration )
{
local AICommand_BossTheatrics Cmd;
if( AI != None )
{
Cmd = new(AI) default.class;
if( Cmd != None )
{
Cmd.TheatricType = InTheatricType;
Cmd.TheatricDuration = InTheatricDuration;
AI.PushCommand( Cmd );
return true;
}
}
return false;
}
function Pushed()
{
Super.Pushed();
StopAllLatentMovement();
AIZeroMovementVariables();
`AILog( "Beginning boss theatrics"$Enemy, 'Command_BossTheatrics' );
AIActionStatus = "Starting BossTheatrics AICommand";
if( Focus != None )
{
SetDesiredRotation(rotator(Focus.Location - Pawn.Location));
}
if( bUsePluginsForMovement )
{
MovementPlugin.DisablePlugin();
}
DisableMeleeRangeEventProbing();
}
function Popped()
{
AIActionStatus = "Finished boss theatrics AICommand";
EnableMeleeRangeEventProbing();
if( bUsePluginsForMovement )
{
MovementPlugin.EnablePlugin();
}
Super.Popped();
}
state Command_SpecialMove
{
function float GetPreSpecialMoveSleepTime()
{
return FRand();
}
function bool ExecuteSpecialMove()
{
local byte SpecialMoveFlags;
SpecialMove = GetSpecialMove();
`AILog( GetFuncName()@SpecialMove, 'Command_BossTheatrics' );
if( SpecialMove != SM_None && MyKFPawn.CanDoSpecialMove(SpecialMove) )
{
SpecialMoveFlags = class'KFSM_Zed_Boss_Theatrics'.static.PackSMFlags(MyKFPawn, TheatricType);
if( SpecialMoveFlags != 255 )
{
MyKFPawn.DoSpecialMove(SpecialMove, true, GetInteractionPawn(), SpecialMoveFlags);
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
function ESpecialMove GetSpecialMove()
{
return SM_BossTheatrics;
}
}
DefaultProperties
{
bShouldCheckSpecialMove=true
bAllowedToAttack=false
TimeOutDelaySeconds=25.f
}