Exemplo n.º 1
0
 public void remActivePrim(BulletDotNETPrim pDeactivatePrim)
 {
     lock (m_activePrims)
     {
         m_activePrims.Remove(pDeactivatePrim);
     }
 }
Exemplo n.º 2
0
        private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation,
                                     IMesh mesh, PrimitiveBaseShape pbs, bool isphysical)
        {
            Vector3 pos = position;
            //pos.X = position.X;
            //pos.Y = position.Y;
            //pos.Z = position.Z;
            Vector3 siz = Vector3.Zero;

            siz.X = size.X;
            siz.Y = size.Y;
            siz.Z = size.Z;
            Quaternion rot = rotation;

            BulletDotNETPrim newPrim;

            lock (BulletLock)
            {
                newPrim = new BulletDotNETPrim(name, this, pos, siz, rot, mesh, pbs, isphysical);

                //lock (m_prims)
                //    m_prims.Add(newPrim);
            }


            return(newPrim);
        }
Exemplo n.º 3
0
 internal void addActivePrim(BulletDotNETPrim pPrim)
 {
     lock (m_activePrims)
     {
         if (!m_activePrims.Contains(pPrim))
         {
             m_activePrims.Add(pPrim);
         }
     }
 }
Exemplo n.º 4
0
        public override void RemovePrim(PhysicsActor prim)
        {
            if (prim is BulletDotNETPrim)
            {
                BulletDotNETPrim p = (BulletDotNETPrim)prim;

                p.setPrimForRemoval();
                AddPhysicsActorTaint(prim);
                //RemovePrimThreadLocked(p);
            }
        }
Exemplo n.º 5
0
 internal void AddPrimToScene(BulletDotNETPrim pPrim)
 {
     lock (m_prims)
     {
         if (!m_prims.Contains(pPrim))
         {
             m_prims.Add(pPrim);
             m_world.addRigidBody(pPrim.Body);
             m_log.Debug("ADDED");
         }
     }
 }
Exemplo n.º 6
0
 internal void removeFromWorld(BulletDotNETPrim prm, btRigidBody body)
 {
     lock (m_prims)
     {
         if (m_prims.Contains(prm))
         {
             m_world.removeRigidBody(body);
         }
         remActivePrim(prm);
         m_prims.Remove(prm);
     }
 }
Exemplo n.º 7
0
        public override void RemovePrim(PhysicsActor prim)
        {
            if (prim is BulletDotNETPrim)
            {
                if (!Locked)
                {
                    lock (BulletLock)
                    {
                        BulletDotNETPrim p = (BulletDotNETPrim)prim;

                        p.setPrimForRemoval();
                        AddPhysicsActorTaint(prim);
                    }
                }
                else
                {
                    RemoveQueue.Add(prim);
                }
            }
        }
Exemplo n.º 8
0
 internal void AddPrimToScene(BulletDotNETPrim pPrim)
 {
     lock (m_prims)
     {
         if (!m_prims.Contains(pPrim))
         {
             try
             {
                 m_prims.Add(pPrim);
                 m_primsLocalID.Add(pPrim.m_localID, pPrim);
             }
             catch
             {
                 // noop if it's already there
                 m_log.Debug("[PHYSICS] BulletDotNet: adding duplicate prim localID");
             }
             m_world.addRigidBody(pPrim.Body);
             // m_log.Debug("[PHYSICS] added prim to scene");
         }
     }
 }
Exemplo n.º 9
0
        private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation,
                                     IMesh mesh, PrimitiveBaseShape pbs, bool isphysical)
        {
            PhysicsVector pos = new PhysicsVector(position.X, position.Y, position.Z);
            //pos.X = position.X;
            //pos.Y = position.Y;
            //pos.Z = position.Z;
            PhysicsVector siz = new PhysicsVector();

            siz.X = size.X;
            siz.Y = size.Y;
            siz.Z = size.Z;
            Quaternion rot = rotation;

            BulletDotNETPrim newPrim;

            newPrim = new BulletDotNETPrim(name, this, pos, siz, rot, mesh, pbs, isphysical);

            //lock (m_prims)
            //    m_prims.Add(newPrim);


            return(newPrim);
        }
