Class ExtPlayerInput extends KFPlayerInput;

var KF2GUIController MyGUIController;
var bool bHandledTravel;

exec function StartCrouch()
{
	bDuck = 1;
}
exec function ToggleCrouch()
{
	bDuck = (bDuck == 0) ? 1 : 0;
}

simulated exec function IronSights(optional bool bHoldButtonMode)
{
	local KFWeapon KFW;

	if( Pawn != none )
	{
		if( KFPawn_Monster(Pawn)!=None )
			Pawn.StartFire(1);
		else
		{
			KFW = KFWeapon(Pawn.Weapon);
			if ( KFW != None )
				KFW.SetIronSights((bHoldButtonMode) ? true : !KFW.bUsingSights);
		}
	}
}
simulated exec function IronSightsRelease(optional bool bHoldButtonMode)
{
	local KFWeapon KFW;

	if( Pawn != none )
	{
		if( KFPawn_Monster(Pawn)!=None )
			Pawn.StopFire(1);
		else
		{
			KFW = KFWeapon(Pawn.Weapon);
			if ( !KFW.bHasIronSights || bHoldButtonMode )
				KFW.SetIronSights(false);
		}
	}
}

simulated exec function ToggleFlashlight()
{
	if( KFPawn_Monster(Pawn)!=None && Pawn.Health>0 )
		SetNightVision(!bNightVisionActive);
	else Super.ToggleFlashlight();
}

function PreClientTravel( string PendingURL, ETravelType TravelType, bool bIsSeamlessTravel)
{
	Super.PreClientTravel(PendingURL,TravelType,bIsSeamlessTravel);
	if( !bHandledTravel )
	{
		bHandledTravel = true;
		if( KFExtendedHUD(MyHUD)!=None )
			KFExtendedHUD(MyHUD).NotifyLevelChange(true);
	}
}

event bool FilterButtonInput(int ControllerId, Name Key, EInputEvent Event, float AmountDepressed, bool bGamepad)
{
	if ( MyGfxManager.bAfterLobby && Event==IE_Pressed && (Key == 'Escape' || Key == 'XboxTypeS_Start') )
	{
		if( MyGUIController==None || MyGUIController.bIsInvalid )
		{
			MyGUIController = class'KF2GUIController'.Static.GetGUIController(Outer);
			if( MyGUIController==None )
			{
				ExtPlayerController(Outer).CancelConnection();
				return false;
			}
		}
		if( MyGUIController.bIsInMenuState )
		{
			return false;
		}
		else if( MyGFxManager.bMenusOpen )
		{
			return MyGFxManager.ToggleMenus();
		}
		else
		{
			MyGUIController.OpenMenu(ExtPlayerController(Outer).MidGameMenuClass);
			return true;
		}
	}
	return false;
}