//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef GDVAR_H #define GDVAR_H #pragma once #include #include // dvs: for MAX_STRING. Fix. class MDkeyvalue; enum GDIV_TYPE { ivBadType = -1, ivAngle, ivTargetDest, ivTargetNameOrClass, ivTargetSrc, ivInteger, ivString, ivChoices, ivFlags, ivDecal, ivColor255, // components are 0-255 ivColor1, // components are 0-1 ivStudioModel, ivSprite, ivSound, ivVector, ivNPCClass, ivFilterClass, ivFloat, ivMaterial, ivScene, ivSide, // One brush face ID. ivSideList, // One or more brush face IDs, space delimited. ivOrigin, // The origin of an entity, in the form "x y z". ivVecLine, // An origin that draws a line back to the parent entity. ivAxis, // The axis of rotation for a rotating entity, in the form "x0 y0 z0, x1 y1 z1". ivPointEntityClass, ivNodeDest, ivInstanceFile, // used for hammer to know this field should display a browse button to find map files ivAngleNegativePitch, // used for instance rotating when just a pitch value is present ivInstanceVariable, // used for instance variables for easy hammer editing ivInstanceParm, // used for instance parameter declaration ivMax // count of types }; //----------------------------------------------------------------------------- // Defines an element in a choices/flags list. Choices values are strings; // flags values are integers, hence the iValue and szValue members. //----------------------------------------------------------------------------- typedef struct { unsigned long iValue; // Bitflag value for ivFlags char szValue[MAX_STRING]; // String value for ivChoices char szCaption[MAX_STRING]; // Name of this choice BOOL bDefault; // Flag set by default? } GDIVITEM; class GDinputvariable { public: GDinputvariable(); GDinputvariable( const char *szType, const char *szName ); ~GDinputvariable(); BOOL InitFromTokens(TokenReader& tr); // functions: inline const char *GetName() { return m_szName; } inline const char *GetLongName(void) { return m_szLongName; } inline const char *GetDescription(void); inline int GetFlagCount() { return m_Items.Count(); } inline int GetFlagMask(int nFlag); inline const char *GetFlagCaption(int nFlag); inline int GetChoiceCount() { return m_Items.Count(); } inline const char *GetChoiceCaption(int nChoice); inline GDIV_TYPE GetType() { return m_eType; } const char *GetTypeText(void); inline void GetDefault(int *pnStore) { pnStore[0] = m_nDefault; } inline void GetDefault(char *pszStore) { strcpy(pszStore, m_szDefault); } GDIV_TYPE GetTypeFromToken(const char *pszToken); trtoken_t GetStoreAsFromType(GDIV_TYPE eType); const char *ItemStringForValue(const char *szValue); const char *ItemValueForString(const char *szString); BOOL IsFlagSet(unsigned int); void SetFlag(unsigned int, BOOL bSet); void ResetDefaults(); void ToKeyValue(MDkeyvalue* pkv); void FromKeyValue(MDkeyvalue* pkv); inline bool IsReportable(void); inline bool IsReadOnly(void); GDinputvariable &operator =(GDinputvariable &Other); void Merge(GDinputvariable &Other); static const char *GetVarTypeName( GDIV_TYPE eType ); private: // for choices/flags: CUtlVector m_Items; static char *m_pszEmpty; char m_szName[MAX_IDENT]; char m_szLongName[MAX_STRING]; char *m_pszDescription; GDIV_TYPE m_eType; int m_nDefault; char m_szDefault[MAX_STRING]; int m_nValue; char m_szValue[MAX_STRING]; bool m_bReportable; bool m_bReadOnly; friend class GDclass; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- const char *GDinputvariable::GetDescription(void) { if (m_pszDescription != NULL) { return(m_pszDescription); } return(m_pszEmpty); } //----------------------------------------------------------------------------- // Purpose: Returns whether or not this variable is read only. Read only variables // cannot be edited in the Entity Properties dialog. //----------------------------------------------------------------------------- bool GDinputvariable::IsReadOnly(void) { return(m_bReadOnly); } //----------------------------------------------------------------------------- // Purpose: Returns whether or not this variable should be displayed in the Entity // Report dialog. //----------------------------------------------------------------------------- bool GDinputvariable::IsReportable(void) { return(m_bReportable); } //----------------------------------------------------------------------------- // Returns the flag mask (eg 4096) for the flag at the given index. The // array is packed, so it isn't just 1 >> nFlag. //----------------------------------------------------------------------------- int GDinputvariable::GetFlagMask(int nFlag) { Assert(m_eType == ivFlags); return m_Items.Element(nFlag).iValue; } //----------------------------------------------------------------------------- // Returns the caption text (eg "Only break on trigger") for the flag at the given index. //----------------------------------------------------------------------------- const char *GDinputvariable::GetFlagCaption(int nFlag) { Assert(m_eType == ivFlags); return m_Items.Element(nFlag).szCaption; } //----------------------------------------------------------------------------- // Returns the caption text (eg "Yes") for the choice at the given index. //----------------------------------------------------------------------------- const char *GDinputvariable::GetChoiceCaption(int nChoice) { Assert(m_eType == ivChoices); return m_Items.Element(nChoice).szCaption; } #endif // GDVAR_H