1 #ifndef __GNUC__
2 #pragma once
3 #endif
4 #ifndef __XR_LEVEL_DETAILS_H__
5 #define __XR_LEVEL_DETAILS_H__
6 
7 #include <vector>
8 #include "xr_details.h"
9 
10 namespace xray_re {
11 
12 class xr_reader;
13 class xr_writer;
14 class xr_image;
15 class xr_dm;
16 
17 class xr_level_details {
18 public:
19 				xr_level_details();
20 				xr_level_details(xr_reader& r);
21 	virtual			~xr_level_details();
22 
23 	bool			load_texture(const char* path);
24 
25 	details_header&			header();
26 	const details_header&		header() const;
27 	uint32_t			num_slots() const;
28 	detail_slot_v3*&		slots();
29 	const detail_slot_v3*		slots() const;
30 	std::vector<xr_dm*>&		models();
31 	const std::vector<xr_dm*>&	models() const;
32 	const xr_image*			texture() const;
33 	const uint8_t*			raw_texture() const;
34 	const size_t			raw_texture_size() const;
35 
36 protected:
37 	void			load(xr_reader& r);
38 	void			save(xr_writer& w) const;
39 
40 private:
41 	details_header		m_header;
42 	detail_slot_v3*		m_slots;
43 	std::vector<xr_dm*>	m_models;
44 	xr_image*		m_texture;
45 	size_t			m_raw_texture_size;
46 	uint8_t*		m_raw_texture;
47 };
48 
xr_level_details()49 inline xr_level_details::xr_level_details():
50 	m_slots(0), m_texture(0), m_raw_texture(0) {}
xr_level_details(xr_reader & r)51 inline xr_level_details::xr_level_details(xr_reader& r):
52 	m_slots(0), m_texture(0), m_raw_texture(0) { load(r); }
header()53 inline details_header& xr_level_details::header() { return m_header; }
header()54 inline const details_header& xr_level_details::header() const { return m_header; }
num_slots()55 inline uint32_t xr_level_details::num_slots() const { return m_header.size_x*m_header.size_z; }
slots()56 inline detail_slot_v3*& xr_level_details::slots() { return m_slots; }
slots()57 inline const detail_slot_v3* xr_level_details::slots() const { return m_slots; }
models()58 inline std::vector<xr_dm*>& xr_level_details::models() { return m_models; }
models()59 inline const std::vector<xr_dm*>& xr_level_details::models() const { return m_models; }
texture()60 inline const xr_image* xr_level_details::texture() const { return m_texture; }
raw_texture()61 inline const uint8_t* xr_level_details::raw_texture() const { return m_raw_texture; }
raw_texture_size()62 inline const size_t xr_level_details::raw_texture_size() const { return m_raw_texture_size; }
63 
64 } // end of namespace xray_re
65 
66 #endif
67