Exemple #1
0
        public void Start()
        {
            RigidBodyWorld = new RigidBodyWorld();

            Physics.Physics.SetContext(RigidBodyWorld.GetWorld());

            for (int i = 0; i < _entities.Count; i++)
            {
                _entities[i].Activate();
            }

            Running = true;
        }
Exemple #2
0
        public void End()
        {
            Running = false;


            for (int i = 0; i < _entities.Count; i++)
            {
                _entities[i].Deactivate();
            }

            Physics.Physics.SetContext(null);

            RigidBodyWorld.Cleanup();
            RigidBodyWorld = null;
        }
 public override int AddContact(ref CollisionData collisionData, RigidBodyWorld world, int limit)
 {
     int constacts = 0;
     for (int i = 0; i < world.pcontacts.Count; i++)
     {
         CollisionPrimitive cp = world.pcontacts[i].Bodies[0].CollisionPrimative;
         CollisionPrimitive cp2 = world.pcontacts[i].Bodies[1].CollisionPrimative;
         cp.CalculateInternals();
         cp2.CalculateInternals();
         if (cp is CollisionSphere && cp2 is CollisionSphere)
             constacts += CollisionDetector.SphereAndSphere((CollisionSphere)cp, (CollisionSphere)cp2, ref collisionData);
         else if (cp is CollisionSphere && cp2 is CollisionBox)
             constacts += CollisionDetector.BoxAndSphere((CollisionBox)cp2, (CollisionSphere)cp, ref collisionData);
         else if (cp2 is CollisionSphere && cp is CollisionBox)
             constacts += CollisionDetector.BoxAndSphere((CollisionBox)cp, (CollisionSphere)cp2, ref collisionData);
     }
     return constacts;
 }
Exemple #4
0
 public override int AddContact(ref CollisionData collisionData, RigidBodyWorld world, int limits)
 {
     Vector3 a_pos_world = Bodies[0].GetPointInWorldSpace(Position[0]);
     Vector3 b_pos_world = Bodies[1].GetPointInWorldSpace(Position[1]);
     Vector3 a_to_b = b_pos_world - a_pos_world;
     Vector3 normal = a_to_b;
     normal.Normalize();
     float length = a_to_b.Magnitude;
     if (MathHelper.Abs(length) > Error)
     {
         Contact contact = new Contact();
         contact.Bodies[0] = Bodies[0];
         contact.Bodies[1] = Bodies[1];
         contact.ContactNormal = normal;
         contact.ContactPoint = (a_pos_world + b_pos_world) * 0.5f;
         contact.Penetration = length - Error;
         contact.Friction = 1.0f;
         contact.Restitution = 0;
         collisionData.Contacts.Add(contact);
         return 1;
     }
     return 0;
 }
 public virtual int AddContact(ref CollisionData collisionData, RigidBodyWorld world, int limit)
 {
     return 0;
 }