class KFUsablePerkTrigger extends Trigger_PawnsOnly
	native
	implements(KFInterface_Usable);

var int InteractionIndex;

cpptext
{
	virtual UBOOL ShouldTrace( UPrimitiveComponent* Primitive,AActor *SourceActor, DWORD TraceFlags );
};

simulated function bool GetIsUsable( Pawn User )
{
	return GetCanInteract( User );
}

function SetInteractionIndex( int Index )
{
	InteractionIndex = Index;
}

function int GetInteractionIndex( Pawn User )
{
	return InteractionIndex;
}

event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal)
{
	local KFPawn_Human KFP;

	Super.Touch(Other, OtherComp, HitLocation, HitNormal);

	KFP = KFPawn_Human(Other);
	if( KFP != none && KFP.Controller != none && KFP != Owner )
	{
		KFPlayerController(KFP.Controller).SetPendingInteractionMessage();
	}
}

event UnTouch(Actor Other)
{
	local KFPawn_Human KFP;

	super.UnTouch( Other );

	KFP = KFPawn_Human(Other);
	if( KFP != none && KFP.Controller != none && KFP != Owner )
	{
		KFPlayerController(KFP.Controller).SetPendingInteractionMessage();
	}
}

function bool GetCanInteract( Pawn User, optional bool bInteractIfTrue = false)
{
	local KFPawn_Human OwnerPawn;
	local KFPawn_Human UserPawn;
	local KFPerk CurrentPerk;

	OwnerPawn = KFPawn_Human(Owner);
	UserPawn = KFPawn_Human(User);
	if ( OwnerPawn != none && UserPawn != none && UserPawn.Controller != none && OwnerPawn != UserPawn )
	{
		CurrentPerk = OwnerPawn.GetPerk();
		if ( CurrentPerk != none &&
			 CurrentPerk.CanInteract(UserPawn) )
		{
			if( bInteractIfTrue )
			{
				CurrentPerk.Interact(UserPawn);
				KFPlayerController(UserPawn.Controller).SetPendingInteractionMessage();
			}
			return true;
		}
	}
	return false;
}

simulated function DestroyTrigger()
{
	local KFPawn_Human Toucher;
	//notify all touching actors that they are not touching this non existing trigger anymore
	
	foreach TouchingActors(class'KFPawn_Human', Toucher)
	{
		UnTouch(Toucher);
	}

	Destroy();
}

function bool UsedBy(Pawn User)
{
	return GetCanInteract( User, true );
}

DefaultProperties
{
	bStatic=FALSE
	bNoDelete=FALSE

	Begin Object Name=CollisionCylinder
		CollisionRadius=+00200.000000
		CollisionHeight=+00100.000000
	End Object
}