diff options
Diffstat (limited to 'public/fgdlib/gdvar.h')
| -rw-r--r-- | public/fgdlib/gdvar.h | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/public/fgdlib/gdvar.h b/public/fgdlib/gdvar.h new file mode 100644 index 0000000..197ff30 --- /dev/null +++ b/public/fgdlib/gdvar.h @@ -0,0 +1,219 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef GDVAR_H +#define GDVAR_H +#pragma once + +#include <utlvector.h> +#include <TokenReader.h> // 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<GDIVITEM> 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 |