//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================

#ifndef TFITEMCONSTANTS_H		// ECON_ITEM_CONSTANTS_H is used by src/common/econ_item_view.h
#define TFITEMCONSTANTS_H
#ifdef _WIN32
#pragma once
#endif


//-----------------------------------------------------------------------------
// Weapon Types
//-----------------------------------------------------------------------------
enum
{
	TF_WPN_TYPE_PRIMARY = 0,
	TF_WPN_TYPE_SECONDARY,
	TF_WPN_TYPE_MELEE,
	TF_WPN_TYPE_GRENADE,
	TF_WPN_TYPE_BUILDING,
	TF_WPN_TYPE_PDA,
	TF_WPN_TYPE_ITEM1,
	TF_WPN_TYPE_ITEM2,
	TF_WPN_TYPE_HEAD,
	TF_WPN_TYPE_MISC,
	TF_WPN_TYPE_MELEE_ALLCLASS,
	TF_WPN_TYPE_SECONDARY2,
	TF_WPN_TYPE_PRIMARY2,


	//
	// ADD NEW ITEMS HERE TO AVOID BREAKING DEMOS
	//

	TF_WPN_TYPE_COUNT,
};

//-----------------------------------------------------------------------------
// Purpose: Slots for items within loadouts
//-----------------------------------------------------------------------------
enum loadout_positions_t
{
	LOADOUT_POSITION_INVALID = -1,

	// Weapons & Equipment
	LOADOUT_POSITION_PRIMARY = 0,
	LOADOUT_POSITION_SECONDARY,
	LOADOUT_POSITION_MELEE,
	LOADOUT_POSITION_UTILITY,
	LOADOUT_POSITION_BUILDING,
	LOADOUT_POSITION_PDA,
	LOADOUT_POSITION_PDA2,

	// Wearables. If you add new wearable slots, make sure you add them to IsWearableSlot() below this.
	LOADOUT_POSITION_HEAD,
	LOADOUT_POSITION_MISC,

	// other
	LOADOUT_POSITION_ACTION,

	// More wearables, yay!
	LOADOUT_POSITION_MISC2,

	// taunts
	LOADOUT_POSITION_TAUNT,
	LOADOUT_POSITION_TAUNT2,
	LOADOUT_POSITION_TAUNT3,
	LOADOUT_POSITION_TAUNT4,
	LOADOUT_POSITION_TAUNT5,
	LOADOUT_POSITION_TAUNT6,
	LOADOUT_POSITION_TAUNT7,
	LOADOUT_POSITION_TAUNT8,

#ifdef STAGING_ONLY
	// Extra PDA mod slots 
	LOADOUT_POSITION_PDA_ADDON1,
	LOADOUT_POSITION_PDA_ADDON2,

	LOADOUT_POSITION_PDA3,
	//LOADOUT_POSITION_MISC3,
	//LOADOUT_POSITION_MISC4,
	//LOADOUT_POSITION_MISC5,
	//LOADOUT_POSITION_MISC6,
	//LOADOUT_POSITION_MISC7,
	//LOADOUT_POSITION_MISC8,
	//LOADOUT_POSITION_MISC9,
	//LOADOUT_POSITION_MISC10,
	LOADOUT_POSITION_BUILDING2,
#endif // STAGING_ONLY

	CLASS_LOADOUT_POSITION_COUNT,
};

enum account_loadout_positions_t
{
	ACCOUNT_LOADOUT_POSITION_ACCOUNT1,
	ACCOUNT_LOADOUT_POSITION_ACCOUNT2,
	ACCOUNT_LOADOUT_POSITION_ACCOUNT3,

	ACCOUNT_LOADOUT_POSITION_COUNT,
};

// We use this to determine the maximum number of wearable instances we'll send from the server down to
// connected clients. This was previously hardcoded to be 8 and because of the way RecvPropUtlVector works
// we can't easily change this without doing some kludgy work and breaking network/demo compatibility. In
// the shorter term, we'll break compatibility in staging where no-one cares but leave public unchanged.
#ifdef STAGING_ONLY
	#define	LOADOUT_MAX_WEARABLES_COUNT ( CLASS_LOADOUT_POSITION_COUNT )
