You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.5 KiB
110 lines
4.5 KiB
//========= 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<const StoreCategory_t *> m_vecSubcategories; // A list of ID's for all subcategories |
|
CUtlSortVector<uint16, CEconStoreEntryLess> 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 |