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);
}
Beispiel #2
0
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