1 #include "xr_level_snd_static.h"
2 #include "xr_reader.h"
3 #include "xr_writer.h"
4 #include "xr_ini_file.h"
5 #include "xr_utils.h"
6
7 using namespace xray_re;
8
~xr_level_snd_static()9 xr_level_snd_static::~xr_level_snd_static()
10 {
11 delete_elements(m_sound_srcs);
12 }
13
operator ()read_sound_src14 struct read_sound_src { void operator()(sound_src_data*& _sound_src, xr_reader& r) const {
15 sound_src_data* sound_src = new sound_src_data;
16 _sound_src = sound_src;
17 bool compressed;
18 size_t size = r.find_chunk(0, &compressed);
19 xr_assert(size && !compressed);
20 r.r_sz(sound_src->name);
21 r.r_fvector3(sound_src->position);
22 sound_src->volume = r.r_float();
23 sound_src->freq = r.r_float();
24 r.r_i32vector2(sound_src->active_time);
25 r.r_i32vector2(sound_src->play_time);
26 r.r_i32vector2(sound_src->pause_time);
27 }};
28
load(xr_reader & r)29 void xr_level_snd_static::load(xr_reader& r)
30 {
31 r.r_chunks(m_sound_srcs, read_sound_src());
32 }
33
load(const xr_ini_file & ini)34 void xr_level_snd_static::load(const xr_ini_file& ini)
35 {
36 if (!ini.section_exist("static_sounds"))
37 return;
38 m_sound_srcs.reserve(ini.line_count("static_sounds"));
39 const char* value;
40 for (size_t i = 0; ini.r_line("static_sounds", i, 0, &value); ++i) {
41 char snd_name[128];
42 float x, y, z;
43 #if defined(_MSC_VER) && _MSC_VER >= 1400
44 if (4 == sscanf_s(value, "%s,%f,%f,%f", snd_name, sizeof(snd_name), &x, &y, &z)) {
45 #else
46 // FIXME!!!
47 if (4 == sscanf(value, "%s,%f,%f,%f", snd_name, &x, &y, &z)) {
48 #endif
49 sound_src_data* sound_src = new sound_src_data;
50 sound_src->name = snd_name;
51 sound_src->position.set(x, y, z);
52 sound_src->volume = 1.f;
53 sound_src->freq = 1.f;
54 sound_src->active_time.set(0, 0);
55 sound_src->play_time.set(0, 0);
56 sound_src->pause_time.set(0, 0);
57 m_sound_srcs.push_back(sound_src);
58 }
59 }
60 }
61
62 struct write_sound_src { void operator()(const sound_src_data* sound_src, xr_writer& w) const {
63 w.open_chunk(0);
64 w.w_sz(sound_src->name);
65 w.w_fvector3(sound_src->position);
66 w.w_float(sound_src->volume);
67 w.w_float(sound_src->freq);
68 w.w_i32vector2(sound_src->active_time);
69 w.w_i32vector2(sound_src->play_time);
70 w.w_i32vector2(sound_src->pause_time);
71 }};
72
73 void xr_level_snd_static::save(xr_writer& w) const
74 {
75 w.w_chunks(m_sound_srcs, write_sound_src());
76 }
77