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/visgroup.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/visgroup.h')
| -rw-r--r-- | hammer/visgroup.h | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/hammer/visgroup.h b/hammer/visgroup.h new file mode 100644 index 0000000..795b486 --- /dev/null +++ b/hammer/visgroup.h @@ -0,0 +1,241 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef VISGROUP_H +#define VISGROUP_H +#pragma once + + +#include "BaseTypes.h" +#include "utlvector.h" + + +class CChunkFile; +class CSaveInfo; +class CMapDoc; + +struct LoadVisGroupData_t; + + +enum ChunkFileResult_t; + + +enum VisGroupState_t +{ + VISGROUP_UNDEFINED = -1, // Used for initialization when updating state + VISGROUP_HIDDEN, // All members are currently hidden + VISGROUP_SHOWN, // All members are currently shown + VISGROUP_PARTIAL, // Some members are currently hidden, some are shown +}; + + +class CVisGroup +{ + public: + + CVisGroup(void); + + inline unsigned int GetID(void) { return(m_dwID); } + inline void SetID(unsigned int dwID) { m_dwID = dwID; } + + inline const char *GetName(void) + { + return(m_szName); + } + + inline void SetName(const char *pszName) + { + if (pszName != NULL) + { + strncpy(m_szName, pszName, sizeof(m_szName)); + } + } + + inline color32 GetColor(void); + inline void SetColor(color32 rgbColor); + inline void SetColor(unsigned char red, unsigned char green, unsigned char blue); + + inline CVisGroup *GetParent(void); + inline void SetParent(CVisGroup *pNewParent); + + inline int GetChildCount(void); + inline CVisGroup *GetChild(int nIndex); + + void AddChild(CVisGroup *pChild); + void RemoveChild(CVisGroup *pChild); + + bool FindDescendent(CVisGroup *pGroup); + + void MoveUp(CVisGroup *pChild); + void MoveDown(CVisGroup *pChild); + + bool CanMoveUp(CVisGroup *pChild); + bool CanMoveDown(CVisGroup *pChild); + + VisGroupState_t GetVisible(void); + void VisGroups_UpdateParent( VisGroupState_t state ); + inline void SetVisible(VisGroupState_t eVisible) { m_eVisible = eVisible; } + + static bool IsShowAllActive(void); + static void ShowAllVisGroups(bool bShow); + + // + // Serialization. + // + ChunkFileResult_t LoadVMF(CChunkFile *pFile, CMapDoc *pDoc); + ChunkFileResult_t SaveVMF(CChunkFile *pFile, CSaveInfo *pSaveInfo); + + static ChunkFileResult_t LoadVisGroupCallback(CChunkFile *pFile, LoadVisGroupData_t *pLoadData); + static ChunkFileResult_t LoadVisGroupsCallback(CChunkFile *pFile, CMapDoc *pDoc); + + static bool IsConvertingOldVisGroups(); + + bool IsAutoVisGroup(void); + void SetAuto( bool bAuto ); + + protected: + + CUtlVector<CVisGroup *> m_Children; + CVisGroup *m_pParent; + + bool m_bIsAuto; + + static ChunkFileResult_t LoadKeyCallback(const char *szKey, const char *szValue, CVisGroup *pGroup); + + static bool s_bShowAll; + static bool s_bIsConvertingOldVisGroups; + + char m_szName[128]; + color32 m_rgbColor; + + unsigned int m_dwID; + VisGroupState_t m_eVisible; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Returns the render color of this visgroup. +//----------------------------------------------------------------------------- +inline color32 CVisGroup::GetColor(void) +{ + return m_rgbColor; +} + + +//----------------------------------------------------------------------------- +// Purpose: Sets the color of this visgroup. +//----------------------------------------------------------------------------- +inline void CVisGroup::SetColor(color32 rgbColor) +{ + m_rgbColor = rgbColor; +} + + +//----------------------------------------------------------------------------- +// Purpose: Sets the color of this visgroup using RGB values. +//----------------------------------------------------------------------------- +inline void CVisGroup::SetColor(unsigned char red, unsigned char green, unsigned char blue) +{ + m_rgbColor.r = red; + m_rgbColor.g = green; + m_rgbColor.b = blue; + m_rgbColor.a = 0; +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns the number of visgroups that are children of this visgroup. +//----------------------------------------------------------------------------- +inline int CVisGroup::GetChildCount(void) +{ + return m_Children.Count(); +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns the given child visgroup. +//----------------------------------------------------------------------------- +inline CVisGroup *CVisGroup::GetChild(int nIndex) +{ + return m_Children.Element(nIndex); +} + + +//----------------------------------------------------------------------------- +// Purpose: Returns this visgroup's parent in the hierarchy. +//----------------------------------------------------------------------------- +inline CVisGroup *CVisGroup::GetParent(void) +{ + return m_pParent; +} + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +inline void CVisGroup::SetParent(CVisGroup *pNewParent) +{ + m_pParent = pNewParent; +} + + +//----------------------------------------------------------------------------- +// A list of visgroups. +//----------------------------------------------------------------------------- +class CVisGroupList +{ +public: + + inline int AddToTail(CVisGroup *pVisGroup); + inline int Count(void); + inline CVisGroup *Element(int nElement); + inline int Find(CVisGroup *pVisGroup); + inline void FastRemove(int nElement); + inline void RemoveAll(void); + +private: + + CUtlVector<CVisGroup *> m_List; +}; + + +int CVisGroupList::AddToTail(CVisGroup *pVisGroup) +{ + return m_List.AddToTail(pVisGroup); +} + + +int CVisGroupList::Count(void) +{ + return m_List.Count(); +} + + +CVisGroup *CVisGroupList::Element(int nElement) +{ + return m_List.Element(nElement); +} + + +int CVisGroupList::Find(CVisGroup *pVisGroup) +{ + return m_List.Find(pVisGroup); +} + + +inline void CVisGroupList::FastRemove(int nElement) +{ + m_List.FastRemove(nElement); +} + + +inline void CVisGroupList::RemoveAll(void) +{ + m_List.RemoveAll(); +} + + +#endif // VISGROUP_H |