1 #ifndef __GNUC__
2 #pragma once
3 #endif
4 #ifndef __XR_LEVEL_GLOWS_H__
5 #define __XR_LEVEL_GLOWS_H__
6 
7 #include <vector>
8 #include "xr_vector3.h"
9 
10 namespace xray_re {
11 
12 // xrLC v5, v8
13 struct fsl_glow_v5 {
14 	fvector3	position;
15 	float		radius;
16 	uint32_t	texture_id;
17 	uint32_t	shader_id;
18 };
19 
20 // xrLC v13+
21 #pragma pack(push, 1)
22 struct fsl_glow_v13 {
23 	fvector3	position;
24 	float		radius;
25 	uint16_t	shader_texture_id;
26 };
27 #pragma pack(pop)
28 
29 // in-memory structure
30 struct glow_data {
31 	fvector3	position;
32 	float		radius;
33 	uint16_t	shader_id;
34 	uint16_t	texture_id;
35 };
36 
37 TYPEDEF_STD_VECTOR_PTR(glow_data)
38 
39 class xr_reader;
40 class xr_writer;
41 
42 class xr_level_glows {
43 public:
44 			xr_level_glows(uint32_t xrlc_version, xr_reader& r);
45 	virtual		~xr_level_glows();
46 
47 	void		load(uint32_t xrlc_version, xr_reader& r);
48 	void		save(xr_writer& w) const;
49 
50 	const glow_data_vec&	glows() const;
51 
52 private:
53 	void		load_v5(xr_reader& r);
54 	void		load_v13(xr_reader& r);
55 
56 private:
57 	glow_data_vec	m_glows;
58 };
59 
xr_level_glows(uint32_t xrlc_version,xr_reader & r)60 inline xr_level_glows::xr_level_glows(uint32_t xrlc_version, xr_reader& r)
61 {
62 	load(xrlc_version, r);
63 }
64 
glows()65 inline const glow_data_vec& xr_level_glows::glows() const { return m_glows; }
66 
67 } // end of namespace xray_re
68 
69 #endif
70