public void remActivePrim(BulletDotNETPrim pDeactivatePrim) { lock (m_activePrims) { m_activePrims.Remove(pDeactivatePrim); } }
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); }
internal void addActivePrim(BulletDotNETPrim pPrim) { lock (m_activePrims) { if (!m_activePrims.Contains(pPrim)) { m_activePrims.Add(pPrim); } } }
public override void RemovePrim(PhysicsActor prim) { if (prim is BulletDotNETPrim) { BulletDotNETPrim p = (BulletDotNETPrim)prim; p.setPrimForRemoval(); AddPhysicsActorTaint(prim); //RemovePrimThreadLocked(p); } }
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"); } } }
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); } }
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); } } }
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"); } } }
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); }
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); }
internal void Enable(btRigidBody pBody, BulletDotNETPrim prim) { m_prim = prim; m_body = pBody; }