private void collision_accounting_events(PhysicsActor p1, PhysicsActor p2, ContactPoint contact) { // obj1LocalID = 0; //returncollisions = false; obj2LocalID = 0; //ctype = 0; //cStartStop = 0; // if (!p2.SubscribedEvents() && !p1.SubscribedEvents()) // return; bool p1events = p1.SubscribedEvents(); bool p2events = p2.SubscribedEvents(); if (p1.IsVolumeDtc) p2events = false; if (p2.IsVolumeDtc) p1events = false; if (!p2events && !p1events) return; Vector3 vel = Vector3.Zero; if (p2 != null && p2.IsPhysical) vel = p2.Velocity; if (p1 != null && p1.IsPhysical) vel -= p1.Velocity; contact.RelativeSpeed = Vector3.Dot(vel, contact.SurfaceNormal); switch ((ActorTypes)p2.PhysicsActorType) { case ActorTypes.Agent: cc2 = (OdeCharacter)p2; // obj1LocalID = cc2.m_localID; switch ((ActorTypes)p1.PhysicsActorType) { case ActorTypes.Agent: cc1 = (OdeCharacter)p1; obj2LocalID = cc1.LocalID; cc1.AddCollisionEvent(cc2.LocalID, contact); break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim) p1; obj2LocalID = cp1.LocalID; cp1.AddCollisionEvent(cc2.LocalID, contact); } break; case ActorTypes.Ground: case ActorTypes.Unknown: obj2LocalID = 0; break; } cc2.AddCollisionEvent(obj2LocalID, contact); break; case ActorTypes.Prim: if (p2 is OdePrim) { cp2 = (OdePrim) p2; // obj1LocalID = cp2.m_localID; switch ((ActorTypes) p1.PhysicsActorType) { case ActorTypes.Agent: if (p1 is OdeCharacter) { cc1 = (OdeCharacter) p1; obj2LocalID = cc1.LocalID; cc1.AddCollisionEvent(cp2.LocalID, contact); } break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim) p1; obj2LocalID = cp1.LocalID; cp1.AddCollisionEvent(cp2.LocalID, contact); } break; case ActorTypes.Ground: case ActorTypes.Unknown: obj2LocalID = 0; break; } cp2.AddCollisionEvent(obj2LocalID, contact); } break; } }
private void collision_accounting_events(PhysicsActor p1, PhysicsActor p2, ContactPoint contact) { // obj1LocalID = 0; //returncollisions = false; obj2LocalID = 0; //ctype = 0; //cStartStop = 0; if (!p2.SubscribedEvents() && !p1.SubscribedEvents()) return; switch ((ActorTypes)p2.PhysicsActorType) { case ActorTypes.Agent: cc2 = (OdeCharacter)p2; // obj1LocalID = cc2.m_localID; switch ((ActorTypes)p1.PhysicsActorType) { case ActorTypes.Agent: cc1 = (OdeCharacter)p1; obj2LocalID = cc1.LocalID; cc1.AddCollisionEvent(cc2.LocalID, contact); //ctype = (int)CollisionCategories.Character; //if (cc1.CollidingObj) //cStartStop = (int)StatusIndicators.Generic; //else //cStartStop = (int)StatusIndicators.Start; //returncollisions = true; break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim) p1; obj2LocalID = cp1.LocalID; cp1.AddCollisionEvent(cc2.LocalID, contact); } //ctype = (int)CollisionCategories.Geom; //if (cp1.CollidingObj) //cStartStop = (int)StatusIndicators.Generic; //else //cStartStop = (int)StatusIndicators.Start; //returncollisions = true; break; case ActorTypes.Ground: case ActorTypes.Unknown: obj2LocalID = 0; //ctype = (int)CollisionCategories.Land; //returncollisions = true; break; } cc2.AddCollisionEvent(obj2LocalID, contact); break; case ActorTypes.Prim: if (p2 is OdePrim) { cp2 = (OdePrim) p2; // obj1LocalID = cp2.m_localID; switch ((ActorTypes) p1.PhysicsActorType) { case ActorTypes.Agent: if (p1 is OdeCharacter) { cc1 = (OdeCharacter) p1; obj2LocalID = cc1.LocalID; cc1.AddCollisionEvent(cp2.LocalID, contact); //ctype = (int)CollisionCategories.Character; //if (cc1.CollidingObj) //cStartStop = (int)StatusIndicators.Generic; //else //cStartStop = (int)StatusIndicators.Start; //returncollisions = true; } break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim) p1; obj2LocalID = cp1.LocalID; cp1.AddCollisionEvent(cp2.LocalID, contact); //ctype = (int)CollisionCategories.Geom; //if (cp1.CollidingObj) //cStartStop = (int)StatusIndicators.Generic; //else //cStartStop = (int)StatusIndicators.Start; //returncollisions = true; } break; case ActorTypes.Ground: case ActorTypes.Unknown: obj2LocalID = 0; //ctype = (int)CollisionCategories.Land; //returncollisions = true; break; } cp2.AddCollisionEvent(obj2LocalID, contact); } break; } //if (returncollisions) //{ //lock (m_storedCollisions) //{ //cDictKey = obj1LocalID.ToString() + obj2LocalID.ToString() + cStartStop.ToString() + ctype.ToString(); //if (m_storedCollisions.ContainsKey(cDictKey)) //{ //sCollisionData objd = m_storedCollisions[cDictKey]; //objd.NumberOfCollisions += 1; //objd.lastframe = framecount; //m_storedCollisions[cDictKey] = objd; //} //else //{ //sCollisionData objd = new sCollisionData(); //objd.ColliderLocalId = obj1LocalID; //objd.CollidedWithLocalId = obj2LocalID; //objd.CollisionType = ctype; //objd.NumberOfCollisions = 1; //objd.lastframe = framecount; //objd.StatusIndicator = cStartStop; //m_storedCollisions.Add(cDictKey, objd); //} //} // } }
private void collision_accounting_events(PhysicsActor p1, PhysicsActor p2, ContactPoint contact) { // obj1LocalID = 0; //returncollisions = false; obj2LocalID = 0; //ctype = 0; //cStartStop = 0; if (!p2.SubscribedEvents() && !p1.SubscribedEvents()) return; switch ((ActorTypes)p2.PhysicsActorType) { case ActorTypes.Agent: cc2 = (OdeCharacter)p2; // obj1LocalID = cc2.m_localID; switch ((ActorTypes)p1.PhysicsActorType) { case ActorTypes.Agent: cc1 = (OdeCharacter)p1; obj2LocalID = cc1.LocalID; cc1.AddCollisionEvent(cc2.LocalID, contact); break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim) p1; obj2LocalID = cp1.LocalID; cp1.AddCollisionEvent(cc2.LocalID, contact); } break; case ActorTypes.Ground: case ActorTypes.Unknown: obj2LocalID = 0; break; } cc2.AddCollisionEvent(obj2LocalID, contact); break; case ActorTypes.Prim: if (p2 is OdePrim) { cp2 = (OdePrim) p2; // obj1LocalID = cp2.m_localID; switch ((ActorTypes) p1.PhysicsActorType) { case ActorTypes.Agent: if (p1 is OdeCharacter) { cc1 = (OdeCharacter) p1; obj2LocalID = cc1.LocalID; cc1.AddCollisionEvent(cp2.LocalID, contact); } break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim) p1; obj2LocalID = cp1.LocalID; cp1.AddCollisionEvent(cp2.LocalID, contact); } break; case ActorTypes.Ground: case ActorTypes.Unknown: obj2LocalID = 0; break; } cp2.AddCollisionEvent(obj2LocalID, contact); } break; } }