#else
	#define	LOADOUT_MAX_WEARABLES_COUNT ( 8 /* !!! -- LOADOUT_POSITION_COUNT - 3 */ )
#endif

inline bool IsMiscSlot( int iSlot )
{
	return iSlot == LOADOUT_POSITION_MISC
		|| iSlot == LOADOUT_POSITION_MISC2
		|| iSlot == LOADOUT_POSITION_HEAD
#ifdef STAGING_ONLY
		//|| iSlot == LOADOUT_POSITION_MISC3
		//|| iSlot == LOADOUT_POSITION_MISC4
		//|| iSlot == LOADOUT_POSITION_MISC5
		//|| iSlot == LOADOUT_POSITION_MISC6
		//|| iSlot == LOADOUT_POSITION_MISC7
		//|| iSlot == LOADOUT_POSITION_MISC8
		//|| iSlot == LOADOUT_POSITION_MISC9
		//|| iSlot == LOADOUT_POSITION_MISC10
#endif // STAGING_ONLY
		;
}

inline bool IsBuildingSlot( int iSlot )
{
	return iSlot == LOADOUT_POSITION_BUILDING
#ifdef STAGING_ONLY
		|| iSlot == LOADOUT_POSITION_BUILDING2
#endif // STAGING_ONLY
		;
}

inline bool IsTauntSlot( int iSlot )
{
	return iSlot == LOADOUT_POSITION_TAUNT
		|| iSlot == LOADOUT_POSITION_TAUNT2
		|| iSlot == LOADOUT_POSITION_TAUNT3
		|| iSlot == LOADOUT_POSITION_TAUNT4
		|| iSlot == LOADOUT_POSITION_TAUNT5
		|| iSlot == LOADOUT_POSITION_TAUNT6
		|| iSlot == LOADOUT_POSITION_TAUNT7
		|| iSlot == LOADOUT_POSITION_TAUNT8;
}

inline bool IsWearableSlot( int iSlot ) 
{
	return iSlot == LOADOUT_POSITION_HEAD
		|| iSlot == LOADOUT_POSITION_MISC
		|| iSlot == LOADOUT_POSITION_ACTION
		|| IsMiscSlot( iSlot )
		|| IsTauntSlot( iSlot );
}

inline bool IsQuestSlot( int iSlot )
{
	return iSlot == ACCOUNT_LOADOUT_POSITION_ACCOUNT1
		|| iSlot == ACCOUNT_LOADOUT_POSITION_ACCOUNT2
		|| iSlot == ACCOUNT_LOADOUT_POSITION_ACCOUNT3;
}

inline bool IsValidItemSlot( int iSlot )
{
	return iSlot > LOADOUT_POSITION_INVALID && iSlot < CLASS_LOADOUT_POSITION_COUNT;
}

inline bool IsValidPickupWeaponSlot( int iSlot )
{
	return iSlot == LOADOUT_POSITION_PRIMARY
		|| iSlot == LOADOUT_POSITION_SECONDARY
		|| iSlot == LOADOUT_POSITION_MELEE;
}


// The total number of loadouts to track for each player.
// Right now, hardcoded to match TF's 10 classes.
#define LOADOUT_COUNT					(10+1)	// 0th class is undefined

// Halloween! (Shared by GC and game client.)
enum EHalloweenMap
{
	kHalloweenMap_MannManor,
	kHalloweenMap_Viaduct,
	kHalloweenMap_Lakeside,
	kHalloweenMap_Hightower,

	kHalloweenMapCount
};

enum EHalloweenGiftSpawnMetaInfo
{
	kHalloweenGiftMeta_IsUnderworldOnViaduct_DEPRECATED		= 0x01,
};

#endif // TFITEMCONSTANTS_H