bool WorldSimulation::ReadState(File& f) { #if TEST_READ_WRITE TestReadWriteState(odesim,"odesim"); for(size_t i=0;i<controlSimulators.size();i++) TestReadWriteState(controlSimulators[i],"controller"); for(size_t i=0;i<hooks.size();i++) TestReadWriteState(*hooks[i],"hook"); #endif READ_FILE_DEBUG(f,time,"WorldSimulation::ReadState"); if(!odesim.ReadState(f)) { fprintf(stderr,"WorldSimulation::ReadState: ODE sim failed to read\n"); return false; } //controlSimulators will read the robotControllers' states for(size_t i=0;i<controlSimulators.size();i++) { if(!controlSimulators[i].ReadState(f)) { fprintf(stderr,"WorldSimulation::ReadState: Control simulator %d failed to read\n",i); return false; } } for(size_t i=0;i<hooks.size();i++) { if(!hooks[i]->ReadState(f)) { fprintf(stderr,"WorldSimulation::ReadState: Hook %d failed to read\n",i); return false; } } int n; READ_FILE_DEBUG(f,n,"WorldSimulation::ReadState: reading number of contactFeadback items"); if(n < 0) { fprintf(stderr,"Invalid number %d of contactFeedback items\n",n); return false; } contactFeedback.clear(); for(int i=0;i<n;i++) { pair<ODEObjectID,ODEObjectID> key; ContactFeedbackInfo info; if(!ReadFile(f,key.first)) { fprintf(stderr,"Unable to read contact feedback %d object 1\n",i); return false; } if(!ReadFile(f,key.second)) { fprintf(stderr,"Unable to read contact feedback %d object 2\n",i); return false; } if(!ReadFile(f,info)) { fprintf(stderr,"Unable to read contact feedback %d info\n",i); return false; } contactFeedback[key] = info; } UpdateModel(); return true; }
bool WorldSimulation::ReadState(File& f) { #if TEST_READ_WRITE TestReadWriteState(odesim,"odesim"); for(size_t i=0;i<controlSimulators.size();i++) TestReadWriteState(controlSimulators[i],"controller"); for(size_t i=0;i<hooks.size();i++) TestReadWriteState(*hooks[i],"hook"); #endif if(!ReadFile(f,time)) return false; if(!odesim.ReadState(f)) { fprintf(stderr,"WorldSimulation::ReadState: ODE sim failed to read\n"); return false; } //controlSimulators will read the robotControllers' states for(size_t i=0;i<controlSimulators.size();i++) { if(!controlSimulators[i].ReadState(f)) { fprintf(stderr,"WorldSimulation::ReadState: Control simulator %d failed to read\n",i); return false; } } for(size_t i=0;i<hooks.size();i++) { if(!hooks[i]->ReadState(f)) { fprintf(stderr,"WorldSimulation::ReadState: Hook %d failed to read\n",i); return false; } } int n; if(!ReadFile(f,n)) return false; if(n < 0) return false; contactFeedback.clear(); for(size_t i=0;i<n;i++) { pair<ODEObjectID,ODEObjectID> key; ContactFeedbackInfo info; if(!ReadFile(f,key.first)) return false; if(!ReadFile(f,key.second)) return false; if(!ReadFile(f,info)) return false; contactFeedback[key] = info; } UpdateModel(); return true; }
bool ODESimulator::ReadState(File& f) { #if TEST_READ_WRITE_STATE for(size_t i=0;i<robots.size();i++) TestReadWriteState(*robots[i],"ODERobot"); for(size_t i=0;i<objects.size();i++) TestReadWriteState(*objects[i],"ODEObject"); #endif for(size_t i=0;i<robots.size();i++) { if(!robots[i]->ReadState(f)) { fprintf(stderr,"ODESimulator::ReadState(): failed to read robot %d\n",i); return false; } } for(size_t i=0;i<objects.size();i++) { if(!objects[i]->ReadState(f)) { fprintf(stderr,"ODESimulator::ReadState(): failed to read object %d\n",i); return false; } } return true; }