void NBodySimulator::AdvanceAndCallback(BodyList &bodies, const double time, CallBack call_back) { ResetForces(bodies); CalculateForcesBetweenBodies(bodies); for(BodyList::iterator i = bodies.begin(); i != bodies.end(); ++i) i->Advance(time_interval_); if(call_back != nullptr) call_back(bodies); }
int main() { PopulateBodyVectorDisk(&Bodies, NumParticles, SimWidth, SimHeight, DiskRadiusMax, DiskRadiusMin, ObjectMassMin, ObjectMassMax, GalaticCenterMass); if (!IsPaused) //These will not if the simulation is paused { AttractToCenter(Bodies, SimWidth, SimHeight, GalaticCenterMass); UpdateBodies(Bodies); ResetForces(Bodies); GlobalNode.Reset(); GlobalNode.SetParam(Bodies, SimWidth, SimHeight); OctreeBodyAttraction(); } DeleteBodies(Bodies); }
void ClothEntity_cl::Serialize( VArchive &ar ) { if (ar.IsLoading()) { VisBaseEntity_cl::Serialize(ar); char iVersion,iModelType; char szModelFile[FS_MAX_PATH+1]; int iReserved; bool bTemp; hkvVec4 vPos,vOri; ar >> iVersion;VASSERT(iVersion==0 || iVersion==1); ar >> iModelType;VASSERT(iModelType==0); // currently from file only. Later maybe planar subdiv. ar.ReadStringBinary(szModelFile,FS_MAX_PATH); ar >> vPos; ar >> vOri; if (iVersion>=1) m_vCurrentScaling.SerializeAsVisVector (ar); ar >> m_fPhysicsTicks; ar >> bTemp;m_bSimulateWhenVisible=bTemp; ar >> m_fGravity; BaseInit(); m_vCurrentPos = vPos.getAsVec3 (); // do not apply delta in SetClothPosition SetMeshModel(szModelFile, m_vCurrentScaling); ar >> bTemp; // has mesh? if (bTemp) { VASSERT(m_spMesh!=NULL); m_spMesh->SerializeX(ar);; } ar >> m_iInitialTickCount; ar >> iReserved; VASSERT(iReserved==0); //SetClothPosition(vPos); SetClothOrientation(vOri.getAsVec3 ()); ResetForces(); //SetRelativeLightGridSamplePos(vLGRelPos); m_iRemainingInitialTicks = m_iInitialTickCount; RunInitialTicks(); } else