Example #1
0
        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));
        }
Example #2
0
    // 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();
    }
Example #3
0
        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);
        }