wiBULLET::~wiBULLET() { //cleanup in the reverse order of creation/initialization ///-----cleanup_start----- ClearWorld(); //delete dynamics world delete dynamicsWorld; //delete solver delete solver; //delete broadphase delete overlappingPairCache; //delete dispatcher delete dispatcher; delete collisionConfiguration; //next line is optional: it will be cleared by the destructor when the array goes out of scope collisionShapes.clear(); ///-----cleanup_end----- CleanUp(); }
void PNS_ROUTER::SyncWorld( ) { ClearWorld(); m_world = new PNS_NODE; m_iface->SyncWorld( m_world ); }
PNS_ROUTER::~PNS_ROUTER() { ClearWorld(); theRouter = NULL; if( m_previewItems ) delete m_previewItems; }
void ROUTER::SyncWorld( ) { ClearWorld(); m_world = std::unique_ptr< NODE >( new NODE ); m_iface->SyncWorld( m_world.get() ); }
PNS_ROUTER::~PNS_ROUTER() { ClearWorld(); if( m_previewItems ) delete m_previewItems; if ( m_debugDecorator ) delete m_debugDecorator; }
void bulletSimulation::ResetWorld() { mChangingFrame = true; mLastFrame = 0; XSI::Application().LogMessage(L"[MOMENTUM] Resetting world.",XSI::siVerboseMsg); // remove all bodies and shapes ClearWorld(); // reset the gravity etc ResetSettings(); mChangingFrame = false; }
void PNS_ROUTER::SyncWorld() { if( !m_board ) { TRACEn( 0, "No board attached, aborting sync." ); return; } ClearWorld(); m_world = new PNS_NODE(); for( MODULE* module = m_board->m_Modules; module; module = module->Next() ) { for( D_PAD* pad = module->Pads(); pad; pad = pad->Next() ) { PNS_ITEM* solid = syncPad( pad ); if( solid ) m_world->Add( solid ); } } for( TRACK* t = m_board->m_Track; t; t = t->Next() ) { KICAD_T type = t->Type(); PNS_ITEM* item = NULL; if( type == PCB_TRACE_T ) item = syncTrack( t ); else if( type == PCB_VIA_T ) item = syncVia( static_cast<VIA*>( t ) ); if( item ) m_world->Add( item ); } // TODO: Create resolvers in ctor, call resolver->SetBoard() in this->SetBoard() and delete it in dtor // TBD: Same remark as with m_sizes.SetMinimumTrackWidth in startRouting() int worstClearance = m_board->GetDesignSettings().GetBiggestClearanceValue(); m_clearanceResolver = new PNS_PCBNEW_CLEARANCE_RESOLVER( this ); m_world->SetClearanceResolver( m_clearanceResolver ); m_world->SetMaxClearance( 4 * worstClearance ); m_pairingResolver = new PCBNEW_PAIRING_RESOLVER( m_board ); m_world->SetPairingResolver( m_pairingResolver ); }
void PNS_ROUTER::SyncWorld() { if( !m_board ) { TRACEn( 0, "No board attached, aborting sync." ); return; } ClearWorld(); m_world = new PNS_NODE(); for( MODULE* module = m_board->m_Modules; module; module = module->Next() ) { for( D_PAD* pad = module->Pads(); pad; pad = pad->Next() ) { PNS_ITEM* solid = syncPad( pad ); if( solid ) m_world->Add( solid ); } } for( TRACK* t = m_board->m_Track; t; t = t->Next() ) { KICAD_T type = t->Type(); PNS_ITEM* item = NULL; if( type == PCB_TRACE_T ) item = syncTrack( t ); else if( type == PCB_VIA_T ) item = syncVia( static_cast<VIA*>( t ) ); if( item ) m_world->Add( item ); } int worstClearance = m_board->GetDesignSettings().GetBiggestClearanceValue(); m_clearanceFunc = new PNS_PCBNEW_CLEARANCE_FUNC( this ); m_world->SetClearanceFunctor( m_clearanceFunc ); m_world->SetMaxClearance( 4 * worstClearance ); }
/* ================= idRenderWorldLocal::InitFromMap A NULL or empty name will make a world without a map model, which is still useful for displaying a bare model ================= */ bool idRenderWorldLocal::InitFromMap( const char* name ) { idLexer* src; idToken token; idRenderModel* lastModel; // if this is an empty world, initialize manually if( !name || !name[0] ) { FreeWorld(); mapName.Clear(); ClearWorld(); return true; } // load it idStrStatic< MAX_OSPATH > filename = name; filename.SetFileExtension( PROC_FILE_EXT ); // check for generated file idStrStatic< MAX_OSPATH > generatedFileName = filename; generatedFileName.Insert( "generated/", 0 ); generatedFileName.SetFileExtension( "bproc" ); // if we are reloading the same map, check the timestamp // and try to skip all the work ID_TIME_T currentTimeStamp = fileSystem->GetTimestamp( filename ); if( name == mapName ) { if( fileSystem->InProductionMode() || ( currentTimeStamp != FILE_NOT_FOUND_TIMESTAMP && currentTimeStamp == mapTimeStamp ) ) { common->Printf( "idRenderWorldLocal::InitFromMap: retaining existing map\n" ); FreeDefs(); TouchWorldModels(); AddWorldModelEntities(); ClearPortalStates(); return true; } common->Printf( "idRenderWorldLocal::InitFromMap: timestamp has changed, reloading.\n" ); } FreeWorld(); // see if we have a generated version of this static const byte BPROC_VERSION = 1; static const unsigned int BPROC_MAGIC = ( 'P' << 24 ) | ( 'R' << 16 ) | ( 'O' << 8 ) | BPROC_VERSION; bool loaded = false; idFileLocal file( fileSystem->OpenFileReadMemory( generatedFileName ) ); if( file != NULL ) { int numEntries = 0; int magic = 0; file->ReadBig( magic ); if( magic == BPROC_MAGIC ) { file->ReadBig( numEntries ); file->ReadString( mapName ); file->ReadBig( mapTimeStamp ); loaded = true; for( int i = 0; i < numEntries; i++ ) { idStrStatic< MAX_OSPATH > type; file->ReadString( type ); type.ToLower(); if( type == "model" ) { idRenderModel* lastModel = ReadBinaryModel( file ); if( lastModel == NULL ) { loaded = false; break; } renderModelManager->AddModel( lastModel ); localModels.Append( lastModel ); } else if( type == "shadowmodel" ) { idRenderModel* lastModel = ReadBinaryModel( file ); if( lastModel == NULL ) { loaded = false; break; } renderModelManager->AddModel( lastModel ); localModels.Append( lastModel ); } else if( type == "interareaportals" ) { ReadBinaryAreaPortals( file ); } else if( type == "nodes" ) { ReadBinaryNodes( file ); } else { idLib::Error( "Binary proc file failed, unexpected type %s\n", type.c_str() ); } } } } if( !loaded ) { src = new( TAG_RENDER ) idLexer( filename, LEXFL_NOSTRINGCONCAT | LEXFL_NODOLLARPRECOMPILE ); if( !src->IsLoaded() ) { common->Printf( "idRenderWorldLocal::InitFromMap: %s not found\n", filename.c_str() ); ClearWorld(); return false; } mapName = name; mapTimeStamp = currentTimeStamp; // if we are writing a demo, archive the load command if( common->WriteDemo() ) { WriteLoadMap(); } if( !src->ReadToken( &token ) || token.Icmp( PROC_FILE_ID ) ) { common->Printf( "idRenderWorldLocal::InitFromMap: bad id '%s' instead of '%s'\n", token.c_str(), PROC_FILE_ID ); delete src; return false; } int numEntries = 0; idFileLocal outputFile( fileSystem->OpenFileWrite( generatedFileName, "fs_basepath" ) ); if( outputFile != NULL ) { int magic = BPROC_MAGIC; outputFile->WriteBig( magic ); outputFile->WriteBig( numEntries ); outputFile->WriteString( mapName ); outputFile->WriteBig( mapTimeStamp ); } // parse the file while( 1 ) { if( !src->ReadToken( &token ) ) { break; } common->UpdateLevelLoadPacifier(); if( token == "model" ) { lastModel = ParseModel( src, name, currentTimeStamp, outputFile ); // add it to the model manager list renderModelManager->AddModel( lastModel ); // save it in the list to free when clearing this map localModels.Append( lastModel ); numEntries++; continue; } if( token == "shadowModel" ) { lastModel = ParseShadowModel( src, outputFile ); // add it to the model manager list renderModelManager->AddModel( lastModel ); // save it in the list to free when clearing this map localModels.Append( lastModel ); numEntries++; continue; } if( token == "interAreaPortals" ) { ParseInterAreaPortals( src, outputFile ); numEntries++; continue; } if( token == "nodes" ) { ParseNodes( src, outputFile ); numEntries++; continue; } src->Error( "idRenderWorldLocal::InitFromMap: bad token \"%s\"", token.c_str() ); } delete src; if( outputFile != NULL ) { outputFile->Seek( 0, FS_SEEK_SET ); int magic = BPROC_MAGIC; outputFile->WriteBig( magic ); outputFile->WriteBig( numEntries ); } } // if it was a trivial map without any areas, create a single area if( !numPortalAreas ) { ClearWorld(); } // find the points where we can early-our of reference pushing into the BSP tree CommonChildrenArea_r( &areaNodes[0] ); AddWorldModelEntities(); ClearPortalStates(); // done! return true; }
/* ================= idRenderWorldLocal::InitFromMap A NULL or empty name will make a world without a map model, which is still useful for displaying a bare model ================= */ bool idRenderWorldLocal::InitFromMap( const char *name ) { idLexer * src; idToken token; idStr filename; idRenderModel * lastModel; // if this is an empty world, initialize manually if ( !name || !name[0] ) { FreeWorld(); mapName.Clear(); ClearWorld(); return true; } // load it filename = name; filename.SetFileExtension( PROC_FILE_EXT ); // if we are reloading the same map, check the timestamp // and try to skip all the work ID_TIME_T currentTimeStamp; fileSystem->ReadFile( filename, NULL, ¤tTimeStamp ); if ( name == mapName ) { if ( currentTimeStamp != FILE_NOT_FOUND_TIMESTAMP && currentTimeStamp == mapTimeStamp ) { common->Printf( "idRenderWorldLocal::InitFromMap: retaining existing map\n" ); FreeDefs(); TouchWorldModels(); AddWorldModelEntities(); ClearPortalStates(); return true; } common->Printf( "idRenderWorldLocal::InitFromMap: timestamp has changed, reloading.\n" ); } FreeWorld(); src = new idLexer( filename, LEXFL_NOSTRINGCONCAT | LEXFL_NODOLLARPRECOMPILE ); if ( !src->IsLoaded() ) { common->Printf( "idRenderWorldLocal::InitFromMap: %s not found\n", filename.c_str() ); ClearWorld(); return false; } mapName = name; mapTimeStamp = currentTimeStamp; // if we are writing a demo, archive the load command if ( session->writeDemo ) { WriteLoadMap(); } if ( !src->ReadToken( &token ) || token.Icmp( PROC_FILE_ID ) ) { common->Printf( "idRenderWorldLocal::InitFromMap: bad id '%s' instead of '%s'\n", token.c_str(), PROC_FILE_ID ); delete src; return false; } // parse the file while ( 1 ) { if ( !src->ReadToken( &token ) ) { break; } if ( token == "model" ) { lastModel = ParseModel( src ); // add it to the model manager list renderModelManager->AddModel( lastModel ); // save it in the list to free when clearing this map localModels.Append( lastModel ); continue; } if ( token == "shadowModel" ) { lastModel = ParseShadowModel( src ); // add it to the model manager list renderModelManager->AddModel( lastModel ); // save it in the list to free when clearing this map localModels.Append( lastModel ); continue; } if ( token == "interAreaPortals" ) { ParseInterAreaPortals( src ); continue; } if ( token == "nodes" ) { ParseNodes( src ); continue; } src->Error( "idRenderWorldLocal::InitFromMap: bad token \"%s\"", token.c_str() ); } delete src; // if it was a trivial map without any areas, create a single area if ( !numPortalAreas ) { ClearWorld(); } // find the points where we can early-our of reference pushing into the BSP tree CommonChildrenArea_r( &areaNodes[0] ); AddWorldModelEntities(); ClearPortalStates(); // done! return true; }
PNS_ROUTER::~PNS_ROUTER() { ClearWorld(); theRouter = NULL; }
ROUTER::~ROUTER() { ClearWorld(); theRouter = nullptr; }
bool MD5Renderer::InitFromMap( const char *name ) { idLexer * src; idToken token; idStr filename; idRenderModel * lastModel; // if this is an empty world, initialize manually if ( !name || !name[0] ) { FreeWorld(); mapName.Clear(); ClearWorld(); return true; } // load it filename = name; filename.SetFileExtension( PROC_FILE_EXT ); FreeWorld(); src = new idLexer( filename, LEXFL_NOSTRINGCONCAT | LEXFL_NODOLLARPRECOMPILE ); if ( !src->IsLoaded() ) { //common->Printf( "idRenderWorldLocal::InitFromMap: %s not found\n", filename.c_str() ); ClearWorld(); return false; } mapName = name; if ( !src->ReadToken( &token ) || token.Icmp( PROC_FILE_ID ) ) { //common->Printf( "idRenderWorldLocal::InitFromMap: bad id '%s' instead of '%s'\n", token.c_str(), PROC_FILE_ID ); delete src; return false; } int num = 0; // parse the file while ( 1 ) { if ( !src->ReadToken( &token ) ) { break; } if ( token == "model" ) { //lastModel = ParseModel( src ); ParseModel( src ); num++; // add it to the model manager list //renderModelManager->AddModel( lastModel ); // save it in the list to free when clearing this map //localModels.Append( lastModel ); continue; } if ( token == "shadowModel" ) { //lastModel = ParseShadowModel( src ); // add it to the model manager list //renderModelManager->AddModel( lastModel ); // save it in the list to free when clearing this map //localModels.Append( lastModel ); continue; } if ( token == "interAreaPortals" ) { ParseInterAreaPortals( src ); continue; } if ( token == "nodes" ) { ParseNodes( src ); continue; } src->Error( "idRenderWorldLocal::InitFromMap: bad token \"%s\"", token.c_str() ); } delete src; // if it was a trivial map without any areas, create a single area if ( !numPortalAreas ) { ClearWorld(); } for (size_t i = 0; i < gameLocal.mCurrScene->Areas_.size(); ++i) { gameLocal.mCurrScene->Areas_.at(i)->CreateBuffers(); } // find the points where we can early-our of reference pushing into the BSP tree //CommonChildrenArea_r( &areaNodes[0] ); //AddWorldModelEntities(); //ClearPortalStates(); // done! return true; }