diff --git a/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs b/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs
index 8f2215a84f..7c4dc46a2c 100644
--- a/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs
+++ b/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs
@@ -203,7 +203,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
public int m_interpenetrationcount { get; private set; }
internal float m_collisionscore;
public int m_roundsUnderMotionThreshold { get; private set; }
- private int m_crossingfailures;
public bool outofBounds { get; private set; }
private float m_density = 10.000006836f; // Aluminum g/cm3;
diff --git a/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs b/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs
index e39b8c78cf..a21ec2beea 100644
--- a/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs
+++ b/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs
@@ -175,8 +175,8 @@ namespace OpenSim.Region.PhysicsModule.ODE
// this value may still be too large, depending on machine configuration
// of maximum stack
float len = req.length;
- if (len > 250f)
- len = 250f;
+ if (len > 100f)
+ len = 100f;
// Create the ray
IntPtr ray = d.CreateRay(m_scene.space, len);
@@ -226,8 +226,8 @@ namespace OpenSim.Region.PhysicsModule.ODE
{
// limit ray length or collisions will take all avaiable stack space
float len = req.length;
- if (len > 250f)
- len = 250f;
+ if (len > 100f)
+ len = 100f;
// Create the ray
IntPtr ray = d.CreateRay(m_scene.space, len);
@@ -252,71 +252,10 @@ namespace OpenSim.Region.PhysicsModule.ODE
private void near(IntPtr space, IntPtr g1, IntPtr g2)
{
- //Don't test against heightfield Geom, or you'll be sorry!
-
- /*
- terminate called after throwing an instance of 'std::bad_alloc'
- what(): std::bad_alloc
- Stacktrace:
-
- at (wrapper managed-to-native) Ode.NET.d.Collide (intptr,intptr,int,Ode.NET.d/ContactGeom[],int) <0x00004>
- at (wrapper managed-to-native) Ode.NET.d.Collide (intptr,intptr,int,Ode.NET.d/ContactGeom[],int) <0xffffffff>
- at OpenSim.Region.Physics.OdePlugin.ODERayCastRequestManager.near (intptr,intptr,intptr) <0x00280>
- at (wrapper native-to-managed) OpenSim.Region.Physics.OdePlugin.ODERayCastRequestManager.near (intptr,intptr,intptr) <0xfff
- fffff>
- at (wrapper managed-to-native) Ode.NET.d.SpaceCollide2 (intptr,intptr,intptr,Ode.NET.d/NearCallback) <0x00004>
- at (wrapper managed-to-native) Ode.NET.d.SpaceCollide2 (intptr,intptr,intptr,Ode.NET.d/NearCallback) <0xffffffff>
- at OpenSim.Region.Physics.OdePlugin.ODERayCastRequestManager.RayCast (OpenSim.Region.Physics.OdePlugin.ODERayCastRequest) <
- 0x00114>
- at OpenSim.Region.Physics.OdePlugin.ODERayCastRequestManager.ProcessQueuedRequests () <0x000eb>
- at OpenSim.Region.Physics.OdePlugin.OdeScene.Simulate (single) <0x017e6>
- at OpenSim.Region.Framework.Scenes.SceneGraph.UpdatePhysics (double) <0x00042>
- at OpenSim.Region.Framework.Scenes.Scene.Update () <0x0039e>
- at OpenSim.Region.Framework.Scenes.Scene.Heartbeat (object) <0x00019>
- at (wrapper runtime-invoke) object.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <0xffffffff>
-
- Native stacktrace:
-
- mono [0x80d2a42]
- [0xb7f5840c]
- /lib/i686/cmov/libc.so.6(abort+0x188) [0xb7d1a018]
- /usr/lib/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x158) [0xb45fc988]
- /usr/lib/libstdc++.so.6 [0xb45fa865]
- /usr/lib/libstdc++.so.6 [0xb45fa8a2]
- /usr/lib/libstdc++.so.6 [0xb45fa9da]
- /usr/lib/libstdc++.so.6(_Znwj+0x83) [0xb45fb033]
- /usr/lib/libstdc++.so.6(_Znaj+0x1d) [0xb45fb11d]
- libode.so(_ZN13dxHeightfield23dCollideHeightfieldZoneEiiiiP6dxGeomiiP12dContactGeomi+0xd04) [0xb46678e4]
- libode.so(_Z19dCollideHeightfieldP6dxGeomS0_iP12dContactGeomi+0x54b) [0xb466832b]
- libode.so(dCollide+0x102) [0xb46571b2]
- [0x95cfdec9]
- [0x8ea07fe1]
- [0xab260146]
- libode.so [0xb465a5c4]
- libode.so(_ZN11dxHashSpace8collide2EPvP6dxGeomPFvS0_S2_S2_E+0x75) [0xb465bcf5]
- libode.so(dSpaceCollide2+0x177) [0xb465ac67]
- [0x95cf978e]
- [0x8ea07945]
- [0x95cf2bbc]
- [0xab2787e7]
- [0xab419fb3]
- [0xab416657]
- [0xab415bda]
- [0xb609b08e]
- mono(mono_runtime_delegate_invoke+0x34) [0x8192534]
- mono [0x81a2f0f]
- mono [0x81d28b6]
- mono [0x81ea2c6]
- /lib/i686/cmov/libpthread.so.0 [0xb7e744c0]
- /lib/i686/cmov/libc.so.6(clone+0x5e) [0xb7dcd6de]
- */
-
- // Exclude heightfield geom
-
if (g1 == IntPtr.Zero || g2 == IntPtr.Zero)
return;
- if (d.GeomGetClass(g1) == d.GeomClassID.HeightfieldClass || d.GeomGetClass(g2) == d.GeomClassID.HeightfieldClass)
- return;
+// if (d.GeomGetClass(g1) == d.GeomClassID.HeightfieldClass || d.GeomGetClass(g2) == d.GeomClassID.HeightfieldClass)
+// return;
// Raytest against AABBs of spaces first, then dig into the spaces it hits for actual geoms.
if (d.GeomIsSpace(g1) || d.GeomIsSpace(g2))
diff --git a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs
index 6f14121667..8b369c86a9 100644
--- a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs
+++ b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs
@@ -58,16 +58,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
End = 2
}
-// public struct sCollisionData
-// {
-// public uint ColliderLocalId;
-// public uint CollidedWithLocalId;
-// public int NumberOfCollisions;
-// public int CollisionType;
-// public int StatusIndicator;
-// public int lastframe;
-// }
-
[Flags]
public enum CollisionCategories : int
{
@@ -323,7 +313,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
public bool IsAvCapsuleTilted { get; private set; }
private float avDensity = 80f;
-// private float avHeightFudgeFactor = 0.52f;
private float avMovementDivisorWalk = 1.3f;
private float avMovementDivisorRun = 0.8f;
private float minimumGroundFlightOffset = 3f;
@@ -346,7 +335,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
public int bodyFramesAutoDisable = 20;
- private float[] _watermap;
private bool m_filterCollisions = true;
private d.NearCallback nearCallback;
@@ -457,31 +445,21 @@ namespace OpenSim.Region.PhysicsModule.ODE
private d.Contact WaterContact;
private d.Contact[,] m_materialContacts;
-//Ckrinke: Comment out until used. We declare it, initialize it, but do not use it
-//Ckrinke private int m_randomizeWater = 200;
private int m_physicsiterations = 10;
private const float m_SkipFramesAtms = 0.40f; // Drop frames gracefully at a 400 ms lag
private readonly PhysicsActor PANull = new NullPhysicsActor();
private float step_time = 0.0f;
-//Ckrinke: Comment out until used. We declare it, initialize it, but do not use it
-//Ckrinke private int ms = 0;
public IntPtr world;
- //private bool returncollisions = false;
- // private uint obj1LocalID = 0;
private uint obj2LocalID = 0;
- //private int ctype = 0;
private OdeCharacter cc1;
private OdePrim cp1;
private OdeCharacter cc2;
private OdePrim cp2;
private int p1ExpectedPoints = 0;
private int p2ExpectedPoints = 0;
- //private int cStartStop = 0;
- //private string cDictKey = "";
public IntPtr space;
- //private IntPtr tmpSpace;
// split static geometry collision handling into spaces of 30 meters
public IntPtr[,] staticPrimspace;
@@ -565,8 +543,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
m_suportCombine = false;
nearCallback = near;
-// triCallback = TriCallback;
-// triArrayCallback = TriArrayCallback;
m_rayCastManager = new ODERayCastRequestManager(this);
// Create the world and the first space
@@ -576,11 +552,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
contactgroup = d.JointGroupCreate(0);
d.WorldSetAutoDisableFlag(world, false);
-
-// _watermap = new float[258 * 258];
-
- // Zero out the prim spaces array (we split our space into smaller spaces so
- // we can hit test less.
}
// Initialize from configs
@@ -708,8 +679,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
spaceGridMaxX--;
spaceGridMaxY--;
-
-
// Centeral contact friction and bounce
// ckrinke 11/10/08 Enabling soft_erp but not soft_cfm until I figure out why
// an avatar falls through in Z but not in X or Y when walking on a prim.
@@ -884,9 +853,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
d.WorldSetLinearDampingThreshold(world, 256f);
d.WorldSetMaxAngularSpeed(world, 256f);
- // Set how many steps we go without running collision testing
- // This is in addition to the step size.
- // Essentially Steps * m_physicsiterations
d.WorldSetQuickStepNumIterations(world, m_physicsiterations);
//d.WorldSetContactMaxCorrectingVel(world, 1000.0f);
@@ -901,22 +867,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
_worldInitialized = true;
}
-// internal void waitForSpaceUnlock(IntPtr space)
-// {
-// //if (space != IntPtr.Zero)
-// //while (d.SpaceLockQuery(space)) { } // Wait and do nothing
-// }
-
-// ///
-// /// Debug space message for printing the space that a prim/avatar is in.
-// ///
-// ///
-// /// Returns which split up space the given position is in.
-// public string whichspaceamIin(Vector3 pos)
-// {
-// return calculateSpaceForGeom(pos).ToString();
-// }
-
#region Collision Detection
///
@@ -1042,12 +992,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
name2 = "null";
}
- //if (id == d.GeomClassId.TriMeshClass)
- //{
- // m_log.InfoFormat("near: A collision was detected between {1} and {2}", 0, name1, name2);
- //m_log.Debug("near: A collision was detected between {1} and {2}", 0, name1, name2);
- //}
-
// Figure out how many contact points we have
int count = 0;
@@ -1166,110 +1110,9 @@ namespace OpenSim.Region.PhysicsModule.ODE
// we don't want prim or avatar to explode
#region InterPenetration Handling - Unintended physics explosions
-# region disabled code1
if (curContact.depth >= 0.08f)
{
- //This is disabled at the moment only because it needs more tweaking
- //It will eventually be uncommented
- /*
- if (contact.depth >= 1.00f)
- {
- //m_log.Debug("[PHYSICS]: " + contact.depth.ToString());
- }
-
- //If you interpenetrate a prim with an agent
- if ((p2.PhysicsActorType == (int) ActorTypes.Agent &&
- p1.PhysicsActorType == (int) ActorTypes.Prim) ||
- (p1.PhysicsActorType == (int) ActorTypes.Agent &&
- p2.PhysicsActorType == (int) ActorTypes.Prim))
- {
-
- //contact.depth = contact.depth * 4.15f;
- /*
- if (p2.PhysicsActorType == (int) ActorTypes.Agent)
- {
- p2.CollidingObj = true;
- contact.depth = 0.003f;
- p2.Velocity = p2.Velocity + new PhysicsVector(0, 0, 2.5f);
- OdeCharacter character = (OdeCharacter) p2;
- character.SetPidStatus(true);
- contact.pos = new d.Vector3(contact.pos.X + (p1.Size.X / 2), contact.pos.Y + (p1.Size.Y / 2), contact.pos.Z + (p1.Size.Z / 2));
-
- }
- else
- {
-
- //contact.depth = 0.0000000f;
- }
- if (p1.PhysicsActorType == (int) ActorTypes.Agent)
- {
-
- p1.CollidingObj = true;
- contact.depth = 0.003f;
- p1.Velocity = p1.Velocity + new PhysicsVector(0, 0, 2.5f);
- contact.pos = new d.Vector3(contact.pos.X + (p2.Size.X / 2), contact.pos.Y + (p2.Size.Y / 2), contact.pos.Z + (p2.Size.Z / 2));
- OdeCharacter character = (OdeCharacter)p1;
- character.SetPidStatus(true);
- }
- else
- {
-
- //contact.depth = 0.0000000f;
- }
-
-
-
- }
-*/
- // If you interpenetrate a prim with another prim
- /*
- if (p1.PhysicsActorType == (int) ActorTypes.Prim && p2.PhysicsActorType == (int) ActorTypes.Prim)
- {
- #region disabledcode2
- //OdePrim op1 = (OdePrim)p1;
- //OdePrim op2 = (OdePrim)p2;
- //op1.m_collisionscore++;
- //op2.m_collisionscore++;
-
- //if (op1.m_collisionscore > 8000 || op2.m_collisionscore > 8000)
- //{
- //op1.m_taintdisable = true;
- //AddPhysicsActorTaint(p1);
- //op2.m_taintdisable = true;
- //AddPhysicsActorTaint(p2);
- //}
-
- //if (contact.depth >= 0.25f)
- //{
- // Don't collide, one or both prim will expld.
-
- //op1.m_interpenetrationcount++;
- //op2.m_interpenetrationcount++;
- //interpenetrations_before_disable = 200;
- //if (op1.m_interpenetrationcount >= interpenetrations_before_disable)
- //{
- //op1.m_taintdisable = true;
- //AddPhysicsActorTaint(p1);
- //}
- //if (op2.m_interpenetrationcount >= interpenetrations_before_disable)
- //{
- // op2.m_taintdisable = true;
- //AddPhysicsActorTaint(p2);
- //}
-
- //contact.depth = contact.depth / 8f;
- //contact.normal = new d.Vector3(0, 0, 1);
- //}
- //if (op1.m_disabled || op2.m_disabled)
- //{
- //Manually disabled objects stay disabled
- //contact.depth = 0f;
- //}
- #endregion
- }
- */
-#endregion
if (curContact.depth >= 1.00f)
{
//m_log.Info("[P]: " + contact.depth.ToString());
@@ -1584,12 +1427,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
}
else if (at == ActorTypes.Prim)
{
- //d.AABB aabb1 = new d.AABB();
- //d.AABB aabb2 = new d.AABB();
-
- //d.GeomGetAABB(contactGeom.g2, out aabb2);
- //d.GeomGetAABB(contactGeom.g1, out aabb1);
- //aabb1.
if (((Math.Abs(contactGeom.normal.X - contact.normal.X) < 1.026f) && (Math.Abs(contactGeom.normal.Y - contact.normal.Y) < 0.303f) && (Math.Abs(contactGeom.normal.Z - contact.normal.Z) < 0.065f)))
{
if (contactGeom.normal.X == contact.normal.X && contactGeom.normal.Y == contact.normal.Y && contactGeom.normal.Z == contact.normal.Z)
@@ -1631,14 +1468,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
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:
@@ -1648,21 +1477,11 @@ namespace OpenSim.Region.PhysicsModule.ODE
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;
}
@@ -1684,13 +1503,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
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:
@@ -1700,23 +1512,12 @@ namespace OpenSim.Region.PhysicsModule.ODE
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;
}
@@ -1724,80 +1525,7 @@ namespace OpenSim.Region.PhysicsModule.ODE
}
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 int TriArrayCallback(IntPtr trimesh, IntPtr refObject, int[] triangleIndex, int triCount)
- {
- String name1 = null;
- String name2 = null;
-
- if (!geom_name_map.TryGetValue(trimesh, out name1))
- {
- name1 = "null";
- }
- if (!geom_name_map.TryGetValue(refObject, out name2))
- {
- name2 = "null";
- }
-
- m_log.InfoFormat("TriArrayCallback: A collision was detected between {1} and {2}", 0, name1, name2);
-
- return 1;
- }
-
- private int TriCallback(IntPtr trimesh, IntPtr refObject, int triangleIndex)
- {
-// String name1 = null;
-// String name2 = null;
-//
-// if (!geom_name_map.TryGetValue(trimesh, out name1))
-// {
-// name1 = "null";
-// }
-//
-// if (!geom_name_map.TryGetValue(refObject, out name2))
-// {
-// name2 = "null";
-// }
-
- // m_log.InfoFormat("TriCallback: A collision was detected between {1} and {2}. Index was {3}", 0, name1, name2, triangleIndex);
-
- d.Vector3 v0 = new d.Vector3();
- d.Vector3 v1 = new d.Vector3();
- d.Vector3 v2 = new d.Vector3();
-
- d.GeomTriMeshGetTriangle(trimesh, 0, ref v0, ref v1, ref v2);
- // m_log.DebugFormat("Triangle {0} is <{1},{2},{3}>, <{4},{5},{6}>, <{7},{8},{9}>", triangleIndex, v0.X, v0.Y, v0.Z, v1.X, v1.Y, v1.Z, v2.X, v2.Y, v2.Z);
-
- return 1;
- }
-*/
///
/// This is our collision testing routine in ODE
///
@@ -2988,27 +2716,7 @@ namespace OpenSim.Region.PhysicsModule.ODE
lock (OdeLock)
{
- // Process 10 frames if the sim is running normal..
- // process 5 frames if the sim is running slow
- //try
- //{
- //d.WorldSetQuickStepNumIterations(world, m_physicsiterations);
- //}
- //catch (StackOverflowException)
- //{
- // m_log.Error("[PHYSICS]: The operating system wasn't able to allocate enough memory for the simulation. Restarting the sim.");
- // ode.drelease(world);
- //base.TriggerPhysicsBasedRestart();
- //}
-
- // Figure out the Frames Per Second we're going at.
- //(step_time == 0.004f, there's 250 of those per second. Times the step time/step size
-
-
- // HACK: Using a time dilation of 1.0 to debug rubberbanding issues
- //m_timeDilation = Math.Min((step_time / ODE_STEPSIZE) / (0.09375f / ODE_STEPSIZE), 1.0f);
-
- while (step_time > HalfOdeStep)
+ while (step_time > HalfOdeStep)
{
try
{
@@ -3107,10 +2815,6 @@ namespace OpenSim.Region.PhysicsModule.ODE
tempTick = tempTick2;
}
- //if ((framecount % m_randomizeWater) == 0)
- // randomizeWater(waterlevel);
-
- //int RayCastTimeMS = m_rayCastManager.ProcessQueuedRequests();
m_rayCastManager.ProcessQueuedRequests();
if (CollectStats)
@@ -3131,7 +2835,7 @@ namespace OpenSim.Region.PhysicsModule.ODE
foreach (PhysicsActor obj in m_collisionEventActors.Values)
{
-// m_log.DebugFormat("[PHYSICS]: Assessing {0} {1} for collision events", obj.SOPName, obj.LocalID);
+ // m_log.DebugFormat("[PHYSICS]: Assessing {0} {1} for collision events", obj.SOPName, obj.LocalID);
switch ((ActorTypes)obj.PhysicsActorType)
{