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.
241 lines
5.7 KiB
241 lines
5.7 KiB
//========= 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
|
|
|