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()50 inline uint32_t& xr_level_gct::version() { return m_version; }
version()51 inline uint32_t xr_level_gct::version() const { return m_version; }
level_guid()52 inline const xr_guid& xr_level_gct::level_guid() const { return m_level_guid; }
game_guid()53 inline const xr_guid& xr_level_gct::game_guid() const { return m_game_guid; }
num_nodes()54 inline uint32_t xr_level_gct::num_nodes() const { return m_num_nodes; }
num_graph_points()55 inline uint32_t xr_level_gct::num_graph_points() const { return m_num_graph_points; }
cells()56 inline gct_cell* xr_level_gct::cells() { return m_cells; }
cells()57 inline const gct_cell* xr_level_gct::cells() const { return m_cells; }
58 
graph_id(uint32_t node_id)59 inline 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