| 185 | } |
| 186 | |
| 187 | void CSoundRender_Core::statistic(CSound_stats* dest, CSound_stats_ext* ext) |
| 188 | { |
| 189 | if (dest) |
| 190 | { |
| 191 | dest->_rendered = 0; |
| 192 | for (u32 it = 0; it < s_targets.size(); it++) |
| 193 | { |
| 194 | CSoundRender_Target* T = s_targets[it]; |
| 195 | if (T->get_emitter() && T->get_Rendering()) |
| 196 | dest->_rendered++; |
| 197 | } |
| 198 | dest->_simulated = s_emitters.size(); |
| 199 | dest->_cache_hits = cache._stat_hit; |
| 200 | dest->_cache_misses = cache._stat_miss; |
| 201 | dest->_events = g_saved_event_count; |
| 202 | cache.stats_clear(); |
| 203 | } |
| 204 | if (ext) |
| 205 | { |
| 206 | for (u32 it = 0; it < s_emitters.size(); it++) |
| 207 | { |
| 208 | CSoundRender_Emitter* _E = s_emitters[it]; |
| 209 | CSound_stats_ext::SItem _I; |
| 210 | _I._3D = !_E->b2D; |
| 211 | _I._rendered = !!_E->target; |
| 212 | _I.params = _E->p_source; |
| 213 | _I.volume = _E->smooth_volume; |
| 214 | if (_E->owner_data) |
| 215 | { |
| 216 | _I.name = _E->source()->fname; |
| 217 | _I.game_object = _E->owner_data->g_object; |
| 218 | _I.game_type = _E->owner_data->g_type; |
| 219 | _I.type = _E->owner_data->s_type; |
| 220 | } |
| 221 | else |
| 222 | { |
| 223 | _I.game_object = 0; |
| 224 | _I.game_type = 0; |
| 225 | _I.type = st_Effect; |
| 226 | } |
| 227 | ext->append(_I); |
| 228 | } |
| 229 | } |
| 230 | } |
| 231 | |
| 232 | float CSoundRender_Core::get_occlusion_to(const Fvector& hear_pt, const Fvector& snd_pt, float dispersion) |
| 233 | { |
no test coverage detected