private void collision_accounting_events(PhysicsActor p1, PhysicsActor p2, ContactPoint contact) { if (!p2.SubscribedEvents() && !p1.SubscribedEvents()) return; FireCollisionEvent(p1, p2, contact); if (p1.SubscribedEvents()) p1.AddCollisionEvent(p2.LocalID, contact); if (p2.SubscribedEvents()) p2.AddCollisionEvent(p1.LocalID, contact); }
public void remCollisionEventReporting(PhysicsActor obj) { if (IsLocked) { ActiveRemoveCollisionQueue.Add(obj); } else { lock (_collisionEventListLock) { _collisionEventPrimList.Remove(obj); _collisionEventPrimDictionary.Remove(obj.UUID); } } }
/// <summary> /// Called after our prim properties are set Scale, position etc. /// We use this event queue like method to keep changes to the physical scene occuring in the threadlocked mutex /// This assures us that we have no race conditions /// </summary> /// <param name = "prim"></param> public override void AddPhysicsActorTaint(PhysicsActor prim) { if (prim is AuroraODEPrim) { /* ignore taints for prims AuroraODEPrim taintedprim = ((AuroraODEPrim)prim); lock (_taintedPrimLock) { if (!(_taintedPrimH.Contains(taintedprim))) { //Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.m_primName); _taintedPrimH.Add(taintedprim); // HashSet for searching _taintedPrimL.Add(taintedprim); // List for ordered readout } } */ return; } else if (prim is AuroraODECharacter) { AuroraODECharacter taintedchar = ((AuroraODECharacter) prim); lock (_taintedActors) { if (!(_taintedActors.Contains(taintedchar))) { _taintedActors.Add(taintedchar); if (taintedchar.bad) MainConsole.Instance.DebugFormat("[PHYSICS]: Added BAD actor {0} to tainted actors", taintedchar.m_uuid); } } } }
public abstract void AddPhysicsActorTaint(PhysicsActor prim);
// End recovered. Kitto Flora public void addCollisionEventReporting(PhysicsActor obj) { if (IsLocked) { ActiveAddCollisionQueue.Add(obj); } else { lock (_collisionEventListLock) { if (!_collisionEventPrimDictionary.ContainsKey(obj.UUID)) { _collisionEventPrimDictionary.Add(obj.UUID, obj); _collisionEventPrimList.Add(obj); } } } }
public void FireCollisionEvent (PhysicsActor actor, PhysicsActor collidedActor, ContactPoint contact) { if(OnCollisionEvent != null) OnCollisionEvent (actor, collidedActor, contact); }
public override void AddPhysicsActorTaint (PhysicsActor prim) { }
// Something has collided private void SendCollision(uint localID, uint collidingWith, Vector3 collidePoint, Vector3 collideNormal, float penitration, out PhysicsActor collider) { collider = null; if (localID == TERRAIN_ID || localID == GROUNDPLANE_ID) return; // don't send collisions to the terrain ActorTypes type = ActorTypes.Prim; if (collidingWith == TERRAIN_ID || collidingWith == GROUNDPLANE_ID) type = ActorTypes.Ground; else if (m_avatars.ContainsKey(collidingWith)) type = ActorTypes.Agent; BSPrim prim; if (m_prims.TryGetValue(localID, out prim)) { collider = prim; prim.Collide(collidingWith, type, collidePoint, collideNormal, penitration); return; } BSCharacter actor; if (m_avatars.TryGetValue(localID, out actor)) { collider = actor; actor.Collide(collidingWith, type, collidePoint, collideNormal, penitration); return; } return; }
public override void link(PhysicsActor obj) { }
public abstract void link (PhysicsActor obj);