//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Functions related to dynamic recipes // //============================================================================= #ifndef ECON_DYNAMIC_RECIPE #define ECON_DYNAMIC_RECIPE #ifdef _WIN32 #pragma once #endif #include "tf_gcmessages.h" #include "game_item_schema.h" #include "econ_item.h" extern const char *g_pszAttrEncodeSeparator; //----------------------------------------------------------------------------- // Purpose: Stores off all CAttribute_DynamicRecipeComponent attributes // that consider m_pTargetItem to be a match. If NULL is passed in for pTargetItem // then we consider all attributes to be a match //----------------------------------------------------------------------------- class CRecipeComponentMatchingIterator : public CEconItemSpecificAttributeIterator { public: CRecipeComponentMatchingIterator( const IEconItemInterface *pSourceItem, const IEconItemInterface *pTargetItem ); void SetSourceItem( const IEconItemInterface *m_pSourceItem ); void SetTargetItem( const IEconItemInterface *pTargetItem ); void SetIgnoreCompleted( bool bIgnoreCompleted ) { m_bIgnoreCompleted = bIgnoreCompleted; } virtual bool OnIterateAttributeValue( const CEconItemAttributeDefinition *pAttrDef, const CAttribute_DynamicRecipeComponent& value ) OVERRIDE; const CUtlVector< const CEconItemAttributeDefinition* >& GetMatchingComponentInputs() const { return m_vecMatchingInputs; } const CUtlVector< const CEconItemAttributeDefinition* >& GetMatchingComponentOutputs() const { return m_vecMatchingOutputs; } int GetTotalInputs() const { return m_nInputsTotal; } int GetInputsFulfilled() const { return m_nInputsFulfilled; } int GetTotalOutputs() const { return m_nOutputsTotal; } private: const IEconItemInterface *m_pSourceItem; const IEconItemInterface *m_pTargetItem; bool m_bIgnoreCompleted; CUtlVector< const CEconItemAttributeDefinition* > m_vecMatchingInputs; CUtlVector< const CEconItemAttributeDefinition* > m_vecMatchingOutputs; int m_nInputsTotal; int m_nInputsFulfilled; int m_nOutputsTotal; }; //----------------------------------------------------------------------------- // Purpose: Given a CAttribute_DynamicRecipeComponent and a IEconItemInterface, // returns whether the item pass the criteria of the attribute //----------------------------------------------------------------------------- bool DefinedItemAttribMatch( const CAttribute_DynamicRecipeComponent& attribValue, const IEconItemInterface* pItem ); //----------------------------------------------------------------------------- // Purpose: Decodes the encoded attributes in attribValue and applies those attributes to pItem // Returns true on success, false if anything fails //----------------------------------------------------------------------------- bool DecodeAttributeStringIntoAttributes( const CAttribute_DynamicRecipeComponent& attribValue, CUtlVector& vecAttribs); //----------------------------------------------------------------------------- // Purpose: Decodes the encoded attributes in attribValue forms pItem into the // item that it describes //----------------------------------------------------------------------------- bool DecodeItemFromEncodedAttributeString( const CAttribute_DynamicRecipeComponent& attribValue, CEconItem* pItem ); #endif //ECON_DYNAMIC_RECIPE