//=============================================================================
// KFInventory_Money
//=============================================================================
// The KFInventory_Money is used to spawn dosh pickups
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// - Christian "schneidzekk" Schneider
//=============================================================================
class KFInventory_Money extends Inventory
	hidedropdown;

var float 		NextDropCashMessageTime;
var float		DropCashMessageDelay;

/**
 * Drop this item out in to the world
 *
 * @param	StartLocation 		- The World Location to drop this item from
 * @param	StartVelocity		- The initial velocity for the item when dropped
 */

function DropFrom(vector StartLocation, vector StartVelocity)
{
	local KFDroppedPickup_Cash KFDP;
	local PlayerReplicationInfo PRI;
	local int Amount;
	local KFGameReplicationInfo KFGRI;
	
	KFGRI = KFGameReplicationInfo(WorldInfo.GRI);

	// if cannot spawn a pickup, then destroy and quit
	if( DroppedPickupClass == None || DroppedPickupMesh == None || (KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16))
	{
		return;
	}

	// Get score (cash value) from PRI
	PRI = Instigator.PlayerReplicationInfo;
	if ( PRI != none && PRI.Score > 0 )
	{
		Amount = Min(50, int(PRI.Score));
	}
	if ( Amount <= 0 )
	{
		return;
	}

	// Offset spawn closer to eye location
	StartLocation.Z += Instigator.BaseEyeHeight / 2;

	// the last bool param is to prevent collision from preventing spawns
	KFDP = KFDroppedPickup_Cash(Spawn(DroppedPickupClass,PlayerController(Instigator.Controller),, StartLocation,,,true));
	if( KFDP == None )
	{
		PlayerController(Instigator.Controller).ReceiveLocalizedMessage( class'KFLocalMessage_Game', GMT_FailedDropInventory );
		return;
	}

	KFDP.SetPhysics(PHYS_Falling);
	KFDP.Inventory	= self;
	KFDP.InventoryClass = class;
	KFDP.Velocity = StartVelocity * 1.6;
	KFDP.Instigator = Instigator;
	KFDP.SetPickupMesh(DroppedPickupMesh);
	KFDP.SetPickupParticles(DroppedPickupParticles);

	KFDP.CashAmount = Amount;
	KFDP.TosserPRI = PRI;
	if( KFPlayerReplicationInfo(PRI) != none )
	{
		KFPlayerReplicationInfo(PRI).AddDosh( -Amount );
	}

	`DialogManager.PlayDoshTossDialog( KFPawn(Instigator) );
}

/** DenyPickupQuery
	Function which lets existing items in a pawn's inventory
	prevent the pawn from picking something up.
 * @param ItemClass Class of Inventory our Owner is trying to pick up
 * @param Pickup the Actor containing that item (this may be a PickupFactory or it may be a DroppedPickup)
 * @return true to abort pickup or if item handles pickup
 */
function bool DenyPickupQuery(class<Inventory> ItemClass, Actor Pickup)
{
	return false;
}

DefaultProperties
{
	DroppedPickupClass=class'KFDroppedPickup_Cash'

	Begin Object Class=SkeletalMeshComponent Name=PickupMesh0
		SkeletalMesh=SkeletalMesh'GP_Mesh.dosh_SM'
		PhysicsAsset=PhysicsAsset'GP_Mesh.dosh_SM_Physics'
		CastShadow=false
    End Object
    DroppedPickupMesh=PickupMesh0

   	DropCashMessageDelay=5.f
}
