//=========================================================
// Reinicio
//=========================================================
void CInventoryPanel::Reset()
{
	BackpackItems->RemoveAll();
	BackpackItems->RemoveAllSections();
	BackpackItems->AddSection(0, "");
	BackpackItems->AddColumnToSection(0, "name", "#Inventory_Backpack", 0, 300);
	BackpackItems->AddColumnToSection(0, "count", "", 0, 100);

	PocketItems->RemoveAll();
	PocketItems->RemoveAllSections();
	PocketItems->AddSection(0, "");
	PocketItems->AddColumnToSection(0, "name", "#Inventory_Pocket", 0, 300);
	PocketItems->AddColumnToSection(0, "count", "", 0, 100);

	BackpackProgress->SetProgress(0.0);
	InventoryProgress->SetProgress(0.0);
}
//=========================================================
// Bucle de ejecución de tareas.
//=========================================================
void CInventoryPanel::OnTick()
{
	BaseClass::OnTick();
	C_IN_Player *pPlayer = (C_IN_Player *)C_BasePlayer::GetLocalPlayer();

	if ( !pPlayer )
	{
		SetVisible(false);
		return;
	}

	if ( cl_update_inventory.GetBool() )
	{
		// Obtenemos los limites del inventario.
		ConVarRef sv_max_inventory_backpack("sv_max_inventory_backpack");
		ConVarRef sv_max_inventory_pocket("sv_max_inventory_pocket");

		// Lo devolvemos a 0
		cl_update_inventory.SetValue(0);

		// Removemos todos los objetos.
		BackpackItems->RemoveAll();
		PocketItems->RemoveAll();

		int pEntity;
		const char *pItemName;
		const char *pItemClassName;

		float pBackpackCountItems	= 0;
		float pPocketCountItems		= 0;

		int pBackpackItems[100];
		int pPocketItems[100];

		// Iniciamos los array
		for ( int i = 0; i < ARRAYSIZE(pBackpackItems); i++ )
			pBackpackItems[i]	= 0;
		for ( int i = 0; i < ARRAYSIZE(pPocketItems); i++ )
			pPocketItems[i]		= 0;
		
		// Mochila
		// Primero obtenemos todos los objetos y los agrupamos en array.
		for ( int i = 1; i < ARRAYSIZE(pBackpackItems); i++ )
		{
			pEntity	= pPlayer->Inventory_GetItem(i, INVENTORY_BACKPACK);

			// No hay nada en este Slot
			if ( pEntity == 0 )
				continue;

			// Aquí vamos contando los objetos de este mismo tipo.
			// !!!NOTE: Todo esto fue desarrollado por alguien que no sabe mucho C++... Odio los array de C++...
			pBackpackItems[pEntity] = (pBackpackItems[pEntity] + 1);
			pBackpackCountItems++;			
		}
		// Ahora obtenemos la lista de objetos con su respectiva cantidad y la mostramos.
		for ( int i = 1; i < ARRAYSIZE(pBackpackItems); i++ )
		{
			// !!!NOTE: i ahora es la ID del objeto
			if ( pBackpackItems[i] == 0 || !pBackpackItems[i] )
				continue;

			pItemName		= pPlayer->Inventory_GetItemNameByID(i);
			pItemClassName	= pPlayer->Inventory_GetItemClassNameByID(i);

			// No hay nada en este Slot
			if ( pItemName == "" || pItemClassName == "" )
				continue;

			// Agregamos el objeto.
			KeyValues *itemData = new KeyValues("data");
			itemData->SetString("name",			pItemName);
			itemData->SetString("classname",	pItemClassName);
			itemData->SetInt("count",			pBackpackItems[i]);
			BackpackItems->AddItem(0, itemData);
		}

		// Bolsillo
		// Primero obtenemos todos los objetos y los agrupamos en array.
		for ( int i = 1; i < ARRAYSIZE(pPocketItems); i++ )
		{
			pEntity	= pPlayer->Inventory_GetItem(i, INVENTORY_POCKET);

			// No hay nada en este Slot
			if ( pEntity == 0 )
				continue;

			// Aquí vamos contando los objetos de este mismo tipo.
			// !!!NOTE: Todo esto fue desarrollado por alguien que no sabe mucho C++... Odio los array de C++...
			pPocketItems[pEntity] = (pPocketItems[pEntity] + 1);
			pPocketCountItems++;			
		}
		// Ahora obtenemos la lista de objetos con su respectiva cantidad y la mostramos.
		for ( int i = 1; i < ARRAYSIZE(pPocketItems); i++ )
		{
			// !!!NOTE: i ahora es la ID del objeto
			if ( pPocketItems[i] == 0 || !pPocketItems[i] )
				continue;

			pItemName		= pPlayer->Inventory_GetItemNameByID(i);
			pItemClassName	= pPlayer->Inventory_GetItemClassNameByID(i);

			if ( pItemName == "" || pItemClassName == "" )
				continue;

			KeyValues *itemData = new KeyValues("data");
			itemData->SetString("name",			pItemName);
			itemData->SetString("classname",	pItemClassName);
			itemData->SetInt("count",			pPocketItems[i]);
			PocketItems->AddItem(0, itemData);
		}

		// Actualizamos las barras de llenado.
		BackpackProgress->SetProgress( pBackpackCountItems / sv_max_inventory_backpack.GetFloat() );
		InventoryProgress->SetProgress( pPocketCountItems / sv_max_inventory_pocket.GetFloat() );
	}

	SetVisible(cl_inventory.GetBool());
}