Exemplo n.º 10
0
        public override float Simulate(float timeStep)
        {
            Locked = true;
            float steps = 0;

            lock (BulletLock)
            {
                lock (m_taintedActors)
                {
                    foreach (PhysicsActor act in m_taintedActors)
                    {
                        if (act is BulletDotNETCharacter)
                        {
                            ((BulletDotNETCharacter)act).ProcessTaints(timeStep);
                        }
                        if (act is BulletDotNETPrim)
                        {
                            ((BulletDotNETPrim)act).ProcessTaints(timeStep);
                        }
                    }
                    m_taintedActors.Clear();
                }

                lock (m_characters)
                {
                    foreach (BulletDotNETCharacter chr in m_characters)
                    {
                        chr.Move(timeStep);
                    }
                }

                lock (m_prims)
                {
                    foreach (BulletDotNETPrim prim in m_prims)
                    {
                        if (prim != null)
                        {
                            prim.Move(timeStep);
                        }
                    }
                }
                lock (m_world)
                {
                    steps = m_world.stepSimulation(timeStep, 10, WorldTimeComp);
                }

                foreach (BulletDotNETCharacter chr in m_characters)
                {
                    chr.UpdatePositionAndVelocity();
                }

                foreach (BulletDotNETPrim prm in m_activePrims)
                {
                    /*
                     * if (prm != null)
                     *  if (prm.Body != null)
                     */
                    prm.UpdatePositionAndVelocity();
                }

                /*if (m_CollisionInterface != null)
                 * {
                 *  List<BulletDotNETPrim> primsWithCollisions = new List<BulletDotNETPrim>();
                 *  List<BulletDotNETCharacter> charactersWithCollisions = new List<BulletDotNETCharacter>();
                 *
                 *  // get the collisions that happened this tick
                 *  List<BulletDotNET.ContactAddedCallbackHandler.ContactInfo> collisions = m_CollisionInterface.GetContactList();
                 *  // passed back the localID of the prim so we can associate the prim
                 *  foreach (BulletDotNET.ContactAddedCallbackHandler.ContactInfo ci in collisions)
                 *  {
                 *      // ContactPoint = { contactPoint, contactNormal, penetrationDepth }
                 *      ContactPoint contact = new ContactPoint(new Vector3(ci.pX, ci.pY, ci.pZ),
                 *                      new Vector3(ci.nX, ci.nY, ci.nZ), ci.depth);
                 *
                 *      ProcessContact(ci.contact, ci.contactWith, contact, ref primsWithCollisions, ref charactersWithCollisions);
                 *      ProcessContact(ci.contactWith, ci.contact, contact, ref primsWithCollisions, ref charactersWithCollisions);
                 *
                 *  }
                 *  m_CollisionInterface.Clear();
                 *  // for those prims and characters that had collisions cause collision events
                 *  foreach (BulletDotNETPrim bdnp in primsWithCollisions)
                 *  {
                 *      bdnp.SendCollisions();
                 *  }
                 *  foreach (BulletDotNETCharacter bdnc in charactersWithCollisions)
                 *  {
                 *      bdnc.SendCollisions();
                 *  }
                 * }*/
            }
            Locked = false;
            //No lock, as the lock that was adding to this was just removed
            if (RemoveQueue.Count > 0)
            {
                do
                {
                    if (RemoveQueue[0] != null)
                    {
                        if (RemoveQueue[0] is BulletDotNETPrim)
                        {
                            BulletDotNETPrim prim = RemoveQueue[0] as BulletDotNETPrim;
                            prim.Dispose();
                        }
                        else if (RemoveQueue[0] is BulletDotNETCharacter)
                        {
                            BulletDotNETCharacter chr = RemoveQueue[0] as BulletDotNETCharacter;
                            chr.Dispose();
                        }
                    }
                    RemoveQueue.RemoveAt(0);
                }while (RemoveQueue.Count > 0);
            }
            //No lock, as the lock that was adding to this was just removed
            if (m_waitingtaintedActors.Count != 0)
            {
                foreach (PhysicsActor actor in m_waitingtaintedActors)
                {
                    if (!m_taintedActors.Contains(actor))
                    {
                        m_taintedActors.Add(actor);
                    }
                }
            }
            return(steps);
        }
Exemplo n.º 11
0
 internal void Enable(btRigidBody pBody, BulletDotNETPrim prim)
 {
     m_prim = prim;
     m_body = pBody;
 }