From b6d83e9c0f4bd1d450e36270278285be50d5ace8 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 16 Nov 2011 23:01:59 +0000 Subject: Stop OdePrim and OdeCharacter insanely overriding set LocalID to set their own private m_localID property but leaving get to return the then unset PhysicsActor.LocalId! Instead, just have both subclasses use the PhysicsActor.LocalID property. This restores collision functionality that fell away in 45c7789 yesterday --- OpenSim/Region/Framework/Scenes/EntityBase.cs | 6 ++++- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 6 ++++- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 2 +- OpenSim/Region/Physics/Manager/PhysicsActor.cs | 16 ++++++++----- OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 6 ----- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 11 +-------- .../Physics/OdePlugin/ODERayCastRequestManager.cs | 7 +++--- OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 28 ++++++++++------------ .../Region/Physics/OdePlugin/Tests/ODETestClass.cs | 2 +- 9 files changed, 40 insertions(+), 44 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/Framework/Scenes/EntityBase.cs b/OpenSim/Region/Framework/Scenes/EntityBase.cs index 664be01..741f53b 100644 --- a/OpenSim/Region/Framework/Scenes/EntityBase.cs +++ b/OpenSim/Region/Framework/Scenes/EntityBase.cs @@ -103,7 +103,11 @@ namespace OpenSim.Region.Framework.Scenes public virtual uint LocalId { get { return m_localId; } - set { m_localId = value; } + set + { + m_localId = value; +// m_log.DebugFormat("[ENTITY BASE]: Set part {0} to local id {1}", Name, m_localId); + } } /// diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index f693b36..4e79311 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -517,7 +517,11 @@ namespace OpenSim.Region.Framework.Scenes public uint LocalId { get { return m_localId; } - set { m_localId = value; } + set + { + m_localId = value; +// m_log.DebugFormat("[SCENE OBJECT PART]: Set part {0} to local id {1}", Name, m_localId); + } } public virtual string Name diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 5587073..7d901c9 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -756,7 +756,7 @@ namespace OpenSim.Region.Framework.Scenes m_name = String.Format("{0} {1}", Firstname, Lastname); m_scene = world; m_uuid = client.AgentId; - m_localId = m_scene.AllocateLocalId(); + LocalId = m_scene.AllocateLocalId(); UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, m_uuid); if (account != null) diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 49f60f8..798a0a4 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -25,8 +25,10 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using log4net; using System; using System.Collections.Generic; +using System.Reflection; using OpenSim.Framework; using OpenMetaverse; @@ -46,10 +48,10 @@ namespace OpenSim.Region.Physics.Manager public enum PIDHoverType { - Ground - , GroundAndWater - , Water - , Absolute + Ground, + GroundAndWater, + Water, + Absolute } public struct ContactPoint @@ -114,6 +116,8 @@ namespace OpenSim.Region.Physics.Manager public abstract class PhysicsActor { +// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + public delegate void RequestTerseUpdate(); public delegate void CollisionUpdate(EventArgs e); public delegate void OutOfBounds(Vector3 pos); @@ -197,10 +201,10 @@ namespace OpenSim.Region.Physics.Manager { CollisionUpdate handler = OnCollisionUpdate; +// m_log.DebugFormat("[PHYSICS ACTOR]: Sending collision for {0}", LocalID); + if (handler != null) - { handler(e); - } } public virtual void SetMaterial (int material) diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 3630510..c37d588 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs @@ -108,7 +108,6 @@ namespace OpenSim.Region.Physics.OdePlugin /// private Vector3 m_taintForce; - internal uint m_localID = 0; // taints and their non-tainted counterparts private bool m_isPhysical = false; // the current physical status private bool m_tainted_isPhysical = false; // set when the physical status is tainted (false=not existing in physics engine, true=existing) @@ -231,11 +230,6 @@ namespace OpenSim.Region.Physics.OdePlugin set { m_alwaysRun = value; } } - public override uint LocalID - { - set { m_localID = value; } - } - public override bool Grabbed { set { return; } diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 2f9a54b..1ba7ef7 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -142,8 +142,6 @@ namespace OpenSim.Region.Physics.OdePlugin public bool m_taintselected { get; private set; } public bool m_taintCollidesWater { get; private set; } - public uint m_localID { get; private set; } - private bool m_taintforce = false; private bool m_taintaddangularforce = false; private Vector3 m_force; @@ -290,13 +288,6 @@ namespace OpenSim.Region.Physics.OdePlugin set { return; } } - public override uint LocalID - { - set { - //m_log.Info("[PHYSICS]: Setting TrackerID: " + value); - m_localID = value; } - } - public override bool Grabbed { set { return; } @@ -1058,7 +1049,7 @@ Console.WriteLine("ZProcessTaints for " + Name); private void AddChildPrim(OdePrim prim) { //Console.WriteLine("AddChildPrim " + Name); - if (this.m_localID != prim.m_localID) + if (LocalID != prim.LocalID) { if (Body == IntPtr.Zero) { diff --git a/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs b/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs index 6c2bdde..8d7d3b3 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs @@ -371,12 +371,13 @@ namespace OpenSim.Region.Physics.OdePlugin // Loop over contacts, build results. for (int i = 0; i < count; i++) { - if (p1 != null) { + if (p1 != null) + { if (p1 is OdePrim) { ContactResult collisionresult = new ContactResult(); - collisionresult.ConsumerID = ((OdePrim)p1).m_localID; + collisionresult.ConsumerID = p1.LocalID; collisionresult.Pos = new Vector3(contacts[i].pos.X, contacts[i].pos.Y, contacts[i].pos.Z); collisionresult.Depth = contacts[i].depth; collisionresult.Normal = new Vector3(contacts[i].normal.X, contacts[i].normal.Y, @@ -392,7 +393,7 @@ namespace OpenSim.Region.Physics.OdePlugin { ContactResult collisionresult = new ContactResult(); - collisionresult.ConsumerID = ((OdePrim)p2).m_localID; + collisionresult.ConsumerID = p2.LocalID; collisionresult.Pos = new Vector3(contacts[i].pos.X, contacts[i].pos.Y, contacts[i].pos.Z); collisionresult.Depth = contacts[i].depth; collisionresult.Normal = new Vector3(contacts[i].normal.X, contacts[i].normal.Y, diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index 740037f..43d852b 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs @@ -1306,8 +1306,8 @@ namespace OpenSim.Region.Physics.OdePlugin { case ActorTypes.Agent: cc1 = (OdeCharacter)p1; - obj2LocalID = cc1.m_localID; - cc1.AddCollisionEvent(cc2.m_localID, contact); + obj2LocalID = cc1.LocalID; + cc1.AddCollisionEvent(cc2.LocalID, contact); //ctype = (int)CollisionCategories.Character; //if (cc1.CollidingObj) @@ -1322,8 +1322,8 @@ namespace OpenSim.Region.Physics.OdePlugin if (p1 is OdePrim) { cp1 = (OdePrim) p1; - obj2LocalID = cp1.m_localID; - cp1.AddCollisionEvent(cc2.m_localID, contact); + obj2LocalID = cp1.LocalID; + cp1.AddCollisionEvent(cc2.LocalID, contact); } //ctype = (int)CollisionCategories.Geom; @@ -1359,8 +1359,8 @@ namespace OpenSim.Region.Physics.OdePlugin if (p1 is OdeCharacter) { cc1 = (OdeCharacter) p1; - obj2LocalID = cc1.m_localID; - cc1.AddCollisionEvent(cp2.m_localID, contact); + obj2LocalID = cc1.LocalID; + cc1.AddCollisionEvent(cp2.LocalID, contact); //ctype = (int)CollisionCategories.Character; //if (cc1.CollidingObj) @@ -1375,8 +1375,8 @@ namespace OpenSim.Region.Physics.OdePlugin if (p1 is OdePrim) { cp1 = (OdePrim) p1; - obj2LocalID = cp1.m_localID; - cp1.AddCollisionEvent(cp2.m_localID, contact); + obj2LocalID = cp1.LocalID; + cp1.AddCollisionEvent(cp2.LocalID, contact); //ctype = (int)CollisionCategories.Geom; //if (cp1.CollidingObj) @@ -1638,7 +1638,7 @@ namespace OpenSim.Region.Physics.OdePlugin /// internal void AddCollisionEventReporting(PhysicsActor obj) { -// m_log.DebugFormat("[PHYSICS]: Adding {0} to collision event reporting", obj.SOPName); +// m_log.DebugFormat("[PHYSICS]: Adding {0} {1} to collision event reporting", obj.SOPName, obj.LocalID); lock (_collisionEventPrimChanges) _collisionEventPrimChanges[obj.LocalID] = obj; @@ -1650,7 +1650,7 @@ namespace OpenSim.Region.Physics.OdePlugin /// internal void RemoveCollisionEventReporting(PhysicsActor obj) { -// m_log.DebugFormat("[PHYSICS]: Removing {0} from collision event reporting", obj.SOPName); +// m_log.DebugFormat("[PHYSICS]: Removing {0} {1} from collision event reporting", obj.SOPName, obj.LocalID); lock (_collisionEventPrimChanges) _collisionEventPrimChanges[obj.LocalID] = null; @@ -1754,9 +1754,7 @@ namespace OpenSim.Region.Physics.OdePlugin public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, Vector3 size, Quaternion rotation, bool isPhysical, uint localid) { -#if SPAM - m_log.DebugFormat("[PHYSICS]: Adding physics actor to {0}", primName); -#endif +// m_log.DebugFormat("[ODE SCENE]: Adding physics actor to {0} {1}", primName, localid); return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); } @@ -2810,7 +2808,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name); foreach (PhysicsActor obj in _collisionEventPrim.Values) { -// m_log.DebugFormat("[PHYSICS]: Assessing {0} for collision events", obj.SOPName); +// m_log.DebugFormat("[PHYSICS]: Assessing {0} {1} for collision events", obj.SOPName, obj.LocalID); switch ((ActorTypes)obj.PhysicsActorType) { @@ -3746,7 +3744,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name); { if (prm.CollisionScore > 0) { - returncolliders.Add(prm.m_localID, prm.CollisionScore); + returncolliders.Add(prm.LocalID, prm.CollisionScore); cnt++; prm.CollisionScore = 0f; if (cnt > 25) diff --git a/OpenSim/Region/Physics/OdePlugin/Tests/ODETestClass.cs b/OpenSim/Region/Physics/OdePlugin/Tests/ODETestClass.cs index 2ea810f..cbc6b95 100644 --- a/OpenSim/Region/Physics/OdePlugin/Tests/ODETestClass.cs +++ b/OpenSim/Region/Physics/OdePlugin/Tests/ODETestClass.cs @@ -104,7 +104,7 @@ namespace OpenSim.Region.Physics.OdePlugin.Tests m_log.Info("TargetSpace: " + oprim.m_targetSpace + " - SceneMainSpace: " + pscene.space); Assert.That(!oprim.m_taintadd); - m_log.Info("Prim Position (" + oprim.m_localID + "): " + prim.Position.ToString()); + m_log.Info("Prim Position (" + oprim.LocalID + "): " + prim.Position); // Make sure we're above the ground //Assert.That(prim.Position.Z > 20f); -- cgit v1.1