summaryrefslogtreecommitdiff
path: root/hammer/mapsidelist.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/mapsidelist.h')
-rw-r--r--hammer/mapsidelist.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/hammer/mapsidelist.h b/hammer/mapsidelist.h
new file mode 100644
index 0000000..9620117
--- /dev/null
+++ b/hammer/mapsidelist.h
@@ -0,0 +1,111 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Implements a helper that manages a single keyvalue of type "side"
+// or "sidelist" for the entity that is its parent.
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef MAPSIDELIST_H
+#define MAPSIDELIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "MapFace.h"
+#include "MapHelper.h"
+
+
+class CHelperInfo;
+class CMapEntity;
+class CMapSolid;
+
+
+class CMapSideList : public CMapHelper
+{
+ public:
+
+ //
+ // Factory function.
+ //
+ static CMapClass *CreateMapSideList(CHelperInfo *pHelperInfo, CMapEntity *pParent);
+
+ //
+ // Construction/destruction:
+ //
+ CMapSideList(void);
+ CMapSideList(char const *pszKeyName);
+ virtual ~CMapSideList(void);
+ DECLARE_MAPCLASS(CMapSideList,CMapHelper)
+
+ public:
+
+ virtual size_t GetSize(void);
+
+ //
+ // Replication.
+ //
+ virtual CMapClass *Copy(bool bUpdateDependencies);
+ virtual CMapClass *CopyFrom(CMapClass *pOther, bool bUpdateDependencies);
+
+ //
+ // Should NOT have children.
+ //
+ virtual void AddChild(CMapClass *pChild) { Assert(false); }
+ virtual void UpdateChild(CMapClass *pChild) { Assert(false); }
+
+ //
+ // Notifications.
+ //
+ virtual void OnClone(CMapClass *pClone, CMapWorld *pWorld, const CMapObjectList &OriginalList, CMapObjectList &NewList);
+ virtual void OnNotifyDependent(CMapClass *pObject, Notify_Dependent_t eNotifyType);
+ virtual void OnParentKeyChanged(const char* key, const char* value);
+ virtual void OnPaste(CMapClass *pCopy, CMapWorld *pSourceWorld, CMapWorld *pDestWorld, const CMapObjectList &OriginalList, CMapObjectList &NewList);
+ virtual void OnRemoveFromWorld(CMapWorld *pWorld, bool bNotifyChildren);
+
+ //
+ // Spatial functions.
+ //
+ virtual void CalcBounds(BOOL bFullUpdate = FALSE);
+
+ virtual const char* GetDescription(void) { return "Side list helper"; }
+
+ //
+ // Serialization.
+ //
+ virtual bool ShouldSerialize(void) { return(false); }
+
+ //
+ // Can be rendered:
+ //
+ virtual void Render2D(CRender2D *pRender);
+ virtual void Render3D(CRender3D *pRender);
+
+ //
+ // Getting face data.
+ //
+ int GetFaceCount( void ) { return m_Faces.Count(); }
+ CMapFace *GetFace( int index ) { return m_Faces.Element( index ); }
+
+ const char *GetKeyName( void ) { return m_szKeyName; }
+
+ protected:
+
+ virtual void UpdateDependencies(CMapWorld *pWorld, CMapClass *pObject);
+
+ void RebuildFaceList();
+ void BuildFaceListForValue(char const *pszValue, CMapWorld *pWorld);
+ CMapFace *FindFaceIDInList(int nFaceID, const CMapObjectList &List);
+ void ReplaceFacesInCopy(CMapSideList *pCopy, const CMapObjectList &OriginalList, CMapObjectList &NewList);
+ bool ReplaceSolidFaces(CMapSolid *pOrigSolid, CMapSolid *pNewSolid);
+ void RemoveFacesNotInList(const CMapObjectList &List);
+ void UpdateParentKey(void);
+
+ char m_szKeyName[80]; // The name of the key in our parent entity that we represent.
+ CMapFaceList m_Faces; // The list of solid faces that this object manages.
+ CUtlVector<int> m_LostFaceIDs; // The list of face IDs that were in m_Faces, but were lost during this session through the deletion of their solid.
+};
+
+
+#endif // MAPSIDELIST_H