| 264 | } |
| 265 | |
| 266 | void CSoundRender_Core::set_geometry_env(IReader* I) |
| 267 | { |
| 268 | xr_delete(geom_ENV); |
| 269 | s_environment_ids.clear(); |
| 270 | |
| 271 | if (0 == I) |
| 272 | return; |
| 273 | if (0 == s_environment) |
| 274 | return; |
| 275 | |
| 276 | // Assosiate names |
| 277 | IReader* names = I->open_chunk(0); |
| 278 | while (!names->eof()) |
| 279 | { |
| 280 | string256 n; |
| 281 | names->r_stringZ(n, sizeof(n)); |
| 282 | int id = s_environment->GetID(n); |
| 283 | R_ASSERT(id >= 0); |
| 284 | s_environment_ids.push_back(u16(id)); |
| 285 | Msg("~ set_geometry_env id=%d name[%s]=environment id[%d]", s_environment_ids.size() - 1, n, id); |
| 286 | } |
| 287 | names->close(); |
| 288 | |
| 289 | // Load geometry |
| 290 | IReader* geom_ch = I->open_chunk(1); |
| 291 | |
| 292 | u8* _data = (u8*)xr_malloc(geom_ch->length()); |
| 293 | |
| 294 | Memory.mem_copy(_data, geom_ch->pointer(), geom_ch->length()); |
| 295 | |
| 296 | IReader* geom = xr_new<IReader>(_data, geom_ch->length(), 0); |
| 297 | |
| 298 | hdrCFORM H; |
| 299 | geom->r(&H, sizeof(hdrCFORM)); |
| 300 | R_ASSERT(H.version == CFORM_CURRENT_VERSION); |
| 301 | Fvector* verts = (Fvector*)geom->pointer(); |
| 302 | CDB::TRI* tris = (CDB::TRI*)(verts + H.vertcount); |
| 303 | |
| 304 | geom_ENV = xr_new<CDB::MODEL>(); |
| 305 | geom_ENV->build(verts, H.vertcount, tris, H.facecount); |
| 306 | geom_ch->close(); |
| 307 | geom->close(); |
| 308 | xr_free(_data); |
| 309 | } |
| 310 | |
| 311 | void CSoundRender_Core::create(ref_sound& S, LPCSTR fName, esound_type sound_type, int game_type) |
| 312 | { |