//=============================================================================
// KFSeqAct_SetTraderVolumeIgnore
//=============================================================================
// Action that sets a volume to be used when determining if the trader trail
// is shown or not.
//=============================================================================
// Killing Floor 2
// Copyright (C) 2017 Tripwire Interactive LLC
//=============================================================================
class KFSeqAct_SetTraderVolumeIgnore extends SequenceAction
	dependsOn(KFSeqAct_ShowPath);

/**
 * Leave at VCT_None to always attempt to show the path to all human players.
 * If this is set to VCT_InVolume, it will only show the path to players inside the linked volume.
 * If this is set to VCT_NotInVolume, it will only show the path to players NOT in the linked volume.
 */
var() eVolumeCheckType VolumeCheckType;

event Activated()
{
	local SeqVar_Object ObjVar;
	local Volume Volume;
	local KFGameReplicationInfo KFGRI;
	
	if( InputLinks[0].bHasImpulse )
	{
		// Grab our trader
		foreach LinkedVariables( class'SeqVar_Object', ObjVar, "Volume" )
		{
			Volume = Volume( ObjVar.GetObjectValue() );
			break;
		}

		// Sanity
		if( Volume == none )
		{
			return;
		}

		// Set in gamereplicationinfo
		KFGRI = KFGameReplicationInfo( class'WorldInfo'.static.GetWorldInfo().GRI );
		if( KFGRI != none )
		{
			KFGRI.TraderVolume = Volume;
			KFGRI.TraderVolumeCheckType = VolumeCheckType;
		}
	}
	else if( InputLinks[1].bHasImpulse )
	{
		// Clear from gamereplicationinfo
		KFGRI = KFGameReplicationInfo( class'WorldInfo'.static.GetWorldInfo().GRI );
		if( KFGRI != none )
		{
			KFGRI.TraderVolume = none;
			KFGRI.TraderVolumeCheckType = 0;
		}
	}
}

static function bool IsActorInVolume( Actor TestActor, Volume TestVolume )
{
	local Actor A;

	// Use actor base class to avoid casting
	foreach TestActor.TouchingActors( class'Actor', A )	
	{
		if( A == TestVolume )
		{
			return true;
		}
	}

	return TestVolume.Encompasses( TestActor );
}

DefaultProperties
{
	ObjCategory="Killing Floor"
	ObjName="Set Trader Volume Settings"

	InputLinks(0)=(LinkDesc="Set")
	InputLinks(1)=(LinkDesc="Clear")
	VariableLinks.Empty()
	VariableLinks(0)=(ExpectedType=class'SeqVar_Object',LinkDesc="Volume",MaxVars=1)

	VolumeCheckType=VCT_None
	bCallHandler=false
}