diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/editgameclass.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/editgameclass.h')
| -rw-r--r-- | hammer/editgameclass.h | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/hammer/editgameclass.h b/hammer/editgameclass.h new file mode 100644 index 0000000..6c547e2 --- /dev/null +++ b/hammer/editgameclass.h @@ -0,0 +1,234 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#ifndef EDITGAMECLASS_H +#define EDITGAMECLASS_H +#pragma once + +#pragma warning(push, 1) +#pragma warning(disable:4701 4702 4530) +#include <fstream> +#pragma warning(pop) +#include "BlockArray.h" +#include "fgdlib/fgdlib.h" +#include "fgdlib/WCKeyValues.h" +#include "EntityConnection.h" + + +#define MAX_CLASS_NAME_LEN 64 + + +class CChunkFile; +class CMapClass; +class CSaveInfo; + + +enum ChunkFileResult_t; + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +class CEditGameClass +{ + public: + + CEditGameClass(void); + ~CEditGameClass(void); + + inline bool IsClass(const char *pszClass = NULL); + inline GDclass *GetClass(void) { return(m_pClass); } + inline void SetClass(GDclass *pClass) { m_pClass = pClass; } + inline const char* GetClassName(void) { return(m_szClass); } + inline bool IsKeyFrameClass(void) { return((m_pClass != NULL) && (m_pClass->IsKeyFrameClass())); } + inline bool IsMoveClass(void) { return((m_pClass != NULL) && (m_pClass->IsMoveClass())); } + inline bool IsPointClass(void) { return((m_pClass != NULL) && (m_pClass->IsPointClass())); } + inline bool IsNPCClass(void) { return((m_pClass != NULL) && (m_pClass->IsNPCClass())); } + inline bool IsFilterClass(void) { return((m_pClass != NULL) && (m_pClass->IsFilterClass())); } + inline bool IsSolidClass(void) { return((m_pClass != NULL) && (m_pClass->IsSolidClass())); } + inline bool IsNodeClass(void) { return((m_pClass != NULL) && (m_pClass->IsNodeClass())); } + static inline bool IsNodeClass(const char *pszClassName) { return GDclass::IsNodeClass(pszClassName); } + + // + // Interface to key/value information: + // + virtual void SetKeyValue(LPCTSTR pszKey, LPCTSTR pszValue) { m_KeyValues.SetValue(pszKey, pszValue); } + virtual void DeleteKeyValue(LPCTSTR pszKey) { m_KeyValues.RemoveKey(pszKey); } + + inline void RemoveKey(int nIndex) { m_KeyValues.RemoveKeyAt(nIndex); } + inline void SetKeyValue(LPCTSTR pszKey, int iValue) { m_KeyValues.SetValue(pszKey, iValue); } + inline LPCTSTR GetKey(int nIndex) { return(m_KeyValues.GetKey(nIndex)); } + inline LPCTSTR GetKeyValue(int nIndex) { return(m_KeyValues.GetValue(nIndex)); } + inline LPCTSTR GetKeyValue(LPCTSTR pszKey, int *piIndex = NULL) { return(m_KeyValues.GetValue(pszKey, piIndex)); } + + // Iterate the list of keyvalues. + inline int GetFirstKeyValue() const { return m_KeyValues.GetFirst(); } + inline int GetNextKeyValue( int i ) const { return m_KeyValues.GetNext( i ); } + static inline int GetInvalidKeyValue() { return WCKeyValues::GetInvalidIndex(); } + + // + // Interface to spawnflags. + // + bool GetSpawnFlag(unsigned long nFlag); + unsigned long GetSpawnFlags(void); + void SetSpawnFlag(unsigned long nFlag, bool bSet); + void SetSpawnFlags(unsigned long nFlags); + + // + // Interface to entity connections. + // + void Connections_Add(CEntityConnection *pConnection); + inline int Connections_GetCount(void); + inline CEntityConnection *Connections_Get(int nIndex); + bool Connections_Remove(CEntityConnection *pConnection); + void Connections_RemoveAll(void); + void Connections_FixBad(bool bRelink = true); + + // + // Interface to entity connections. + // + void Upstream_Add(CEntityConnection *pConnection); + inline int Upstream_GetCount(void); + inline CEntityConnection *Upstream_Get(int nIndex); + bool Upstream_Remove(CEntityConnection *pConnection); + void Upstream_RemoveAll(void); + void Upstream_FixBad(); + + // + // Interface to comments. + // + inline const char *GetComments(void); + inline void SetComments(const char *pszComments); + + // + // Serialization functions. + // + static ChunkFileResult_t LoadConnectionsCallback(CChunkFile *pFile, CEditGameClass *pEditGameClass); + static ChunkFileResult_t LoadKeyCallback(const char *szKey, const char *szValue, CEditGameClass *pEditGameClass); + + ChunkFileResult_t SaveVMF(CChunkFile *pFile, CSaveInfo *pSaveInfo); + + int SerializeRMF(std::fstream&, BOOL); + int SerializeMAP(std::fstream&, BOOL); + + virtual void SetClass(LPCTSTR pszClassname, bool bLoading = false); + CEditGameClass *CopyFrom(CEditGameClass *pFrom); + void GetDefaultKeys( void ); + + virtual void SetAngles(const QAngle &vecAngles); + virtual void GetAngles(QAngle &vecAngles); + + // Import the old-style yaw only representation of orientation. + void ImportAngle(int nAngle); + + protected: + + WCKeyValues m_KeyValues; + GDclass *m_pClass; + char m_szClass[MAX_CLASS_NAME_LEN]; + char *m_pszComments; // Comments text, dynamically allocated. + + static char *g_pszEmpty; + + CEntityConnectionList m_Connections; + CEntityConnectionList m_Upstream; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Returns the number of input/output connections that this object has. +//----------------------------------------------------------------------------- +int CEditGameClass::Connections_GetCount(void) +{ + return m_Connections.Count(); +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns the number of input/output connections that this object has. +//----------------------------------------------------------------------------- +CEntityConnection *CEditGameClass::Connections_Get(int nIndex) +{ + return m_Connections.Element(nIndex); +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns the number of input/output connections that this object has. +//----------------------------------------------------------------------------- +int CEditGameClass::Upstream_GetCount(void) +{ + return m_Upstream.Count(); +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns the number of input/output connections that this object has. +//----------------------------------------------------------------------------- +CEntityConnection *CEditGameClass::Upstream_Get(int nIndex) +{ + return m_Upstream.Element(nIndex); +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns the comments text, NULL if none have been set. +//----------------------------------------------------------------------------- +const char *CEditGameClass::GetComments(void) +{ + if (m_pszComments == NULL) + { + return(g_pszEmpty); + } + + return(m_pszComments); +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Input : NULL - +// Output : inline bool +//----------------------------------------------------------------------------- +inline bool CEditGameClass::IsClass(const char *pszClass) +{ + if (pszClass == NULL) + { + return(m_pClass != NULL); + } + return((m_pClass != NULL) && (!stricmp(pszClass, m_szClass))); +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Input : pszComments - +//----------------------------------------------------------------------------- +void CEditGameClass::SetComments(const char *pszComments) +{ + delete m_pszComments; + + if (pszComments != NULL) + { + int nLen = strlen(pszComments); + if (nLen == 0) + { + m_pszComments = NULL; + } + else + { + m_pszComments = new char [nLen + 1]; + strcpy(m_pszComments, pszComments); + } + } + else + { + m_pszComments = NULL; + } +} + + +#endif // EDITGAMECLASS_H |