//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //------------------------------------------------------------------------------------------------------------------------------- #ifndef ECON_STORECATEGORY_H #define ECON_STORECATEGORY_H #ifdef _WIN32 #pragma once #endif #if defined( GC_DLL ) #include "econ/econ_storemetadata.h" #endif //------------------------------------------------------------------------------------------------------------------------------- typedef CRC32_t StoreCategoryID_t; //------------------------------------------------------------------------------------------------------------------------------- // sort by price highest to lowest class CEconStoreEntryLess { public: bool Less( const uint16& lhs, const uint16& rhs, void *pContext ); }; //------------------------------------------------------------------------------------------------------------------------------- class CEconStoreCategoryManager { public: CEconStoreCategoryManager(); bool BInit( CEconStorePriceSheet *pPriceSheet, KeyValues *pStoreMetaDataKV ); bool BOnPriceSheetLoaded( CEconStorePriceSheet *pPriceSheet ); static StoreCategoryID_t GetCategoryID( const char *pCategoryName ); static StoreCategoryID_t k_CategoryID_Invalid; static StoreCategoryID_t k_CategoryID_New; static StoreCategoryID_t k_CategoryID_Weapons; static StoreCategoryID_t k_CategoryID_Limited; static StoreCategoryID_t k_CategoryID_Maps; static StoreCategoryID_t k_CategoryID_Cosmetics; static StoreCategoryID_t k_CategoryID_Taunts; static StoreCategoryID_t k_CategoryID_Tools; static StoreCategoryID_t k_CategoryID_Bundles; static StoreCategoryID_t k_CategoryID_Collections; static StoreCategoryID_t k_CategoryID_Popular; static StoreCategoryID_t k_CategoryID_OnSale; static StoreCategoryID_t k_CategoryID_Featured; static StoreCategoryID_t k_CategoryID_ClassBundles; static StoreCategoryID_t k_CategoryID_Highlighted; struct StoreCategory_t { StoreCategory_t() { V_memset( this, 0, sizeof( StoreCategory_t ) ); } int GetNumSubcategories() const { return m_vecSubcategories.Count(); } bool HasSubcategories() const { return m_vecSubcategories.Count() > 1; } bool BIsSubcategory() const { return m_unParentCategoryID != CEconStoreCategoryManager::k_CategoryID_Invalid; } bool m_bIsHome:1; // Home page? Default=no. bool m_bUseLargeCells:1; // Display large icons in the store. Default=no. bool m_bDefaultTab:1; // Is this the default tab? Default=no bool m_bVisible:1; // Should this tab be displayed in the store? Default=yes. bool m_bInGameOnly:1; // Is this category only to be displayed in the in-game store (vs. the web store)? const char *m_pchRawName; // Raw name of the tab const char *m_pchName; // Name of the tab const char *m_pchPageClass; // Code class of the store page. const char *m_pchSortType; // How to sort the page. const char *m_pchPageRes; // Res file to use for the page. StoreCategoryID_t m_unID; // A unique ID that is stable across sessions StoreCategoryID_t m_unParentCategoryID; CUtlVector m_vecSubcategories; // A list of ID's for all subcategories CUtlSortVector m_vecEntries; // Vector of items for sale #if defined( GC_DLL ) const CEconStoreMetaData::DropdownPrefabInfo_t *m_pDropdownPrefab; #endif }; const StoreCategoryID_t GetHomeCategoryID() const { Assert( m_unHomeCategoryID != k_CategoryID_Invalid ); return m_unHomeCategoryID; } const StoreCategory_t *GetStoreCategoryFromID( StoreCategoryID_t unID ) const; int GetNumCategories( void ) const { return m_vecCategories.Count(); } const StoreCategory_t *GetCategoryFromIndex( int i ) const { Assert(i >= 0 && i < m_vecCategories.Count()); return &m_vecCategories[i]; } StoreCategory_t *GetFeaturedItems() const { return NULL; } private: bool BInitCategory( CEconStorePriceSheet *pPriceSheet, StoreCategory_t *pCategory, KeyValues *pKVTab ); StoreCategory_t *GetStoreCategoryFromID( StoreCategoryID_t unID ); CUtlVector< StoreCategory_t > m_vecCategories; StoreCategoryID_t m_unHomeCategoryID; // The ID for the home tab }; //------------------------------------------------------------------------------------------------------------------------------- CEconStoreCategoryManager *GEconStoreCategoryManager(); void ClearEconStoreCategoryManager(); //------------------------------------------------------------------------------------------------------------------------------- #endif