1 #include "xr_ai_version.h"
2 #include "xr_game_graph.h"
3 #include "xr_file_system.h"
4 #include "xr_utils.h"
5 
6 using namespace xray_re;
7 
~xr_game_graph()8 xr_game_graph::~xr_game_graph()
9 {
10 	delete_elements(m_cross_tables);
11 }
12 
load(xr_reader & r)13 void xr_game_graph::load(xr_reader& r)
14 {
15 	xr_level_graph::load(r);
16 	if (m_version == AI_VERSION_8) {
17 		xr_assert(m_num_death_points);
18 		xr_assert(r.elapsed() == 4*m_num_levels);
19 		r.advance(r.elapsed());
20 	} else if (m_version == AI_VERSION_9 || m_version == AI_VERSION_10) {
21 		m_cross_tables.reserve(m_num_levels);
22 		for (gg_level *it = m_levels, *end = it + m_num_levels; it != end; ++it) {
23 			xr_level_gct* gct = new xr_level_gct;
24 			gct->load_v9(r);
25 			xr_assert(gct->version() == m_version);
26 			xr_assert(gct->level_guid() == it->guid);
27 			xr_assert(gct->game_guid() == m_guid);
28 			m_cross_tables.push_back(gct);
29 		}
30 		xr_assert(r.elapsed() == 0);
31 	}
32 }
33 
save(xr_writer & w) const34 void xr_game_graph::save(xr_writer& w) const
35 {
36 	xr_level_graph::save(w);
37 	if (m_version == AI_VERSION_8) {
38 		xr_assert(m_num_death_points);
39 		for (uint_fast32_t i = m_num_levels; i != 0; --i)
40 			w.w_u32(sizeof(uint32_t));
41 	} else if (m_version == AI_VERSION_9 || m_version == AI_VERSION_10) {
42 		for (xr_level_gct_vec_cit it = m_cross_tables.begin(),
43 				end = m_cross_tables.end(); it != end; ++it) {
44 			if (const xr_level_gct* gct = *it)
45 				gct->save_v9(w);
46 			else
47 				w.w_u32(sizeof(uint32_t));
48 		}
49 	}
50 }
51 
load(const char * path,const char * name)52 bool xr_game_graph::load(const char* path, const char* name)
53 {
54 	xr_file_system& fs = xr_file_system::instance();
55 	xr_reader* r = fs.r_open(path, name);
56 	if (r == 0)
57 		return false;
58 	load(*r);
59 	fs.r_close(r);
60 	return true;
61 }
62 
save(const char * path,const char * name) const63 bool xr_game_graph::save(const char* path, const char* name) const
64 {
65 	xr_file_system& fs = xr_file_system::instance();
66 	xr_writer* w = fs.w_open(path, name);
67 	if (w == 0)
68 		return false;
69 	save(*w);
70 	fs.w_close(w);
71 	return true;
72 }
73