public void Update(double deltaTime) { if (deltaTime == 0) { return; } foreach (IBody body in Bodies) { if (body.Dynamics.IsFixed) { continue; } // enact forces on the body foreach (ForceField field in ForceFields) { // maybe dont apply forces if we are currently inside another object? body.Dynamics.ThrustSingleFrame(field.GetForceOnBody(body), field.GetTorqueOnBody(body)); } // find and resolve contacts ContactResolver.ResolveContacts(ContactFinder.FindContacts(body, Bodies)); // update body state body.Dynamics.Update(deltaTime); } UniversalTime += deltaTime; FrameFinished?.Invoke(this, new FrameLengthArgs(deltaTime)); }
// Update is called once per frame void Update() { mContacts.Clear(); foreach (var link in mParticleLinks) { link.CreateContacts(mContacts); } mResolver.SetIterations(10); mResolver.ResolveContacts(mContacts, Time.deltaTime); mForceManager.UpdateForceGenerators(); mIntegrator.Integrate(Time.deltaTime); CheckBounds(); }
private void RodsSingleCD(List <Rod> listOfRods) { CollisionData dataRod = new CollisionData(); dataRod.contacts = new List <Contact>(); dataRod.contactCount = 0; dataRod.contactsLeft = 1000; dataRod.index = 0; dataRod.friction = .9f; dataRod.restitution = .7f; for (int i = 0; i < listOfRods.Count; i++) { //dataRod.contacts = new List<Contact>(); //dataRod.contactCount = 0; //dataRod.contactsLeft = 1000; //dataRod.index = 0; //dataRod.friction = .9f; //dataRod.restitution = .7f; Rod rodCurrent = listOfRods[i]; Vector3 position1 = rodCurrent.RigidOne.PositionCenterEngine; Vector3 position2 = rodCurrent.RigidTwo.PositionCenterEngine; rodCurrent.Joint1.Set(rodCurrent.RigidOne, position1, rodCurrent.RodRigidBody, rodCurrent.RodRigidBody.vertices[rodCurrent.VertexBoxOneIndex].Position); rodCurrent.Joint1.AddContact(ref dataRod); //_contactResolver.resolveContacts(dataRod.contacts, dataRod.contactCount, StaticData.Dtime); rodCurrent.Joint2.Set(rodCurrent.RigidTwo, position2, rodCurrent.RodRigidBody, rodCurrent.RodRigidBody.vertices[rodCurrent.VertexBoxTwoIndex].Position); rodCurrent.Joint2.AddContact(ref dataRod); } _contactResolver.ResolveContacts(dataRod.contacts, dataRod.contactCount, StaticData.Dtime); }