/// <summary> /// Called to queue a change to a prim /// to use in place of old taint mechanism so changes do have a time sequence /// </summary> public void AddChange(OdeCharacter character, changes what, Object arg) { ODEchangeitem item = new ODEchangeitem(); item.character = character; item.what = what; item.arg = arg; ChangesQueue.Enqueue(item); }
public void RemoveCharacter(OdeCharacter chr) { lock (_characters) { if (_characters.Contains(chr)) { _characters.Remove(chr); } } }
public void BadCharacter(OdeCharacter chr) { lock (_badCharacter) { if (!_badCharacter.Contains(chr)) _badCharacter.Add(chr); } }
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) { Vector3 pos; pos.X = position.X; pos.Y = position.Y; pos.Z = position.Z; OdeCharacter newAv = new OdeCharacter(avName, this, pos, size, avPIDD, avPIDP, avCapRadius, avDensity, avMovementDivisorWalk, avMovementDivisorRun); newAv.Flying = isFlying; newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset; return newAv; }
public void AddCharacter(OdeCharacter chr) { lock (_characters) { if (!_characters.Contains(chr)) { _characters.Add(chr); if (chr.bad) m_log.DebugFormat("[PHYSICS] Added BAD actor {0} to characters list", chr.m_uuid); } } }
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.m_localID; cc1.AddCollisionEvent(cc2.m_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.m_localID; cp1.AddCollisionEvent(cc2.m_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.m_localID; cc1.AddCollisionEvent(cp2.m_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.m_localID; cp1.AddCollisionEvent(cp2.m_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)p1.PhysicsActorType) { case ActorTypes.Agent: cc1 = (OdeCharacter)p1; switch ((ActorTypes)p2.PhysicsActorType) { case ActorTypes.Agent: cc2 = (OdeCharacter)p2; obj2LocalID = cc2.m_localID; if (p2.SubscribedEvents()) cc2.AddCollisionEvent(cc1.m_localID, contact); break; case ActorTypes.Prim: if (p2 is OdePrim) { cp2 = (OdePrim)p2; obj2LocalID = cp2.m_localID; if (p2.SubscribedEvents()) cp2.AddCollisionEvent(cc1.m_localID, contact); } break; case ActorTypes.Ground: case ActorTypes.Unknown: default: obj2LocalID = 0; break; } if (p1.SubscribedEvents()) { contact.SurfaceNormal = -contact.SurfaceNormal; cc1.AddCollisionEvent(obj2LocalID, contact); } break; case ActorTypes.Prim: if (p1 is OdePrim) { cp1 = (OdePrim)p1; // obj1LocalID = cp2.m_localID; switch ((ActorTypes)p2.PhysicsActorType) { case ActorTypes.Agent: if (p2 is OdeCharacter) { cc2 = (OdeCharacter)p2; obj2LocalID = cc2.m_localID; if (p2.SubscribedEvents()) cc2.AddCollisionEvent(cp1.m_localID, contact); } break; case ActorTypes.Prim: if (p2 is OdePrim) { cp2 = (OdePrim)p2; obj2LocalID = cp2.m_localID; if (p2.SubscribedEvents()) cp2.AddCollisionEvent(cp1.m_localID, contact); } break; case ActorTypes.Ground: case ActorTypes.Unknown: default: obj2LocalID = 0; break; } if (p1.SubscribedEvents()) { contact.SurfaceNormal = -contact.SurfaceNormal; cp1.AddCollisionEvent(obj2LocalID, contact); } } break; } }
internal void AddCharacter(OdeCharacter chr) { if (!_characters.Contains(chr)) { _characters.Add(chr); // m_log.DebugFormat( // "[ODE SCENE]: Adding physics character {0} {1} to physics scene {2}. Count now {3}", // chr.Name, chr.LocalID, Name, _characters.Count); if (chr.bad) m_log.ErrorFormat("[ODE SCENE]: Added BAD actor {0} to characters list", chr.m_uuid); } else { m_log.ErrorFormat( "[ODE SCENE]: Tried to add character {0} {1} but they are already in the set!", chr.Name, chr.LocalID); } }
internal void RemoveCharacter(OdeCharacter chr) { if (_characters.Contains(chr)) { _characters.Remove(chr); // m_log.DebugFormat( // "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}. Count now {3}", // chr.Name, chr.LocalID, Name, _characters.Count); } else { m_log.ErrorFormat( "[ODE SCENE]: Tried to remove character {0} {1} but they are not in the list!", chr.Name, chr.LocalID); } }
public void AddCharacter(OdeCharacter chr) { lock (_characters) { if (!_characters.Contains(chr)) { _characters.Add(chr); } } }
public override PhysicsActor AddAvatar(string avName, PhysicsVector position, PhysicsVector size, bool isFlying) { PhysicsVector pos = new PhysicsVector(); pos.X = position.X; pos.Y = position.Y; pos.Z = position.Z; OdeCharacter newAv = new OdeCharacter(avName, this, pos, ode, size, avPIDD, avPIDP, avCapRadius, avStandupTensor, avDensity, avHeightFudgeFactor, avMovementDivisorWalk, avMovementDivisorRun); newAv.Flying = isFlying; newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset; return newAv; }
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) { OdeCharacter newAv = new OdeCharacter( avName, this, position, velocity, size, avPIDD, avPIDP, avCapRadius, avStandupTensor, avDensity, avMovementDivisorWalk, avMovementDivisorRun); newAv.Flying = isFlying; newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset; newAv.m_avatarplanted = avplanted; return newAv; }
internal void RemoveCharacter(OdeCharacter chr) { if (_characters.Contains(chr)) _characters.Remove(chr); else m_log.ErrorFormat( "[ODE SCENE]: Tried to remove character {0} {1} but they are not in the list!", chr.Name, chr.LocalID); }
internal void AddCharacter(OdeCharacter chr) { if (!_characters.Contains(chr)) { _characters.Add(chr); if (chr.bad) m_log.ErrorFormat("[ODE SCENE]: Added BAD actor {0} to characters list", chr.m_uuid); } else { m_log.ErrorFormat( "[ODE SCENE]: Tried to add character {0} {1} but they are already in the set!", chr.Name, chr.LocalID); } }