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.
219 lines
5.8 KiB
219 lines
5.8 KiB
//========= 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
|
|
|