| 1307 | } |
| 1308 | |
| 1309 | bool TSShape::removeDetail( S32 size ) |
| 1310 | { |
| 1311 | S32 dl = findDetailBySize( size ); |
| 1312 | |
| 1313 | if ( ( dl < 0 ) || ( dl >= details.size() ) ) |
| 1314 | { |
| 1315 | Con::errorf( "TSShape::removeDetail: Invalid detail index (%d)", dl ); |
| 1316 | return false; |
| 1317 | } |
| 1318 | |
| 1319 | // Need to make everything editable since node indexes etc will change |
| 1320 | makeEditable(); |
| 1321 | |
| 1322 | // Destroy and remove each mesh in the detail level |
| 1323 | for ( S32 objIndex = objects.size()-1; objIndex >= 0; objIndex-- ) |
| 1324 | { |
| 1325 | TSShape::Object& obj = objects[objIndex]; |
| 1326 | if ( dl < obj.numMeshes ) |
| 1327 | { |
| 1328 | if ( meshes[obj.startMeshIndex + dl] ) |
| 1329 | destructInPlace( meshes[obj.startMeshIndex + dl] ); |
| 1330 | removeMeshFromObject(objIndex, dl); |
| 1331 | |
| 1332 | // Remove the object if there are no meshes left |
| 1333 | if (!obj.numMeshes) |
| 1334 | removeObject( getName( obj.nameIndex ) ); |
| 1335 | } |
| 1336 | } |
| 1337 | |
| 1338 | // Destroy billboard detail level |
| 1339 | if ( dl < billboardDetails.size() ) |
| 1340 | { |
| 1341 | if ( billboardDetails[dl] ) |
| 1342 | { |
| 1343 | // Delete old textures |
| 1344 | billboardDetails[dl]->deleteImposterCacheTextures(); |
| 1345 | delete billboardDetails[dl]; |
| 1346 | } |
| 1347 | |
| 1348 | billboardDetails.erase( dl ); |
| 1349 | } |
| 1350 | |
| 1351 | // Update smallest visible detail |
| 1352 | updateSmallestVisibleDL(); |
| 1353 | |
| 1354 | initObjects(); |
| 1355 | |
| 1356 | return true; |
| 1357 | } |
| 1358 | |
| 1359 | //----------------------------------------------------------------------------- |
| 1360 | bool TSShape::addSequence(const Torque::Path& path, const String& fromSeq, |
no test coverage detected