diff options
Diffstat (limited to 'game/shared/tf2/techtree.h')
| -rw-r--r-- | game/shared/tf2/techtree.h | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/game/shared/tf2/techtree.h b/game/shared/tf2/techtree.h new file mode 100644 index 0000000..bac9764 --- /dev/null +++ b/game/shared/tf2/techtree.h @@ -0,0 +1,320 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#if !defined( TECHTREE_H ) +#define TECHTREE_H +#ifdef _WIN32 +#pragma once +#endif + + +// Evil, Game DLL only code +#ifndef CLIENT_DLL +class CBaseTFPlayer; +class CTFTeam; +class CInfoCustomTechnology; +#endif + +class IFileSystem; + +//=========================================================================================== +// Technology tree defines +#define MAX_TF_TECHLEVELS 6 // Number of TF2 tech levels +#define TECHLEVEL_PERCENTAGE_NEEDED 0.5 // Percentage of a tech level that must be owned before the next tech level becomes available +#define MAX_TECHNOLOGIES 128 // Max number of resource types +#define MAX_ASSOCIATED_WEAPONS 2 // Max number of weapons that a tech can be associated with + +// Indexes into resource arrays +#define NORMAL_RESOURCES 0 +#define PROCESSED_RESOURCES 1 +#define RESOURCE_TYPES 2 + +// Tech +#define TECHNOLOGY_NAME_LENGTH 64 // Max length of a tech name +#define TECHNOLOGY_PRINTNAME_LENGTH 128 // Max length of a tech's print name +#define TECHNOLOGY_DESC_LENGTH 256 // Max length of a tech's description +#define MAX_CONTAINED_TECHNOLOGIES 16 // Max number of technologies that can be contained within another technology +#define MAX_DEPENDANT_TECHNOLOGIES 16 // Max number of technologies that a tech can depend on +#define TECHNOLOGY_SOUNDFILENAME_LENGTH 256 +#define TECHNOLOGY_TEXTURENAME_LENGTH 128 +#define TECHNOLOGY_BUTTONNAME_LENGTH 64 +#define TECHNOLOGY_WEAPONNAME_LENGTH 128 + +// Color codes for Resources +struct rescolor +{ + int r; + int g; + int b; +}; + +// Class result structure for technologies +struct classresult_t +{ + bool bClassTouched; // This technology directly affects this class + char pszSoundFile[TECHNOLOGY_SOUNDFILENAME_LENGTH]; // Filename of the sound + int iSound; // Sound played to members of this class when this technology is achieved + char pszDescription[TECHNOLOGY_DESC_LENGTH]; // Description for this technology shown only to this class + + // If true, then we should determine what weapons should be given to the player + // of this class when this technology is received by looking at the "associated_weapons" + // data + bool m_bAssociateWeaponsForClass; +}; + +extern char sResourceName[32]; +extern rescolor sResourceColor; + + +#include "utlvector.h" +#include "tf_shareddefs.h" + + +//=========================================================================================== +//----------------------------------------------------------------------------- +// Purpose: A Technology +//----------------------------------------------------------------------------- +class CBaseTechnology +{ +public: + // Constructions + CBaseTechnology( void ); + virtual ~CBaseTechnology( void ); + + // Data read from the data file + virtual void SetName( const char *pName ); + virtual void SetPrintName( const char *pName ); + virtual void SetDescription( const char *pDesc ); + virtual void SetButtonName( const char *pName ); + virtual void SetLevel( int iLevel ); + virtual void SetCost( float fResourceCost ); + virtual void SetClassResultSound( int iClass, const char *pSound ); + virtual void SetClassResultSound( int iClass, int iSound ); + virtual void SetClassResultDescription( int iClass, const char *pDesc ); + virtual void SetClassResultAssociateWeapons( int iClass, bool associate ); + virtual void AddContainedTechnology( const char *pszTech ); + virtual void AddDependentTechnology( const char *pszTech ); + + // Returns true if the specified class is affected by this technology, or any contained techs + virtual bool AffectsClass( int iClass ); + + virtual bool IsClassUpgrade( void ); + virtual bool IsVehicle( void ); + virtual bool IsTechLevelUpgrade( void ); + virtual bool IsResourceTech( void ); + + virtual void SetHidden( bool hide ); + virtual bool IsHidden( void ); + + // Used by client to avoid giving you the same hint twice for a technology + // during a game/session + virtual void ResetHintsGiven( void ); + virtual bool GetHintsGiven( int type ); + virtual void SetHintsGiven( int type, bool given ); + + // Returns the level to which this technology belongs + virtual int GetLevel( void ); + // Returns the internal name of the technology ( no spaces ) + virtual const char *GetName( void ); + // Returns the printable name of the technology + virtual const char *GetPrintName( void ); + // Returns the button name of the technology; + virtual const char *GetButtonName( void ); + // Returns the non-class specific description of this technology + virtual const char *GetDescription( int iPlayerClass ); + // Returns the sound to play for this technology + virtual const char *GetSoundFile( int iClass ); + virtual int GetSound( int iClass ); + // Set availability of the technology for the specified team + virtual void SetAvailable( bool state ); + // Returns true if the team has the technology + virtual int GetAvailable( void ); + // Zero out all preference/voting by players + virtual void ZeroPreferences( void ); + // Add one to the preference count for this technology for the specified team + virtual void IncrementPreferences( void ); + // Retrieve the number of player's who want to vote for this technology + virtual int GetPreferenceCount( void ); + + // Retrieves the cost of purchasing the technology (doesn't factor in the resource levels) + float GetResourceCost( void ); + + // Retrieves the current amount of resources spent on the technology + float GetResourceLevel( void ); + + // Sets a resource level to an amount + void SetResourceLevel( float flResourceLevel ); + // Spends resources on buying this technology + bool IncreaseResourceLevel( float flResourcesToSpend ); + // Figure out my overall owned percentage + void RecalculateOverallLevel( void ); + float GetOverallLevel( void ); + void ForceComplete( void ); + + // Goal technologies ( Techs related to a team's goal in a map ) + bool IsAGoalTechnology( void ); + void SetGoalTechnology( bool bGoal ); + + // Check if class wants to enumerate weapon associations + bool GetAssociateWeaponsForClass( int iClass ); + + // Weapon associatations + int GetNumWeaponAssociations( void ); + char const *GetAssociatedWeapon( int index ); + void AddAssociatedWeapon( const char *weaponname ); + + // Contained Technology access + int GetNumberContainedTechs( void ); + const char *GetContainedTechName( int iTech ); + void SetContainedTech( int iTech, CBaseTechnology *pTech ); + + // Dependent Technology access + int GetNumberDependentTechs( void ); + const char *GetDependentTechName( int iTech ); + void SetDependentTech( int iTech, CBaseTechnology *pTech ); + bool DependsOn( CBaseTechnology *pTech ); + bool HasInactiveDependencies( void ); + + // Dirty bit, used for fast knowledge of when to resend techs + bool IsDirty( void ); + void SetDirty( bool bDirty ); + +// Evil, Game DLL only code +#ifndef CLIENT_DLL + // The technology has been acquired by the team. + virtual void AddTechnologyToTeam( CTFTeam *pTeam ); + // The technology has just been acquired, for each player on the acquiring team + // ask the technology to add any necessary weapons/items/abilities/modifiers, etc. + virtual void AddTechnologyToPlayer( CBaseTFPlayer *player ); + // A technology watcher entity wants to register as a watcher for this technology + virtual void RegisterWatcher( CInfoCustomTechnology *pWatcher ); + CUtlVector< CInfoCustomTechnology* > m_aWatchers; +#endif + + void UpdateWatchers( void ); + + // Hud Data + void SetActive( bool state ); + bool GetActive( void ); + void SetPreferred( bool state ); + bool GetPreferred( void ); + void SetVoters( int voters ); + int GetVoters( void ); + + void SetTextureName( const char *texture ); + const char *GetTextureName( void ); + void SetTextureId( int id ); + int GetTextureId( void ); + +private: + // Name of the technology. Used to identify it in code. + char m_pszName[ TECHNOLOGY_NAME_LENGTH ]; + // Print name of the technology. Used to print the name of this technology to users. + char m_pszPrintName[ TECHNOLOGY_PRINTNAME_LENGTH ]; + // Button name of technology in the tech tree + char m_szButtonName[ TECHNOLOGY_BUTTONNAME_LENGTH ]; + // Description of the technology + char m_pszDescription[ TECHNOLOGY_DESC_LENGTH ]; + // Level to which the technology belongs + int m_nTechLevel; + // Sound played to the entire team when this technology is received + char m_pszTeamSoundFile[ TECHNOLOGY_SOUNDFILENAME_LENGTH ]; + int m_iTeamSound; + // Results for this technology when it's achieved, on a per-class basis + classresult_t m_ClassResults[ TFCLASS_CLASS_COUNT ]; + + // Resource costs + float m_fResourceCost; + // Resource levels (amount of resource spent on the technology so far) + float m_fResourceLevel; + float m_flOverallOwnedPercentage; + + // Technologies contained within this one + char m_apszContainedTechs[ MAX_CONTAINED_TECHNOLOGIES ][ TECHNOLOGY_NAME_LENGTH ]; + int m_iContainedTechs; + CBaseTechnology *m_pContainedTechs[ MAX_CONTAINED_TECHNOLOGIES ]; + + // Technologies this tech depends on + char m_apszDependentTechs[ MAX_DEPENDANT_TECHNOLOGIES ][ TECHNOLOGY_NAME_LENGTH ]; + int m_iDependentTechs; + CBaseTechnology *m_pDependentTechs[ MAX_DEPENDANT_TECHNOLOGIES ]; + + // Weapon association + int m_nNumWeaponAssociations; + char m_rgszWeaponAssociation[ MAX_ASSOCIATED_WEAPONS ][ TECHNOLOGY_WEAPONNAME_LENGTH ]; + + // Does the team have access to the technology + bool m_bAvailable; + + // Is this a "placeholder" tech that shouldn't show up in the real tree + bool m_bHidden; + + CUtlVector< int > m_HintsGiven; + + // Count of how many team members voted for this technology for spending resources + int m_nPreferenceCount; + + bool m_bGoalTechnology; // True if this tech's related to a team's goal in the current map + bool m_bClassUpgrade; // True if the tech unlocks a new class + bool m_bVehicle; // True if the tech unlocks a vehicle + bool m_bTechLevelUpgrade; // True if the tech unlocks a new tech level + bool m_bResourceTech; // True if related to resource gathering + + // Dirty bit, used for fast knowledge of when to resend techs + bool m_bDirty; + + // Hud data + bool m_bActive; + bool m_bPreferred; + int m_nVoters; + + int m_nTextureID; + char m_szTextureName[ TECHNOLOGY_TEXTURENAME_LENGTH ]; +}; + +//----------------------------------------------------------------------------- +// Purpose: The Technology Tree. +//----------------------------------------------------------------------------- +class CTechnologyTree +{ +public: + // Construction + CTechnologyTree( IFileSystem* pFileSystem, int nTeamNumber ); + virtual ~CTechnologyTree( void ); + + // Startup/shutdown + void Shutdown( void ); + + // Accessors + void AddTechnologyFile( IFileSystem* pFileSystem, int nTeamNumber, char *sFileName ); + void LinkContainedTechnologies( void ); + void LinkDependentTechnologies( void ); + int GetIndex( CBaseTechnology *pItem ); // Get the index of the specified item + CBaseTechnology *GetTechnology( int index ); + CBaseTechnology *GetTechnology( const char *pName ); + float GetPercentageOfTechLevelOwned( int iTechLevel ); + + // Size of list + int GetNumberTechnologies( void ); + + // Local client's preferred item + void SetPreferredTechnology( CBaseTechnology *pItem ); + CBaseTechnology *GetPreferredTechnology( void ); + + // Preference handling + void ClearPreferenceCount( void ); + void IncrementPreferences( void ); + int GetPreferenceCount( void ); // Get the number of players who've voted on techs + CBaseTechnology *GetDesiredTechnology( int iDesireLevel ); + + // Growable list of technologies + CUtlVector< CBaseTechnology * > m_Technologies; + + int m_nPreferenceCount; +}; + + +#endif // TECHTREE_H
\ No newline at end of file |