//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #pragma once #pragma warning(push, 1) #pragma warning(disable:4701 4702 4530) #include #pragma warning(pop) #include "fgdlib/WCKeyValues.h" #include "mathlib/vector.h" class BoundBox; class CMapEntity; class Path3D; class CMapPathNode { public: CMapPathNode(); CMapPathNode(const CMapPathNode& src); char szName[128]; // if blank, use default Vector pos; DWORD dwID; BOOL bSelected; char szTargets[2][128]; // resolved when saving to map - not used otherwise int nTargets; // other values WCKeyValues kv; CMapPathNode& operator=(const CMapPathNode& src); }; class CMapPath { friend Path3D; public: CMapPath(); ~CMapPath(); enum { ADD_START = 0xfffffff0L, ADD_END = 0xfffffff1L }; DWORD AddNode(DWORD dwAfterID, const Vector &vecPos); void DeleteNode(DWORD dwID); void SetNodePosition(DWORD dwID, Vector& pt); CMapPathNode * NodeForID(DWORD dwID, int* piIndex = NULL); void GetNodeName(int iIndex, int iName, CString& str); // set name/class void SetName(LPCTSTR pszName) { V_strcpy_safe(m_szName, pszName); } LPCTSTR GetName() { return m_szName; } void SetClass(LPCTSTR pszClass) { V_strcpy_safe(m_szClass, pszClass); } LPCTSTR GetClass() { return m_szClass; } void EditInfo(); // save/load to/from RMF: void SerializeRMF(std::fstream&, BOOL fIsStoring); // save to map: (no load!!) void SerializeMAP(std::fstream&, BOOL fIsStoring, BoundBox *pIntersecting = NULL); //void SaveVMF(CChunkFile *pFile, CSaveInfo *pSaveInfo); //void LoadVMF(CChunkFile *pFile); CMapEntity *CreateEntityForNode(DWORD dwNodeID); void CopyNodeFromEntity(DWORD dwNodeID, CMapEntity *pEntity); // directions enum { dirOneway, dirCircular, dirPingpong }; int GetNodeCount() { return m_Nodes.Count(); } private: // nodes + number of: CUtlVector m_Nodes; DWORD GetNewNodeID(); // name: char m_szName[128]; char m_szClass[128]; int m_iDirection; };