1 #include "xr_level_version.h"
2 #include "xr_level_portals.h"
3 #include "xr_reader.h"
4 #include "xr_writer.h"
5 #include "xr_utils.h"
6 
7 using namespace xray_re;
8 
~xr_level_portals()9 xr_level_portals::~xr_level_portals()
10 {
11 	delete_elements(m_portals);
12 }
13 
operator ()read_portal_v514 struct read_portal_v5 { void operator()(portal_data*& _portal, xr_reader& r) const {
15 	portal_data* portal = new portal_data;
16 	_portal = portal;
17 	portal->sector_front = r.r_u16();
18 	portal->sector_back = r.r_u16();
19 	portal->vertices.count = r.r_u32();
20 	for (uint_fast32_t i = 0; i != 6; ++i)
21 		r.r_fvector3(portal->vertices.array[i]);
22 }};
23 
load_v5(xr_reader & r)24 void xr_level_portals::load_v5(xr_reader& r)
25 {
26 	xr_assert(r.size() % sizeof(fsl_portal_v5) == 0);
27 	r.r_seq(r.size()/sizeof(fsl_portal_v5), m_portals, read_portal_v5());
28 }
29 
operator ()read_portal_v830 struct read_portal_v8 { void operator()(portal_data*& _portal, xr_reader& r) const {
31 	portal_data* portal = new portal_data;
32 	_portal = portal;
33 	portal->sector_front = r.r_u16();
34 	portal->sector_back = r.r_u16();
35 	for (uint_fast32_t i = 0; i != 6; ++i)
36 		r.r_fvector3(portal->vertices.array[i]);
37 	portal->vertices.count = r.r_u32();
38 }};
39 
load_v8(xr_reader & r)40 void xr_level_portals::load_v8(xr_reader& r)
41 {
42 	xr_assert(r.size() % sizeof(fsl_portal_v8) == 0);
43 	r.r_seq(r.size()/sizeof(fsl_portal_v8), m_portals, read_portal_v8());
44 }
45 
load(uint32_t xrlc_version,xr_reader & r)46 void xr_level_portals::load(uint32_t xrlc_version, xr_reader& r)
47 {
48 	xr_reader* s = 0;
49 	if (xrlc_version == XRLC_VERSION_5) {
50 		s = r.open_chunk(FSL5_PORTALS);
51 		if (s)
52 			load_v5(*s);
53 	} else {
54 		if (xrlc_version <= XRLC_VERSION_9)
55 			s = r.open_chunk(FSL8_PORTALS);
56 		else if (xrlc_version >= XRLC_VERSION_12)
57 			s = r.open_chunk(FSL13_PORTALS);
58 		if (s)
59 			load_v8(*s);
60 	}
61 	r.close_chunk(s);
62 }
63 
save(xr_writer & w) const64 void xr_level_portals::save(xr_writer& w) const
65 {
66 }
67