1 #ifndef __GNUC__ 2 #pragma once 3 #endif 4 #ifndef __XR_LEVEL_GCT_H__ 5 #define __XR_LEVEL_GCT_H__ 6 7 #include "xr_ai_cross_table.h" 8 9 namespace xray_re { 10 11 enum { 12 GCT_CHUNK_HEADER = 0, 13 GCT_CHUNK_CELLS = 1, 14 }; 15 16 class xr_level_gct { 17 public: 18 xr_level_gct(); 19 xr_level_gct(const xr_level_gct& that); 20 virtual ~xr_level_gct(); 21 22 void clear(); 23 24 void load(xr_reader& r); 25 void save(xr_writer& w) const; 26 void load_v9(xr_reader& r); 27 void save_v9(xr_writer& w) const; 28 bool load(const char* path, const char* name); 29 bool save(const char* path, const char* name) const; 30 31 uint32_t& version(); 32 uint32_t version() const; 33 const xr_guid& level_guid() const; 34 const xr_guid& game_guid() const; 35 uint32_t num_nodes() const; 36 uint32_t num_graph_points() const; 37 gct_cell* cells(); 38 const gct_cell* cells() const; 39 uint16_t graph_id(uint32_t node_id) const; 40 41 protected: 42 uint32_t m_version; 43 uint32_t m_num_nodes; 44 uint32_t m_num_graph_points; 45 xr_guid m_level_guid; 46 xr_guid m_game_guid; 47 gct_cell* m_cells; 48 }; 49 version()50inline uint32_t& xr_level_gct::version() { return m_version; } version()51inline uint32_t xr_level_gct::version() const { return m_version; } level_guid()52inline const xr_guid& xr_level_gct::level_guid() const { return m_level_guid; } game_guid()53inline const xr_guid& xr_level_gct::game_guid() const { return m_game_guid; } num_nodes()54inline uint32_t xr_level_gct::num_nodes() const { return m_num_nodes; } num_graph_points()55inline uint32_t xr_level_gct::num_graph_points() const { return m_num_graph_points; } cells()56inline gct_cell* xr_level_gct::cells() { return m_cells; } cells()57inline const gct_cell* xr_level_gct::cells() const { return m_cells; } 58 graph_id(uint32_t node_id)59inline uint16_t xr_level_gct::graph_id(uint32_t node_id) const 60 { 61 return (node_id < m_num_nodes) ? 62 m_cells[node_id].graph_id : AI_GRAPH_BAD_VERTEX; 63 } 64 65 } // end of namespace xray_re 66 67 #endif 68