1 | /********************************************************************** <BR>
|
---|
2 | This file is part of Crack dot Com's free source code release of
|
---|
3 | Golgotha. <a href="http://www.crack.com/golgotha_release"> <BR> for
|
---|
4 | information about compiling & licensing issues visit this URL</a>
|
---|
5 | <PRE> If that doesn't help, contact Jonathan Clark at
|
---|
6 | golgotha_source@usa.net (Subject should have "GOLG" in it)
|
---|
7 | ***********************************************************************/
|
---|
8 |
|
---|
9 | #ifndef S1_SFX_ID_HH |
---|
10 | #define S1_SFX_ID_HH |
---|
11 | |
---|
12 | #include "arch.hh" |
---|
13 | #include "math/vector.hh" |
---|
14 | |
---|
15 | class i4_voice_class; |
---|
16 | class i4_transform_class; |
---|
17 | class i4_file_class; |
---|
18 | |
---|
19 | enum |
---|
20 | { |
---|
21 | S1_STREAMED=1, |
---|
22 | S1_3D=2 |
---|
23 | }; |
---|
24 | |
---|
25 | |
---|
26 | class s1_sfx_ref; |
---|
27 | class s1_sound_handle; |
---|
28 | |
---|
29 | // the sound manager will call a callback when a looping 3d sound |
---|
30 | // enters hearing distance and is to be played. The callback should |
---|
31 | // return it's current velocity. |
---|
32 | typedef void (*s1_3d_sound_callback)(s1_sound_handle *handle, |
---|
33 | float &xv, float &yv, float &zv, |
---|
34 | float &frequency_scale); |
---|
35 | |
---|
36 | class s1_sound_handle |
---|
37 | { |
---|
38 | public: |
---|
39 | float x, y,z, xv, yv, zv; // current position of source |
---|
40 | float frequency_scale; |
---|
41 | |
---|
42 | |
---|
43 | void setup(float _x, float _y, float _z, |
---|
44 | float _xv, float _yv, float _zv, |
---|
45 | float _frequency_scale=1.0) |
---|
46 | { x=_x; y=_y; z=_z; xv=_xv; yv=_yv; zv=_zv; frequency_scale=_frequency_scale; } |
---|
47 | |
---|
48 | |
---|
49 | // don't change these directly! |
---|
50 | s1_sfx_ref *originator; |
---|
51 | float dist_sqrd; |
---|
52 | s1_sound_handle *next; |
---|
53 | static s1_sound_handle *first; |
---|
54 | sw16 channel_on; |
---|
55 | i4_bool playing; |
---|
56 | |
---|
57 | s1_sound_handle(); |
---|
58 | ~s1_sound_handle(); |
---|
59 | }; |
---|
60 | |
---|
61 | |
---|
62 | class s1_sfx_ref |
---|
63 | { |
---|
64 | public: |
---|
65 | static s1_sfx_ref *first; |
---|
66 | s1_sfx_ref *next; |
---|
67 | w8 flags; |
---|
68 | w16 id; |
---|
69 | w8 priority; |
---|
70 | char *name; |
---|
71 | char *file_defined_in; |
---|
72 | int line_defined_on; |
---|
73 | i4_voice_class *base_sfx; |
---|
74 | float hearable_distance_sqrd; |
---|
75 | |
---|
76 | s1_sfx_ref(char *filename, w8 flags, w8 priority, float dist, char *file, int line); |
---|
77 | ~s1_sfx_ref(); |
---|
78 | |
---|
79 | // for playing static (non-looping/moving) 3d sound |
---|
80 | void play(float x=0, float y=0, float z=0); |
---|
81 | |
---|
82 | void play_looping(s1_sound_handle &handle); |
---|
83 | }; |
---|
84 | |
---|
85 | void s1_end_looping(s1_sound_handle &handle); |
---|
86 | |
---|
87 | |
---|
88 | void s1_load(); // load all the referenced static & dynamic sounds |
---|
89 | void s1_unload(); |
---|
90 | void s1_get_camera_pos(i4_3d_vector &pos); |
---|
91 | void s1_set_camera_pos(i4_transform_class &new_cam_transform); |
---|
92 | char *s1_get_sfx_path(); |
---|
93 | void s1_save_sfx_list(i4_file_class *fp); |
---|
94 | |
---|
95 | |
---|
96 | #define S1_SFX(name, filename, type, priority) \ |
---|
97 | static s1_sfx_ref name(filename, type, priority, 20, __FILE__,__LINE__) |
---|
98 | |
---|
99 | #define S1_SFX_DISTANCE(name, filename, type, priority, distance) \ |
---|
100 | static s1_sfx_ref name(filename, type, priority, distance, __FILE__,__LINE__) |
---|
101 | |
---|
102 | #endif |
---|
103 | |
---|