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

81 lines
2.4 KiB
Ucode

//=============================================================================
// KFSM_InteractionPawnFollower_Base
//=============================================================================
// Base class for Pawn to Pawn Interactions.
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
// Based on GSM_InteractionPawnFollower_Base
// Copyright 1998-2011 Epic Games, Inc. All Rights Reserved.
//=============================================================================
class KFSM_InteractionPawnFollower extends KFSpecialMove
abstract;
/** Pointer to Leader */
var KFPawn Leader;
/** Keep track of special move leader is doing during this interaction. */
var protected ESpecialMove LeaderSpecialMove;
function SpecialMoveStarted(bool bForced, Name PrevMove)
{
Super.SpecialMoveStarted(bForced, PrevMove);
// Keep a simple reference to our Leader.
Leader = KFPOwner.InteractionPawn;
// Clear leader interaction special move
LeaderSpecialMove = SM_None;
}
function OnLeaderLeavingSpecialMove()
{
if( KFPOwner != none && KFPOwner.Role == ROLE_Authority )
{
KFPOwner.EndSpecialMove();
}
}
function SpecialMoveEnded(Name PrevMove, Name NextMove)
{
local KFSM_InteractionPawnLeader LeaderSM;
// If Leader is still around, let him know that follower is leaving his special move
if( Leader != None && Leader.IsDoingSpecialMove(LeaderSpecialMove) )
{
// Let our leader know that we're now ready to be detached from him.
LeaderSM = KFSM_InteractionPawnLeader(Leader.SpecialMoves[LeaderSpecialMove]);
if( LeaderSM != none )
{
LeaderSM.OnFollowerLeavingSpecialMove();
}
}
// Clear reference to our leader.
Leader = None;
LeaderSpecialMove = SM_None;
Super.SpecialMoveEnded(PrevMove, NextMove);
}
/** Messages sent to this special move */
function bool MessageEvent(Name EventName, Object Sender)
{
if( EventName == 'InteractionStarted' )
{
InteractionStarted();
return TRUE;
}
return Super.MessageEvent(EventName, Sender);
}
function InteractionStarted()
{
// Keep track of what special move the leader is doing.
LeaderSpecialMove = Leader != none ? Leader.SpecialMove : KFPOwner.InteractionPawn.SpecialMove;
}
DefaultProperties
{
}