aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs20
-rw-r--r--OpenSim/Region/Physics/BulletXPlugin/TriangleIndexVertexArray.cs4
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs22
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs8
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsSensor.cs2
-rw-r--r--OpenSim/Region/Physics/Manager/ZeroMesher.cs4
-rw-r--r--OpenSim/Region/Physics/Meshing/HelperTypes.cs14
-rw-r--r--OpenSim/Region/Physics/Meshing/Meshmerizer.cs64
-rw-r--r--OpenSim/Region/Physics/Meshing/SimpleHull.cs2
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs62
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs226
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs208
-rw-r--r--OpenSim/Region/Physics/POSPlugin/POSPlugin.cs6
13 files changed, 285 insertions, 357 deletions
diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
index 9415fff..5ced2d1 100644
--- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
+++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
@@ -282,9 +282,9 @@ namespace OpenSim.Region.Physics.BulletXPlugin
282 bool needsCollision;// = base.NeedsCollision(bodyA, bodyB); 282 bool needsCollision;// = base.NeedsCollision(bodyA, bodyB);
283 int c1 = 3; 283 int c1 = 3;
284 int c2 = 3; 284 int c2 = 3;
285 285
286 //////////////////////////////////////////////////////// 286 ////////////////////////////////////////////////////////
287 //BulletX Mesh Collisions 287 //BulletX Mesh Collisions
288 //added by Jed zhu 288 //added by Jed zhu
289 //data: May 07,2005 289 //data: May 07,2005
290 //////////////////////////////////////////////////////// 290 ////////////////////////////////////////////////////////
@@ -302,9 +302,9 @@ namespace OpenSim.Region.Physics.BulletXPlugin
302 else 302 else
303 needsCollision = base.NeedsCollision(bodyA, bodyB); 303 needsCollision = base.NeedsCollision(bodyA, bodyB);
304 304
305 305
306 #endregion 306 #endregion
307 307
308 308
309 //m_log.DebugFormat("[BulletX]: A collision was detected between {0} and {1} --> {2}", nameA, nameB, 309 //m_log.DebugFormat("[BulletX]: A collision was detected between {0} and {1} --> {2}", nameA, nameB,
310 //needsCollision); 310 //needsCollision);
@@ -705,7 +705,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
705 } 705 }
706 foreach (BulletXPrim prim in _prims.Values) 706 foreach (BulletXPrim prim in _prims.Values)
707 { 707 {
708 //_height = HeightValue(prim.RigidBodyPosition); 708 //_height = HeightValue(prim.RigidBodyPosition);
709 _height = _simFlatPlanet.HeightValue(prim.RigidBodyPosition); 709 _height = _simFlatPlanet.HeightValue(prim.RigidBodyPosition);
710 prim.ValidateHeight(_height); 710 prim.ValidateHeight(_height);
711 //if (_simFlatPlanet.heightIsNotValid(prim.RigidBodyPosition, out _height)) prim.ValidateHeight(_height); 711 //if (_simFlatPlanet.heightIsNotValid(prim.RigidBodyPosition, out _height)) prim.ValidateHeight(_height);
@@ -741,8 +741,8 @@ namespace OpenSim.Region.Physics.BulletXPlugin
741 741
742 public override bool IsThreaded 742 public override bool IsThreaded
743 { 743 {
744 get 744 get
745 { 745 {
746 return (false); // for now we won't be multithreaded 746 return (false); // for now we won't be multithreaded
747 } 747 }
748 } 748 }
@@ -1380,17 +1380,17 @@ namespace OpenSim.Region.Physics.BulletXPlugin
1380 /// </summary> 1380 /// </summary>
1381 public class BulletXPrim : BulletXActor 1381 public class BulletXPrim : BulletXActor
1382 { 1382 {
1383 //Density it will depends of material. 1383 //Density it will depends of material.
1384 //For now all prims have the same density, all prims are made of water. Be water my friend! :D 1384 //For now all prims have the same density, all prims are made of water. Be water my friend! :D
1385 private const float _density = 1000.0f; 1385 private const float _density = 1000.0f;
1386 private BulletXScene _parent_scene; 1386 private BulletXScene _parent_scene;
1387 private PhysicsVector m_prev_position = new PhysicsVector(0, 0, 0); 1387 private PhysicsVector m_prev_position = new PhysicsVector(0, 0, 0);
1388 private bool m_lastUpdateSent = false; 1388 private bool m_lastUpdateSent = false;
1389 //added by jed zhu 1389 //added by jed zhu
1390 private IMesh _mesh; 1390 private IMesh _mesh;
1391 public IMesh GetMesh() { return _mesh; } 1391 public IMesh GetMesh() { return _mesh; }
1392 1392
1393 1393
1394 1394
1395 public BulletXPrim(String primName, BulletXScene parent_scene, PhysicsVector pos, PhysicsVector size, 1395 public BulletXPrim(String primName, BulletXScene parent_scene, PhysicsVector pos, PhysicsVector size,
1396 AxiomQuaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isPhysical) 1396 AxiomQuaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isPhysical)
diff --git a/OpenSim/Region/Physics/BulletXPlugin/TriangleIndexVertexArray.cs b/OpenSim/Region/Physics/BulletXPlugin/TriangleIndexVertexArray.cs
index 0902077..637cf6e 100644
--- a/OpenSim/Region/Physics/BulletXPlugin/TriangleIndexVertexArray.cs
+++ b/OpenSim/Region/Physics/BulletXPlugin/TriangleIndexVertexArray.cs
@@ -20,8 +20,8 @@
20*/ 20*/
21 21
22/* 22/*
23 This file contains a class TriangleIndexVertexArray. I tried using the class with the same name 23 This file contains a class TriangleIndexVertexArray. I tried using the class with the same name
24 from the BulletX implementation and found it unusable for the purpose of using triangle meshes 24 from the BulletX implementation and found it unusable for the purpose of using triangle meshes
25 within BulletX as the implementation was painfully incomplete. 25 within BulletX as the implementation was painfully incomplete.
26 The attempt to derive from the original class failed as viable members were hidden. 26 The attempt to derive from the original class failed as viable members were hidden.
27 Fiddling around with BulletX itself was not my intention. 27 Fiddling around with BulletX itself was not my intention.
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index c1dc91b..3cf2646 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -140,7 +140,7 @@ namespace OpenSim.Region.Physics.Manager
140 // a race condition if the last subscriber unsubscribes 140 // a race condition if the last subscriber unsubscribes
141 // immediately after the null check and before the event is raised. 141 // immediately after the null check and before the event is raised.
142 RequestTerseUpdate handler = OnRequestTerseUpdate; 142 RequestTerseUpdate handler = OnRequestTerseUpdate;
143 143
144 if (handler != null) 144 if (handler != null)
145 { 145 {
146 handler(); 146 handler();
@@ -163,9 +163,9 @@ namespace OpenSim.Region.Physics.Manager
163 public virtual void SendCollisionUpdate(EventArgs e) 163 public virtual void SendCollisionUpdate(EventArgs e)
164 { 164 {
165 CollisionUpdate handler = OnCollisionUpdate; 165 CollisionUpdate handler = OnCollisionUpdate;
166 166
167 if (handler != null) 167 if (handler != null)
168 { 168 {
169 handler(e); 169 handler(e);
170 } 170 }
171 } 171 }
@@ -205,9 +205,9 @@ namespace OpenSim.Region.Physics.Manager
205 205
206 public class NullPhysicsActor : PhysicsActor 206 public class NullPhysicsActor : PhysicsActor
207 { 207 {
208 public override bool Stopped 208 public override bool Stopped
209 { 209 {
210 get{ return false; } 210 get{ return false; }
211 } 211 }
212 212
213 public override PhysicsVector Position 213 public override PhysicsVector Position
@@ -222,7 +222,7 @@ namespace OpenSim.Region.Physics.Manager
222 set { return; } 222 set { return; }
223 } 223 }
224 224
225 public override uint LocalID 225 public override uint LocalID
226 { 226 {
227 set { return; } 227 set { return; }
228 } 228 }
@@ -240,14 +240,14 @@ namespace OpenSim.Region.Physics.Manager
240 public override float Buoyancy 240 public override float Buoyancy
241 { 241 {
242 get { return 0f; } 242 get { return 0f; }
243 set { return; } 243 set { return; }
244 } 244 }
245 245
246 public override bool FloatOnWater 246 public override bool FloatOnWater
247 { 247 {
248 set { return; } 248 set { return; }
249 } 249 }
250 250
251 public override bool CollidingGround 251 public override bool CollidingGround
252 { 252 {
253 get { return false; } 253 get { return false; }
@@ -297,7 +297,7 @@ namespace OpenSim.Region.Physics.Manager
297 set { return; } 297 set { return; }
298 } 298 }
299 299
300 public override float CollisionScore 300 public override float CollisionScore
301 { 301 {
302 get { return 0f; } 302 get { return 0f; }
303 } 303 }
@@ -385,7 +385,7 @@ namespace OpenSim.Region.Physics.Manager
385 385
386 public override void SubscribeEvents(int ms) 386 public override void SubscribeEvents(int ms)
387 { 387 {
388 388
389 } 389 }
390 public override void UnSubscribeEvents() 390 public override void UnSubscribeEvents()
391 { 391 {
diff --git a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
index b8ca180..6a71581 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
@@ -94,7 +94,7 @@ namespace OpenSim.Region.Physics.Manager
94 _MeshPlugins.Add(plugHard.GetName(), plugHard); 94 _MeshPlugins.Add(plugHard.GetName(), plugHard);
95 m_log.Info("[PHYSICS]: Added meshing engine: " + plugHard.GetName()); 95 m_log.Info("[PHYSICS]: Added meshing engine: " + plugHard.GetName());
96 96
97 // And now walk all assemblies (DLLs effectively) and see if they are home 97 // And now walk all assemblies (DLLs effectively) and see if they are home
98 // of a plugin that is of interest for us 98 // of a plugin that is of interest for us
99 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Physics"); 99 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Physics");
100 string[] pluginFiles = Directory.GetFiles(path, "*.dll"); 100 string[] pluginFiles = Directory.GetFiles(path, "*.dll");
@@ -108,11 +108,11 @@ namespace OpenSim.Region.Physics.Manager
108 private void AddPlugin(string FileName) 108 private void AddPlugin(string FileName)
109 { 109 {
110 // TODO / NOTE 110 // TODO / NOTE
111 // The assembly named 'OpenSim.Region.Physics.BasicPhysicsPlugin' was loaded from 111 // The assembly named 'OpenSim.Region.Physics.BasicPhysicsPlugin' was loaded from
112 // 'file:///C:/OpenSim/trunk2/bin/Physics/OpenSim.Region.Physics.BasicPhysicsPlugin.dll' 112 // 'file:///C:/OpenSim/trunk2/bin/Physics/OpenSim.Region.Physics.BasicPhysicsPlugin.dll'
113 // using the LoadFrom context. The use of this context can result in unexpected behavior 113 // using the LoadFrom context. The use of this context can result in unexpected behavior
114 // for serialization, casting and dependency resolution. In almost all cases, it is recommended 114 // for serialization, casting and dependency resolution. In almost all cases, it is recommended
115 // that the LoadFrom context be avoided. This can be done by installing assemblies in the 115 // that the LoadFrom context be avoided. This can be done by installing assemblies in the
116 // Global Assembly Cache or in the ApplicationBase directory and using Assembly. 116 // Global Assembly Cache or in the ApplicationBase directory and using Assembly.
117 // Load when explicitly loading assemblies. 117 // Load when explicitly loading assemblies.
118 Assembly pluginAssembly = Assembly.LoadFrom(FileName); 118 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
diff --git a/OpenSim/Region/Physics/Manager/PhysicsSensor.cs b/OpenSim/Region/Physics/Manager/PhysicsSensor.cs
index ce53108..add741b 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsSensor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsSensor.cs
@@ -35,7 +35,7 @@ namespace OpenSim.Region.Physics.Manager
35 { 35 {
36 NONE = 0, 36 NONE = 0,
37 AGENT = 1, 37 AGENT = 1,
38 ACTIVE = 2, 38 ACTIVE = 2,
39 PASSIVE = 3, 39 PASSIVE = 3,
40 SCRIPTED = 4 40 SCRIPTED = 4
41 } 41 }
diff --git a/OpenSim/Region/Physics/Manager/ZeroMesher.cs b/OpenSim/Region/Physics/Manager/ZeroMesher.cs
index b98cb35..b759213 100644
--- a/OpenSim/Region/Physics/Manager/ZeroMesher.cs
+++ b/OpenSim/Region/Physics/Manager/ZeroMesher.cs
@@ -31,9 +31,9 @@ using OpenSim.Framework;
31/* 31/*
32 * This is the zero mesher. 32 * This is the zero mesher.
33 * Whatever you want him to mesh, he can't, telling you that by responding with a null pointer. 33 * Whatever you want him to mesh, he can't, telling you that by responding with a null pointer.
34 * Effectivly this is for switching off meshing and for testing as each physics machine should deal 34 * Effectivly this is for switching off meshing and for testing as each physics machine should deal
35 * with the null pointer situation. 35 * with the null pointer situation.
36 * But it's also a convenience thing, as physics machines can rely on having a mesher in any situation, even 36 * But it's also a convenience thing, as physics machines can rely on having a mesher in any situation, even
37 * if it's a dump one like this. 37 * if it's a dump one like this.
38 * Note, that this mesher is *not* living in a module but in the manager itself, so 38 * Note, that this mesher is *not* living in a module but in the manager itself, so
39 * it's always availabe and thus the default in case of configuration errors 39 * it's always availabe and thus the default in case of configuration errors
diff --git a/OpenSim/Region/Physics/Meshing/HelperTypes.cs b/OpenSim/Region/Physics/Meshing/HelperTypes.cs
index efc5968..584133c 100644
--- a/OpenSim/Region/Physics/Meshing/HelperTypes.cs
+++ b/OpenSim/Region/Physics/Meshing/HelperTypes.cs
@@ -49,7 +49,7 @@ public class Quaternion
49 } 49 }
50 public Quaternion(Vertex axis, float angle) 50 public Quaternion(Vertex axis, float angle)
51 { 51 {
52 // using (* 0.5) instead of (/2) 52 // using (* 0.5) instead of (/2)
53 w = (float)Math.Cos(angle * 0.5f); 53 w = (float)Math.Cos(angle * 0.5f);
54 x = axis.X * (float)Math.Sin(angle * 0.5f); 54 x = axis.X * (float)Math.Sin(angle * 0.5f);
55 y = axis.Y * (float)Math.Sin(angle * 0.5f); 55 y = axis.Y * (float)Math.Sin(angle * 0.5f);
@@ -65,8 +65,8 @@ public class Quaternion
65 c.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z; 65 c.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;
66 return c; 66 return c;
67 } 67 }
68 68
69 69
70 public Matrix4 computeMatrix() 70 public Matrix4 computeMatrix()
71 { 71 {
72 return new Matrix4(this); 72 return new Matrix4(this);
@@ -74,7 +74,7 @@ public class Quaternion
74 public void normalize() 74 public void normalize()
75 { 75 {
76 float mag = length(); 76 float mag = length();
77 77
78 w /= mag; 78 w /= mag;
79 x /= mag; 79 x /= mag;
80 y /= mag; 80 y /= mag;
@@ -367,7 +367,7 @@ public class Triangle
367 // It is assumed, that the triangles vertices are already set correctly 367 // It is assumed, that the triangles vertices are already set correctly
368 double p1x, p2x, p1y, p2y, p3x, p3y; 368 double p1x, p2x, p1y, p2y, p3x, p3y;
369 369
370 // Deviation of this routine: 370 // Deviation of this routine:
371 // A circle has the general equation (M-p)^2=r^2, where M and p are vectors 371 // A circle has the general equation (M-p)^2=r^2, where M and p are vectors
372 // this gives us three equations f(p)=r^2, each for one point p1, p2, p3 372 // this gives us three equations f(p)=r^2, each for one point p1, p2, p3
373 // putting respectively two equations together gives two equations 373 // putting respectively two equations together gives two equations
@@ -378,7 +378,7 @@ public class Triangle
378 // Now using the equations that are formed by the components of the vectors 378 // Now using the equations that are formed by the components of the vectors
379 // and isolate Mx lets you make one equation that only holds My 379 // and isolate Mx lets you make one equation that only holds My
380 // The rest is straight forward and eaasy :-) 380 // The rest is straight forward and eaasy :-)
381 // 381 //
382 382
383 /* helping variables for temporary results */ 383 /* helping variables for temporary results */
384 double c1, c2; 384 double c1, c2;
@@ -496,7 +496,7 @@ public class Triangle
496 v2 = vt; 496 v2 = vt;
497 } 497 }
498 498
499 // Dumps a triangle in the "raw faces" format, blender can import. This is for visualisation and 499 // Dumps a triangle in the "raw faces" format, blender can import. This is for visualisation and
500 // debugging purposes 500 // debugging purposes
501 public String ToStringRaw() 501 public String ToStringRaw()
502 { 502 {
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index 2e7ec15..4bf12c9 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -115,7 +115,7 @@ namespace OpenSim.Region.Physics.Meshing
115 for (iCurrentVertex = usedForSeed; iCurrentVertex < iMaxVertex; iCurrentVertex++) 115 for (iCurrentVertex = usedForSeed; iCurrentVertex < iMaxVertex; iCurrentVertex++)
116 { 116 {
117 // Background: A triangle mesh fulfills the delaunay condition if (iff!) 117 // Background: A triangle mesh fulfills the delaunay condition if (iff!)
118 // each circumlocutory circle (i.e. the circle that touches all three corners) 118 // each circumlocutory circle (i.e. the circle that touches all three corners)
119 // of each triangle is empty of other vertices. 119 // of each triangle is empty of other vertices.
120 // Obviously a single (seeding) triangle fulfills this condition. 120 // Obviously a single (seeding) triangle fulfills this condition.
121 // If we now add one vertex, we need to reconstruct all triangles, that 121 // If we now add one vertex, we need to reconstruct all triangles, that
@@ -132,7 +132,7 @@ namespace OpenSim.Region.Physics.Meshing
132 // Reconstruction phase. First step, dissolve each triangle into it's simplices, 132 // Reconstruction phase. First step, dissolve each triangle into it's simplices,
133 // i.e. it's "border lines" 133 // i.e. it's "border lines"
134 // Goal is to find "inner" borders and delete them, while the hull gets conserved. 134 // Goal is to find "inner" borders and delete them, while the hull gets conserved.
135 // Inner borders are special in the way that they always come twice, which is how we detect them 135 // Inner borders are special in the way that they always come twice, which is how we detect them
136 foreach (Triangle t in influencedTriangles) 136 foreach (Triangle t in influencedTriangles)
137 { 137 {
138 List<Simplex> newSimplices = t.GetSimplices(); 138 List<Simplex> newSimplices = t.GetSimplices();
@@ -142,8 +142,8 @@ namespace OpenSim.Region.Physics.Meshing
142 // Now sort the simplices. That will make identical ones reside side by side in the list 142 // Now sort the simplices. That will make identical ones reside side by side in the list
143 simplices.Sort(); 143 simplices.Sort();
144 144
145 // Look for duplicate simplices here. 145 // Look for duplicate simplices here.
146 // Remember, they are directly side by side in the list right now, 146 // Remember, they are directly side by side in the list right now,
147 // So we only check directly neighbours 147 // So we only check directly neighbours
148 int iSimplex; 148 int iSimplex;
149 List<Simplex> innerSimplices = new List<Simplex>(); 149 List<Simplex> innerSimplices = new List<Simplex>();
@@ -162,7 +162,7 @@ namespace OpenSim.Region.Physics.Meshing
162 } 162 }
163 163
164 // each simplex still in the list belongs to the hull of the region in question 164 // each simplex still in the list belongs to the hull of the region in question
165 // The new vertex (yes, we still deal with verices here :-)) forms a triangle 165 // The new vertex (yes, we still deal with verices here :-)) forms a triangle
166 // with each of these simplices. Build the new triangles and add them to the list 166 // with each of these simplices. Build the new triangles and add them to the list
167 foreach (Simplex s in simplices) 167 foreach (Simplex s in simplices)
168 { 168 {
@@ -206,14 +206,14 @@ namespace OpenSim.Region.Physics.Meshing
206 } 206 }
207 break; 207 break;
208 208
209 209
210 default: 210 default:
211 if (hshape == HollowShape.Same) 211 if (hshape == HollowShape.Same)
212 hshape= HollowShape.Square; 212 hshape= HollowShape.Square;
213 break; 213 break;
214 } 214 }
215 215
216 216
217 SimpleHull holeHull = null; 217 SimpleHull holeHull = null;
218 218
219 if (hshape == HollowShape.Square) 219 if (hshape == HollowShape.Square)
@@ -428,13 +428,13 @@ namespace OpenSim.Region.Physics.Meshing
428 UInt16 pathShearY = primShape.PathShearY; 428 UInt16 pathShearY = primShape.PathShearY;
429 Int16 twistTop = primShape.PathTwistBegin; 429 Int16 twistTop = primShape.PathTwistBegin;
430 Int16 twistBot = primShape.PathTwist; 430 Int16 twistBot = primShape.PathTwist;
431 431
432 432
433 //m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString()); 433 //m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString());
434 //m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString()); 434 //m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString());
435 //m_log.Error("ProfileBegin:" + primShape.ProfileBegin.ToString() + "," + primShape.ProfileBegin.ToString()); 435 //m_log.Error("ProfileBegin:" + primShape.ProfileBegin.ToString() + "," + primShape.ProfileBegin.ToString());
436 //m_log.Error("PathScale:" + primShape.PathScaleX.ToString() + "," + primShape.PathScaleY.ToString()); 436 //m_log.Error("PathScale:" + primShape.PathScaleX.ToString() + "," + primShape.PathScaleY.ToString());
437 437
438 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface 438 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface
439 // of a block are basically the same 439 // of a block are basically the same
440 // They may be warped differently but the shape is identical 440 // They may be warped differently but the shape is identical
@@ -469,7 +469,7 @@ namespace OpenSim.Region.Physics.Meshing
469 if (fProfileBeginAngle < fProfileEndAngle) 469 if (fProfileBeginAngle < fProfileEndAngle)
470 fProfileEndAngle -= 360.0; 470 fProfileEndAngle -= 360.0;
471 471
472 // Note, that we don't want to cut out a triangle, even if this is a 472 // Note, that we don't want to cut out a triangle, even if this is a
473 // good approximation for small cuts. Indeed we want to cut out an arc 473 // good approximation for small cuts. Indeed we want to cut out an arc
474 // and we approximate this arc by a polygon chain 474 // and we approximate this arc by a polygon chain
475 // Also note, that these vectors are of length 1.0 and thus their endpoints lay outside the model space 475 // Also note, that these vectors are of length 1.0 and thus their endpoints lay outside the model space
@@ -559,7 +559,7 @@ namespace OpenSim.Region.Physics.Meshing
559 extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100); 559 extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
560 //m_log.Warn("taperBotFactorX: " + extr.taperBotFactorX.ToString()); 560 //m_log.Warn("taperBotFactorX: " + extr.taperBotFactorX.ToString());
561 } 561 }
562 562
563 } 563 }
564 564
565 if (taperY != 100) 565 if (taperY != 100)
@@ -575,8 +575,8 @@ namespace OpenSim.Region.Physics.Meshing
575 //m_log.Warn("taperBotFactorY: " + extr.taperBotFactorY.ToString()); 575 //m_log.Warn("taperBotFactorY: " + extr.taperBotFactorY.ToString());
576 } 576 }
577 } 577 }
578 578
579 579
580 if (pathShearX != 0) 580 if (pathShearX != 0)
581 { 581 {
582 if (pathShearX > 50) 582 if (pathShearX > 50)
@@ -585,7 +585,7 @@ namespace OpenSim.Region.Physics.Meshing
585 extr.pushX = (((float)(256 - pathShearX) / 100) * -1f); 585 extr.pushX = (((float)(256 - pathShearX) / 100) * -1f);
586 // m_log.Warn("pushX: " + extr.pushX); 586 // m_log.Warn("pushX: " + extr.pushX);
587 } 587 }
588 else 588 else
589 { 589 {
590 extr.pushX = (float)pathShearX / 100; 590 extr.pushX = (float)pathShearX / 100;
591 // m_log.Warn("pushX: " + extr.pushX); 591 // m_log.Warn("pushX: " + extr.pushX);
@@ -600,7 +600,7 @@ namespace OpenSim.Region.Physics.Meshing
600 extr.pushY = (((float)(256 - pathShearY) / 100) * -1f); 600 extr.pushY = (((float)(256 - pathShearY) / 100) * -1f);
601 //m_log.Warn("pushY: " + extr.pushY); 601 //m_log.Warn("pushY: " + extr.pushY);
602 } 602 }
603 else 603 else
604 { 604 {
605 extr.pushY = (float)pathShearY / 100; 605 extr.pushY = (float)pathShearY / 100;
606 //m_log.Warn("pushY: " + extr.pushY); 606 //m_log.Warn("pushY: " + extr.pushY);
@@ -615,7 +615,7 @@ namespace OpenSim.Region.Physics.Meshing
615 extr.twistTop = 360 - (-1 * extr.twistTop); 615 extr.twistTop = 360 - (-1 * extr.twistTop);
616 616
617 } 617 }
618 618
619 619
620 extr.twistTop = (float)(extr.twistTop * DEG_TO_RAD); 620 extr.twistTop = (float)(extr.twistTop * DEG_TO_RAD);
621 } 621 }
@@ -660,7 +660,7 @@ namespace OpenSim.Region.Physics.Meshing
660 UInt16 pathShearY = primShape.PathShearY; 660 UInt16 pathShearY = primShape.PathShearY;
661 Int16 twistBot = primShape.PathTwist; 661 Int16 twistBot = primShape.PathTwist;
662 Int16 twistTop = primShape.PathTwistBegin; 662 Int16 twistTop = primShape.PathTwistBegin;
663 663
664 664
665 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface 665 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface
666 // of a block are basically the same 666 // of a block are basically the same
@@ -715,7 +715,7 @@ namespace OpenSim.Region.Physics.Meshing
715 //Vertex Q1Q12 = new Vertex(-0.46f, -0.18f, 0.0f); 715 //Vertex Q1Q12 = new Vertex(-0.46f, -0.18f, 0.0f);
716 //Vertex Q1Q13 = new Vertex(-0.43f, -0.24f, 0.0f); 716 //Vertex Q1Q13 = new Vertex(-0.43f, -0.24f, 0.0f);
717 //Vertex Q1Q14 = new Vertex(-0.40f, -0.30f, 0.0f); 717 //Vertex Q1Q14 = new Vertex(-0.40f, -0.30f, 0.0f);
718 718
719 SimpleHull outerHull = new SimpleHull(); 719 SimpleHull outerHull = new SimpleHull();
720 //Clockwise around the quadrants 720 //Clockwise around the quadrants
721 //outerHull.AddVertex(Q1Q15); 721 //outerHull.AddVertex(Q1Q15);
@@ -803,7 +803,7 @@ namespace OpenSim.Region.Physics.Meshing
803 if (fProfileBeginAngle < fProfileEndAngle) 803 if (fProfileBeginAngle < fProfileEndAngle)
804 fProfileEndAngle -= 360.0; 804 fProfileEndAngle -= 360.0;
805 805
806 // Note, that we don't want to cut out a triangle, even if this is a 806 // Note, that we don't want to cut out a triangle, even if this is a
807 // good approximation for small cuts. Indeed we want to cut out an arc 807 // good approximation for small cuts. Indeed we want to cut out an arc
808 // and we approximate this arc by a polygon chain 808 // and we approximate this arc by a polygon chain
809 // Also note, that these vectors are of length 1.0 and thus their endpoints lay outside the model space 809 // Also note, that these vectors are of length 1.0 and thus their endpoints lay outside the model space
@@ -940,7 +940,7 @@ namespace OpenSim.Region.Physics.Meshing
940 extr.pushY = (float)pathShearY / 100; 940 extr.pushY = (float)pathShearY / 100;
941 //m_log.Warn("pushY: " + extr.pushY); 941 //m_log.Warn("pushY: " + extr.pushY);
942 } 942 }
943 943
944 } 944 }
945 945
946 if (twistTop != 0) 946 if (twistTop != 0)
@@ -949,9 +949,9 @@ namespace OpenSim.Region.Physics.Meshing
949 if (extr.twistTop > 0) 949 if (extr.twistTop > 0)
950 { 950 {
951 extr.twistTop = 360 - (-1 * extr.twistTop); 951 extr.twistTop = 360 - (-1 * extr.twistTop);
952 952
953 } 953 }
954 954
955 955
956 extr.twistTop = (float)(extr.twistTop * DEG_TO_RAD); 956 extr.twistTop = (float)(extr.twistTop * DEG_TO_RAD);
957 } 957 }
@@ -967,7 +967,7 @@ namespace OpenSim.Region.Physics.Meshing
967 } 967 }
968 extr.twistMid = (float)(extr.twistMid * DEG_TO_RAD); 968 extr.twistMid = (float)(extr.twistMid * DEG_TO_RAD);
969 } 969 }
970 970
971 if (twistBot != 0) 971 if (twistBot != 0)
972 { 972 {
973 extr.twistBot = 180 * ((float)twistBot / 100); 973 extr.twistBot = 180 * ((float)twistBot / 100);
@@ -1013,7 +1013,7 @@ namespace OpenSim.Region.Physics.Meshing
1013 Vertex MM = new Vertex(-0.25f, -0.45f, 0.0f); 1013 Vertex MM = new Vertex(-0.25f, -0.45f, 0.0f);
1014 Vertex PM = new Vertex(+0.5f, 0f, 0.0f); 1014 Vertex PM = new Vertex(+0.5f, 0f, 0.0f);
1015 Vertex PP = new Vertex(-0.25f, +0.45f, 0.0f); 1015 Vertex PP = new Vertex(-0.25f, +0.45f, 0.0f);
1016 1016
1017 1017
1018 SimpleHull outerHull = new SimpleHull(); 1018 SimpleHull outerHull = new SimpleHull();
1019 //outerHull.AddVertex(MM); 1019 //outerHull.AddVertex(MM);
@@ -1022,7 +1022,7 @@ namespace OpenSim.Region.Physics.Meshing
1022 outerHull.AddVertex(PP); 1022 outerHull.AddVertex(PP);
1023 outerHull.AddVertex(MM); 1023 outerHull.AddVertex(MM);
1024 outerHull.AddVertex(PM); 1024 outerHull.AddVertex(PM);
1025 1025
1026 // Deal with cuts now 1026 // Deal with cuts now
1027 if ((profileBegin != 0) || (profileEnd != 0)) 1027 if ((profileBegin != 0) || (profileEnd != 0))
1028 { 1028 {
@@ -1034,7 +1034,7 @@ namespace OpenSim.Region.Physics.Meshing
1034 if (fProfileBeginAngle < fProfileEndAngle) 1034 if (fProfileBeginAngle < fProfileEndAngle)
1035 fProfileEndAngle -= 360.0; 1035 fProfileEndAngle -= 360.0;
1036 1036
1037 // Note, that we don't want to cut out a triangle, even if this is a 1037 // Note, that we don't want to cut out a triangle, even if this is a
1038 // good approximation for small cuts. Indeed we want to cut out an arc 1038 // good approximation for small cuts. Indeed we want to cut out an arc
1039 // and we approximate this arc by a polygon chain 1039 // and we approximate this arc by a polygon chain
1040 // Also note, that these vectors are of length 1.0 and thus their endpoints lay outside the model space 1040 // Also note, that these vectors are of length 1.0 and thus their endpoints lay outside the model space
@@ -1177,7 +1177,7 @@ namespace OpenSim.Region.Physics.Meshing
1177 extr.twistTop = 360 - (-1 * extr.twistTop); 1177 extr.twistTop = 360 - (-1 * extr.twistTop);
1178 1178
1179 } 1179 }
1180 1180
1181 1181
1182 extr.twistTop = (float)(extr.twistTop * DEG_TO_RAD); 1182 extr.twistTop = (float)(extr.twistTop * DEG_TO_RAD);
1183 } 1183 }
@@ -1255,7 +1255,7 @@ namespace OpenSim.Region.Physics.Meshing
1255 1255
1256 1256
1257 // Base Faces of the Icosahedron (20) 1257 // Base Faces of the Icosahedron (20)
1258 SphereLODTriangle(v1, v2, v3, diameter, LOD, m); 1258 SphereLODTriangle(v1, v2, v3, diameter, LOD, m);
1259 SphereLODTriangle(v4, v3, v2, diameter, LOD, m); 1259 SphereLODTriangle(v4, v3, v2, diameter, LOD, m);
1260 SphereLODTriangle(v4, v5, v6, diameter, LOD, m); 1260 SphereLODTriangle(v4, v5, v6, diameter, LOD, m);
1261 SphereLODTriangle(v4, v9, v5, diameter, LOD, m); 1261 SphereLODTriangle(v4, v9, v5, diameter, LOD, m);
@@ -1284,7 +1284,7 @@ namespace OpenSim.Region.Physics.Meshing
1284 v.Z *= size.Z; 1284 v.Z *= size.Z;
1285 } 1285 }
1286 1286
1287 // This was built with the normals pointing inside.. 1287 // This was built with the normals pointing inside..
1288 // therefore we have to invert the normals 1288 // therefore we have to invert the normals
1289 foreach (Triangle t in m.triangles) 1289 foreach (Triangle t in m.triangles)
1290 { 1290 {
@@ -1308,7 +1308,7 @@ namespace OpenSim.Region.Physics.Meshing
1308 v.Y *= size.Y; 1308 v.Y *= size.Y;
1309 v.Z *= size.Z; 1309 v.Z *= size.Z;
1310 } 1310 }
1311 // This was built with the normals pointing inside.. 1311 // This was built with the normals pointing inside..
1312 // therefore we have to invert the normals 1312 // therefore we have to invert the normals
1313 foreach (Triangle t in sm.triangles) 1313 foreach (Triangle t in sm.triangles)
1314 { 1314 {
@@ -1462,7 +1462,7 @@ namespace OpenSim.Region.Physics.Meshing
1462 default: 1462 default:
1463 mesh = CreateBoxMesh(primName, primShape, size); 1463 mesh = CreateBoxMesh(primName, primShape, size);
1464 CalcNormals(mesh); 1464 CalcNormals(mesh);
1465 //Set default mesh to cube otherwise it'll return 1465 //Set default mesh to cube otherwise it'll return
1466 // null and crash on the 'setMesh' method in the physics plugins. 1466 // null and crash on the 'setMesh' method in the physics plugins.
1467 //mesh = null; 1467 //mesh = null;
1468 break; 1468 break;
@@ -1472,6 +1472,6 @@ namespace OpenSim.Region.Physics.Meshing
1472 return mesh; 1472 return mesh;
1473 } 1473 }
1474 1474
1475 1475
1476 } 1476 }
1477} 1477}
diff --git a/OpenSim/Region/Physics/Meshing/SimpleHull.cs b/OpenSim/Region/Physics/Meshing/SimpleHull.cs
index 2896d3b..5eeadae 100644
--- a/OpenSim/Region/Physics/Meshing/SimpleHull.cs
+++ b/OpenSim/Region/Physics/Meshing/SimpleHull.cs
@@ -337,7 +337,7 @@ namespace OpenSim.Region.Physics.Meshing
337 } 337 }
338 338
339 339
340 if (baseStartVertex == null) // i.e. no simplex fulfilled the "outside" condition. 340 if (baseStartVertex == null) // i.e. no simplex fulfilled the "outside" condition.
341 // In otherwords, subtractHull completely embraces baseHull 341 // In otherwords, subtractHull completely embraces baseHull
342 { 342 {
343 return result; 343 return result;
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 4165484..5024b5d 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -36,7 +36,7 @@ namespace OpenSim.Region.Physics.OdePlugin
36 /// <summary> 36 /// <summary>
37 /// Various properties that ODE uses for AMotors but isn't exposed in ODE.NET so we must define them ourselves. 37 /// Various properties that ODE uses for AMotors but isn't exposed in ODE.NET so we must define them ourselves.
38 /// </summary> 38 /// </summary>
39 39
40 public enum dParam : int 40 public enum dParam : int
41 { 41 {
42 LowStop = 0, 42 LowStop = 0,
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Physics.OdePlugin
106 private CollisionCategories m_collisionFlags = (CollisionCategories.Geom 106 private CollisionCategories m_collisionFlags = (CollisionCategories.Geom
107 | CollisionCategories.Space 107 | CollisionCategories.Space
108 | CollisionCategories.Body 108 | CollisionCategories.Body
109 | CollisionCategories.Character 109 | CollisionCategories.Character
110 | CollisionCategories.Land); 110 | CollisionCategories.Land);
111 public IntPtr Body; 111 public IntPtr Body;
112 private OdeScene _parent_scene; 112 private OdeScene _parent_scene;
@@ -145,7 +145,7 @@ namespace OpenSim.Region.Physics.OdePlugin
145 { 145 {
146 m_colliderarr[i] = false; 146 m_colliderarr[i] = false;
147 } 147 }
148 CAPSULE_LENGTH = (size.Z - ((size.Z * height_fudge_factor))); 148 CAPSULE_LENGTH = (size.Z - ((size.Z * height_fudge_factor)));
149 149
150 lock (OdeScene.OdeLock) 150 lock (OdeScene.OdeLock)
151 { 151 {
@@ -338,7 +338,7 @@ namespace OpenSim.Region.Physics.OdePlugin
338 } 338 }
339 339
340 /// <summary> 340 /// <summary>
341 /// turn the PID controller on or off. 341 /// turn the PID controller on or off.
342 /// The PID Controller will turn on all by itself in many situations 342 /// The PID Controller will turn on all by itself in many situations
343 /// </summary> 343 /// </summary>
344 /// <param name="status"></param> 344 /// <param name="status"></param>
@@ -354,7 +354,7 @@ namespace OpenSim.Region.Physics.OdePlugin
354 354
355 /// <summary> 355 /// <summary>
356 /// This 'puts' an avatar somewhere in the physics space. 356 /// This 'puts' an avatar somewhere in the physics space.
357 /// Not really a good choice unless you 'know' it's a good 357 /// Not really a good choice unless you 'know' it's a good
358 /// spot otherwise you're likely to orbit the avatar. 358 /// spot otherwise you're likely to orbit the avatar.
359 /// </summary> 359 /// </summary>
360 public override PhysicsVector Position 360 public override PhysicsVector Position
@@ -389,7 +389,7 @@ namespace OpenSim.Region.Physics.OdePlugin
389 lock (OdeScene.OdeLock) 389 lock (OdeScene.OdeLock)
390 { 390 {
391 d.JointDestroy(Amotor); 391 d.JointDestroy(Amotor);
392 392
393 PhysicsVector SetSize = value; 393 PhysicsVector SetSize = value;
394 float prevCapsule = CAPSULE_LENGTH; 394 float prevCapsule = CAPSULE_LENGTH;
395 float capsuleradius = CAPSULE_RADIUS; 395 float capsuleradius = CAPSULE_RADIUS;
@@ -405,7 +405,7 @@ namespace OpenSim.Region.Physics.OdePlugin
405 AvatarGeomAndBodyCreation(_position.X, _position.Y, 405 AvatarGeomAndBodyCreation(_position.X, _position.Y,
406 _position.Z + (Math.Abs(CAPSULE_LENGTH - prevCapsule) * 2), m_tensor); 406 _position.Z + (Math.Abs(CAPSULE_LENGTH - prevCapsule) * 2), m_tensor);
407 Velocity = new PhysicsVector(0f, 0f, 0f); 407 Velocity = new PhysicsVector(0f, 0f, 0f);
408 408
409 } 409 }
410 _parent_scene.geom_name_map[Shell] = m_name; 410 _parent_scene.geom_name_map[Shell] = m_name;
411 _parent_scene.actor_name_map[Shell] = (PhysicsActor) this; 411 _parent_scene.actor_name_map[Shell] = (PhysicsActor) this;
@@ -423,7 +423,7 @@ namespace OpenSim.Region.Physics.OdePlugin
423 int dAMotorEuler = 1; 423 int dAMotorEuler = 1;
424 _parent_scene.waitForSpaceUnlock(_parent_scene.space); 424 _parent_scene.waitForSpaceUnlock(_parent_scene.space);
425 Shell = d.CreateCapsule(_parent_scene.space, CAPSULE_RADIUS, CAPSULE_LENGTH); 425 Shell = d.CreateCapsule(_parent_scene.space, CAPSULE_RADIUS, CAPSULE_LENGTH);
426 426
427 d.GeomSetCategoryBits(Shell, (int)m_collisionCategories); 427 d.GeomSetCategoryBits(Shell, (int)m_collisionCategories);
428 d.GeomSetCollideBits(Shell, (int)m_collisionFlags); 428 d.GeomSetCollideBits(Shell, (int)m_collisionFlags);
429 429
@@ -442,8 +442,8 @@ namespace OpenSim.Region.Physics.OdePlugin
442 442
443 d.GeomSetBody(Shell, Body); 443 d.GeomSetBody(Shell, Body);
444 444
445 445
446 // The purpose of the AMotor here is to keep the avatar's physical 446 // The purpose of the AMotor here is to keep the avatar's physical
447 // surrogate from rotating while moving 447 // surrogate from rotating while moving
448 Amotor = d.JointCreateAMotor(_parent_scene.world, IntPtr.Zero); 448 Amotor = d.JointCreateAMotor(_parent_scene.world, IntPtr.Zero);
449 d.JointAttach(Amotor, Body, IntPtr.Zero); 449 d.JointAttach(Amotor, Body, IntPtr.Zero);
@@ -455,7 +455,7 @@ namespace OpenSim.Region.Physics.OdePlugin
455 d.JointSetAMotorAngle(Amotor, 0, 0); 455 d.JointSetAMotorAngle(Amotor, 0, 0);
456 d.JointSetAMotorAngle(Amotor, 1, 0); 456 d.JointSetAMotorAngle(Amotor, 1, 0);
457 d.JointSetAMotorAngle(Amotor, 2, 0); 457 d.JointSetAMotorAngle(Amotor, 2, 0);
458 458
459 // These lowstops and high stops are effectively (no wiggle room) 459 // These lowstops and high stops are effectively (no wiggle room)
460 d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f); 460 d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f);
461 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f); 461 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f);
@@ -464,23 +464,23 @@ namespace OpenSim.Region.Physics.OdePlugin
464 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f); 464 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f);
465 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f); 465 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f);
466 466
467 // Fudge factor is 1f by default, we're setting it to 0. We don't want it to Fudge or the 467 // Fudge factor is 1f by default, we're setting it to 0. We don't want it to Fudge or the
468 // capped cyllinder will fall over 468 // capped cyllinder will fall over
469 d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f); 469 d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f);
470 d.JointSetAMotorParam(Amotor, (int)dParam.FMax, tensor); 470 d.JointSetAMotorParam(Amotor, (int)dParam.FMax, tensor);
471 471
472 //d.Matrix3 bodyrotation = d.BodyGetRotation(Body); 472 //d.Matrix3 bodyrotation = d.BodyGetRotation(Body);
473 //d.QfromR( 473 //d.QfromR(
474 //d.Matrix3 checkrotation = new d.Matrix3(0.7071068,0.5, -0.7071068, 474 //d.Matrix3 checkrotation = new d.Matrix3(0.7071068,0.5, -0.7071068,
475 // 475 //
476 //m_log.Info("[PHYSICSAV]: Rotation: " + bodyrotation.M00 + " : " + bodyrotation.M01 + " : " + bodyrotation.M02 + " : " + bodyrotation.M10 + " : " + bodyrotation.M11 + " : " + bodyrotation.M12 + " : " + bodyrotation.M20 + " : " + bodyrotation.M21 + " : " + bodyrotation.M22); 476 //m_log.Info("[PHYSICSAV]: Rotation: " + bodyrotation.M00 + " : " + bodyrotation.M01 + " : " + bodyrotation.M02 + " : " + bodyrotation.M10 + " : " + bodyrotation.M11 + " : " + bodyrotation.M12 + " : " + bodyrotation.M20 + " : " + bodyrotation.M21 + " : " + bodyrotation.M22);
477 //standupStraight(); 477 //standupStraight();
478 478
479 479
480 480
481 } 481 }
482 482
483 // 483 //
484 /// <summary> 484 /// <summary>
485 /// Uses the capped cyllinder volume formula to calculate the avatar's mass. 485 /// Uses the capped cyllinder volume formula to calculate the avatar's mass.
486 /// This may be used in calculations in the scene/scenepresence 486 /// This may be used in calculations in the scene/scenepresence
@@ -508,13 +508,13 @@ namespace OpenSim.Region.Physics.OdePlugin
508 508
509 } 509 }
510 510
511// This code is very useful. Written by DanX0r. We're just not using it right now. 511// This code is very useful. Written by DanX0r. We're just not using it right now.
512// Commented out to prevent a warning. 512// Commented out to prevent a warning.
513// 513//
514// private void standupStraight() 514// private void standupStraight()
515// { 515// {
516// // The purpose of this routine here is to quickly stabilize the Body while it's popped up in the air. 516// // The purpose of this routine here is to quickly stabilize the Body while it's popped up in the air.
517// // The amotor needs a few seconds to stabilize so without it, the avatar shoots up sky high when you 517// // The amotor needs a few seconds to stabilize so without it, the avatar shoots up sky high when you
518// // change appearance and when you enter the simulator 518// // change appearance and when you enter the simulator
519// // After this routine is done, the amotor stabilizes much quicker 519// // After this routine is done, the amotor stabilizes much quicker
520// d.Vector3 feet; 520// d.Vector3 feet;
@@ -558,7 +558,7 @@ namespace OpenSim.Region.Physics.OdePlugin
558 if (_zeroFlag) 558 if (_zeroFlag)
559 return new PhysicsVector(0f, 0f, 0f); 559 return new PhysicsVector(0f, 0f, 0f);
560 m_lastUpdateSent = false; 560 m_lastUpdateSent = false;
561 return _velocity; 561 return _velocity;
562 } 562 }
563 set 563 set
564 { 564 {
@@ -601,7 +601,7 @@ namespace OpenSim.Region.Physics.OdePlugin
601 } 601 }
602 602
603 /// <summary> 603 /// <summary>
604 /// Adds the force supplied to the Target Velocity 604 /// Adds the force supplied to the Target Velocity
605 /// The PID controller takes this target velocity and tries to make it a reality 605 /// The PID controller takes this target velocity and tries to make it a reality
606 /// </summary> 606 /// </summary>
607 /// <param name="force"></param> 607 /// <param name="force"></param>
@@ -616,7 +616,7 @@ namespace OpenSim.Region.Physics.OdePlugin
616 // _target_velocity.Y += force.Y; 616 // _target_velocity.Y += force.Y;
617 //_target_velocity.Z += force.Z; 617 //_target_velocity.Z += force.Z;
618 } 618 }
619 else 619 else
620 { 620 {
621 m_pidControllerActive = true; 621 m_pidControllerActive = true;
622 _target_velocity.X += force.X; 622 _target_velocity.X += force.X;
@@ -637,7 +637,7 @@ namespace OpenSim.Region.Physics.OdePlugin
637 d.BodyAddForce(Body, force.X, force.Y, force.Z); 637 d.BodyAddForce(Body, force.X, force.Y, force.Z);
638 //d.BodySetRotation(Body, ref m_StandUpRotation); 638 //d.BodySetRotation(Body, ref m_StandUpRotation);
639 //standupStraight(); 639 //standupStraight();
640 640
641 } 641 }
642 } 642 }
643 643
@@ -655,16 +655,16 @@ namespace OpenSim.Region.Physics.OdePlugin
655 { 655 {
656 // no lock; for now it's only called from within Simulate() 656 // no lock; for now it's only called from within Simulate()
657 657
658 // If the PID Controller isn't active then we set our force 658 // If the PID Controller isn't active then we set our force
659 // calculating base velocity to the current position 659 // calculating base velocity to the current position
660 660
661 661
662 if (m_pidControllerActive == false) 662 if (m_pidControllerActive == false)
663 { 663 {
664 _zeroPosition = d.BodyGetPosition(Body); 664 _zeroPosition = d.BodyGetPosition(Body);
665 } 665 }
666 //PidStatus = true; 666 //PidStatus = true;
667 667
668 PhysicsVector vec = new PhysicsVector(); 668 PhysicsVector vec = new PhysicsVector();
669 d.Vector3 vel = d.BodyGetLinearVel(Body); 669 d.Vector3 vel = d.BodyGetLinearVel(Body);
670 float movementdivisor = 1f; 670 float movementdivisor = 1f;
@@ -798,13 +798,13 @@ namespace OpenSim.Region.Physics.OdePlugin
798 _velocity.X = 0.0f; 798 _velocity.X = 0.0f;
799 _velocity.Y = 0.0f; 799 _velocity.Y = 0.0f;
800 _velocity.Z = 0.0f; 800 _velocity.Z = 0.0f;
801 801
802 // Did we send out the 'stopped' message? 802 // Did we send out the 'stopped' message?
803 if (!m_lastUpdateSent) 803 if (!m_lastUpdateSent)
804 { 804 {
805 m_lastUpdateSent = true; 805 m_lastUpdateSent = true;
806 //base.RequestPhysicsterseUpdate(); 806 //base.RequestPhysicsterseUpdate();
807 807
808 } 808 }
809 } 809 }
810 else 810 else
@@ -815,7 +815,7 @@ namespace OpenSim.Region.Physics.OdePlugin
815 _velocity.Y = (vec.Y); 815 _velocity.Y = (vec.Y);
816 816
817 _velocity.Z = (vec.Z); 817 _velocity.Z = (vec.Z);
818 818
819 if (_velocity.Z < -6 && !m_hackSentFall) 819 if (_velocity.Z < -6 && !m_hackSentFall)
820 { 820 {
821 m_hackSentFall = true; 821 m_hackSentFall = true;
@@ -849,7 +849,7 @@ namespace OpenSim.Region.Physics.OdePlugin
849 849
850 d.GeomDestroy(Shell); 850 d.GeomDestroy(Shell);
851 _parent_scene.geom_name_map.Remove(Shell); 851 _parent_scene.geom_name_map.Remove(Shell);
852 852
853 //kill the body 853 //kill the body
854 d.BodyDestroy(Body); 854 d.BodyDestroy(Body);
855 } 855 }
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 37a8b77..f1886e4 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -111,7 +111,7 @@ namespace OpenSim.Region.Physics.OdePlugin
111 private IntPtr _linkJointGroup = (IntPtr)0; 111 private IntPtr _linkJointGroup = (IntPtr)0;
112 private PhysicsActor _parent = null; 112 private PhysicsActor _parent = null;
113 private PhysicsActor m_taintparent = null; 113 private PhysicsActor m_taintparent = null;
114 114
115 private bool iscolliding = false; 115 private bool iscolliding = false;
116 private bool m_isphysical = false; 116 private bool m_isphysical = false;
117 private bool m_isSelected = false; 117 private bool m_isSelected = false;
@@ -202,7 +202,7 @@ namespace OpenSim.Region.Physics.OdePlugin
202 m_taintadd = true; 202 m_taintadd = true;
203 _parent_scene.AddPhysicsActorTaint(this); 203 _parent_scene.AddPhysicsActorTaint(this);
204 // don't do .add() here; old geoms get recycled with the same hash 204 // don't do .add() here; old geoms get recycled with the same hash
205 205
206 } 206 }
207 207
208 public override int PhysicsActorType 208 public override int PhysicsActorType
@@ -232,9 +232,9 @@ namespace OpenSim.Region.Physics.OdePlugin
232 public override bool Selected 232 public override bool Selected
233 { 233 {
234 set { 234 set {
235 // This only makes the object not collidable if the object 235 // This only makes the object not collidable if the object
236 // is physical or the object is modified somehow *IN THE FUTURE* 236 // is physical or the object is modified somehow *IN THE FUTURE*
237 // without this, if an avatar selects prim, they can walk right 237 // without this, if an avatar selects prim, they can walk right
238 // through it while it's selected 238 // through it while it's selected
239 239
240 if ((m_isphysical && !_zeroFlag) || !value) 240 if ((m_isphysical && !_zeroFlag) || !value)
@@ -262,7 +262,7 @@ namespace OpenSim.Region.Physics.OdePlugin
262 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 262 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
263 } 263 }
264 //m_log.Warn("Setting Geom to: " + prim_geom); 264 //m_log.Warn("Setting Geom to: " + prim_geom);
265 265
266 } 266 }
267 267
268 public void enableBodySoft() 268 public void enableBodySoft()
@@ -277,7 +277,7 @@ namespace OpenSim.Region.Physics.OdePlugin
277 public void disableBodySoft() 277 public void disableBodySoft()
278 { 278 {
279 m_disabled = true; 279 m_disabled = true;
280 280
281 if (m_isphysical) 281 if (m_isphysical)
282 if (Body != (IntPtr)0) 282 if (Body != (IntPtr)0)
283 d.BodyDisable(Body); 283 d.BodyDisable(Body);
@@ -307,7 +307,7 @@ namespace OpenSim.Region.Physics.OdePlugin
307 307
308 d.BodySetAutoDisableFlag(Body, true); 308 d.BodySetAutoDisableFlag(Body, true);
309 d.BodySetAutoDisableSteps(Body, 20); 309 d.BodySetAutoDisableSteps(Body, 20);
310 310
311 m_interpenetrationcount = 0; 311 m_interpenetrationcount = 0;
312 m_collisionscore = 0; 312 m_collisionscore = 0;
313 m_disabled = false; 313 m_disabled = false;
@@ -327,7 +327,7 @@ namespace OpenSim.Region.Physics.OdePlugin
327 { 327 {
328 float volume = 0; 328 float volume = 0;
329 329
330 // No material is passed to the physics engines yet.. soo.. 330 // No material is passed to the physics engines yet.. soo..
331 // we're using the m_density constant in the class definition 331 // we're using the m_density constant in the class definition
332 332
333 333
@@ -340,7 +340,7 @@ namespace OpenSim.Region.Physics.OdePlugin
340 340
341 volume = _size.X*_size.Y*_size.Z; 341 volume = _size.X*_size.Y*_size.Z;
342 342
343 // If the user has 'hollowed out' 343 // If the user has 'hollowed out'
344 // ProfileHollow is one of those 0 to 50000 values :P 344 // ProfileHollow is one of those 0 to 50000 values :P
345 // we like percentages better.. so turning into a percentage 345 // we like percentages better.. so turning into a percentage
346 346
@@ -415,7 +415,7 @@ namespace OpenSim.Region.Physics.OdePlugin
415 // We don't know what the shape is yet, so use default 415 // We don't know what the shape is yet, so use default
416 volume = _size.X * _size.Y * _size.Z; 416 volume = _size.X * _size.Y * _size.Z;
417 } 417 }
418 // If the user has 'hollowed out' 418 // If the user has 'hollowed out'
419 // ProfileHollow is one of those 0 to 50000 values :P 419 // ProfileHollow is one of those 0 to 50000 values :P
420 // we like percentages better.. so turning into a percentage 420 // we like percentages better.. so turning into a percentage
421 421
@@ -427,8 +427,8 @@ namespace OpenSim.Region.Physics.OdePlugin
427 float hollowVolume = 0; 427 float hollowVolume = 0;
428 switch (_pbs.HollowShape) 428 switch (_pbs.HollowShape)
429 { 429 {
430 430
431 case HollowShape.Same: 431 case HollowShape.Same:
432 case HollowShape.Circle: 432 case HollowShape.Circle:
433 // Hollow shape is a perfect cyllinder in respect to the cube's scale 433 // Hollow shape is a perfect cyllinder in respect to the cube's scale
434 // Cyllinder hollow volume calculation 434 // Cyllinder hollow volume calculation
@@ -447,7 +447,7 @@ namespace OpenSim.Region.Physics.OdePlugin
447 hollowVolume = hollowsizex * hollowsizey * hollowsizez; 447 hollowVolume = hollowsizex * hollowsizey * hollowsizez;
448 break; 448 break;
449 449
450 450
451 451
452 case HollowShape.Triangle: 452 case HollowShape.Triangle:
453 // Equilateral Triangular Prism volume hollow calculation 453 // Equilateral Triangular Prism volume hollow calculation
@@ -465,7 +465,7 @@ namespace OpenSim.Region.Physics.OdePlugin
465 volume = volume - hollowVolume; 465 volume = volume - hollowVolume;
466 } 466 }
467 break; 467 break;
468 468
469 case ProfileShape.HalfCircle: 469 case ProfileShape.HalfCircle:
470 if (_pbs.PathCurve == (byte)Extrusion.Curve1) 470 if (_pbs.PathCurve == (byte)Extrusion.Curve1)
471 { 471 {
@@ -490,13 +490,13 @@ namespace OpenSim.Region.Physics.OdePlugin
490 } 490 }
491 break; 491 break;
492 case ProfileShape.EquilateralTriangle: 492 case ProfileShape.EquilateralTriangle:
493 /* 493 /*
494 v = (abs((xB*yA-xA*yB)+(xC*yB-xB*yC)+(xA*yC-xC*yA))/2) * h 494 v = (abs((xB*yA-xA*yB)+(xC*yB-xB*yC)+(xA*yC-xC*yA))/2) * h
495 495
496 // seed mesh 496 // seed mesh
497 Vertex MM = new Vertex(-0.25f, -0.45f, 0.0f); 497 Vertex MM = new Vertex(-0.25f, -0.45f, 0.0f);
498 Vertex PM = new Vertex(+0.5f, 0f, 0.0f); 498 Vertex PM = new Vertex(+0.5f, 0f, 0.0f);
499 Vertex PP = new Vertex(-0.25f, +0.45f, 0.0f); 499 Vertex PP = new Vertex(-0.25f, +0.45f, 0.0f);
500 */ 500 */
501 float xA = -0.25f * _size.X; 501 float xA = -0.25f * _size.X;
502 float yA = -0.45f * _size.Y; 502 float yA = -0.45f * _size.Y;
@@ -509,7 +509,7 @@ namespace OpenSim.Region.Physics.OdePlugin
509 509
510 volume = (float)((Math.Abs((xB * yA - xA * yB) + (xC * yB - xB * yC) + (xA * yC - xC * yA)) / 2) * _size.Z); 510 volume = (float)((Math.Abs((xB * yA - xA * yB) + (xC * yB - xB * yC) + (xA * yC - xC * yA)) / 2) * _size.Z);
511 511
512 // If the user has 'hollowed out' 512 // If the user has 'hollowed out'
513 // ProfileHollow is one of those 0 to 50000 values :P 513 // ProfileHollow is one of those 0 to 50000 values :P
514 // we like percentages better.. so turning into a percentage 514 // we like percentages better.. so turning into a percentage
515 float fhollowFactor = ((float)_pbs.ProfileHollow / 1.9f); 515 float fhollowFactor = ((float)_pbs.ProfileHollow / 1.9f);
@@ -521,7 +521,7 @@ namespace OpenSim.Region.Physics.OdePlugin
521 float hollowVolume = 0; 521 float hollowVolume = 0;
522 switch (_pbs.HollowShape) 522 switch (_pbs.HollowShape)
523 { 523 {
524 524
525 case HollowShape.Same: 525 case HollowShape.Same:
526 case HollowShape.Triangle: 526 case HollowShape.Triangle:
527 // Equilateral Triangular Prism volume hollow calculation 527 // Equilateral Triangular Prism volume hollow calculation
@@ -550,7 +550,7 @@ namespace OpenSim.Region.Physics.OdePlugin
550 hollowVolume = ((float)((Math.PI * Math.Pow(hRadius, 2) * hLength)/2) * hollowAmount); 550 hollowVolume = ((float)((Math.PI * Math.Pow(hRadius, 2) * hLength)/2) * hollowAmount);
551 break; 551 break;
552 552
553 553
554 default: 554 default:
555 hollowVolume = 0; 555 hollowVolume = 0;
556 break; 556 break;
@@ -560,7 +560,7 @@ namespace OpenSim.Region.Physics.OdePlugin
560 break; 560 break;
561 561
562 default: 562 default:
563 // we don't have all of the volume formulas yet so 563 // we don't have all of the volume formulas yet so
564 // use the common volume formula for all 564 // use the common volume formula for all
565 volume = _size.X*_size.Y*_size.Z; 565 volume = _size.X*_size.Y*_size.Z;
566 break; 566 break;
@@ -568,7 +568,7 @@ namespace OpenSim.Region.Physics.OdePlugin
568 568
569 // Calculate Path cut effect on volume 569 // Calculate Path cut effect on volume
570 // Not exact, in the triangle hollow example 570 // Not exact, in the triangle hollow example
571 // They should never be zero or less then zero.. 571 // They should never be zero or less then zero..
572 // we'll ignore it if it's less then zero 572 // we'll ignore it if it's less then zero
573 573
574 // ProfileEnd and ProfileBegin are values 574 // ProfileEnd and ProfileBegin are values
@@ -672,11 +672,11 @@ namespace OpenSim.Region.Physics.OdePlugin
672 672
673 public void setMesh(OdeScene parent_scene, IMesh mesh) 673 public void setMesh(OdeScene parent_scene, IMesh mesh)
674 { 674 {
675 // This sleeper is there to moderate how long it takes between 675 // This sleeper is there to moderate how long it takes between
676 // setting up the mesh and pre-processing it when we get rapid fire mesh requests on a single object 676 // setting up the mesh and pre-processing it when we get rapid fire mesh requests on a single object
677 677
678 Thread.Sleep(10); 678 Thread.Sleep(10);
679 679
680 //Kill Body so that mesh can re-make the geom 680 //Kill Body so that mesh can re-make the geom
681 if (IsPhysical && Body != (IntPtr) 0) 681 if (IsPhysical && Body != (IntPtr) 0)
682 { 682 {
@@ -694,9 +694,9 @@ namespace OpenSim.Region.Physics.OdePlugin
694 3*sizeof (int)); 694 3*sizeof (int));
695 d.GeomTriMeshDataPreprocess(_triMeshData); 695 d.GeomTriMeshDataPreprocess(_triMeshData);
696 696
697 697
698 _parent_scene.waitForSpaceUnlock(m_targetSpace); 698 _parent_scene.waitForSpaceUnlock(m_targetSpace);
699 699
700 try 700 try
701 { 701 {
702 if (prim_geom == (IntPtr)0) 702 if (prim_geom == (IntPtr)0)
@@ -706,7 +706,7 @@ namespace OpenSim.Region.Physics.OdePlugin
706 } 706 }
707 catch (AccessViolationException) 707 catch (AccessViolationException)
708 { 708 {
709 709
710 m_log.Error("[PHYSICS]: MESH LOCKED"); 710 m_log.Error("[PHYSICS]: MESH LOCKED");
711 return; 711 return;
712 } 712 }
@@ -715,7 +715,7 @@ namespace OpenSim.Region.Physics.OdePlugin
715 // Recreate the body 715 // Recreate the body
716 m_interpenetrationcount = 0; 716 m_interpenetrationcount = 0;
717 m_collisionscore = 0; 717 m_collisionscore = 0;
718 718
719 enableBody(); 719 enableBody();
720 720
721 } 721 }
@@ -724,7 +724,7 @@ namespace OpenSim.Region.Physics.OdePlugin
724 public void ProcessTaints(float timestep) 724 public void ProcessTaints(float timestep)
725 { 725 {
726 726
727 727
728 if (m_taintadd) 728 if (m_taintadd)
729 { 729 {
730 changeadd(timestep); 730 changeadd(timestep);
@@ -779,7 +779,7 @@ namespace OpenSim.Region.Physics.OdePlugin
779 } 779 }
780 780
781 private void changeAngularLock(float timestep) 781 private void changeAngularLock(float timestep)
782 { 782 {
783 // do we have a Physical object? 783 // do we have a Physical object?
784 if (Body != IntPtr.Zero) 784 if (Body != IntPtr.Zero)
785 { 785 {
@@ -809,7 +809,7 @@ namespace OpenSim.Region.Physics.OdePlugin
809 809
810 private void changelink(float timestep) 810 private void changelink(float timestep)
811 { 811 {
812 812
813 if (_parent == null && m_taintparent != null) 813 if (_parent == null && m_taintparent != null)
814 { 814 {
815 if (m_taintparent.PhysicsActorType == (int)ActorTypes.Prim) 815 if (m_taintparent.PhysicsActorType == (int)ActorTypes.Prim)
@@ -834,14 +834,14 @@ namespace OpenSim.Region.Physics.OdePlugin
834 m_linkJoint = (IntPtr)0; 834 m_linkJoint = (IntPtr)0;
835 835
836 } 836 }
837 837
838 838
839 _parent = m_taintparent; 839 _parent = m_taintparent;
840 } 840 }
841 841
842 private void changeSelectedStatus(float timestep) 842 private void changeSelectedStatus(float timestep)
843 { 843 {
844 844
845 if (m_taintselected) 845 if (m_taintselected)
846 { 846 {
847 847
@@ -849,9 +849,9 @@ namespace OpenSim.Region.Physics.OdePlugin
849 m_collisionCategories = CollisionCategories.Selected; 849 m_collisionCategories = CollisionCategories.Selected;
850 m_collisionFlags = (CollisionCategories.Sensor | CollisionCategories.Space); 850 m_collisionFlags = (CollisionCategories.Sensor | CollisionCategories.Space);
851 851
852 // We do the body disable soft twice because 'in theory' a collision could have happened 852 // We do the body disable soft twice because 'in theory' a collision could have happened
853 // in between the disabling and the collision properties setting 853 // in between the disabling and the collision properties setting
854 // which would wake the physical body up from a soft disabling and potentially cause it to fall 854 // which would wake the physical body up from a soft disabling and potentially cause it to fall
855 // through the ground. 855 // through the ground.
856 856
857 if (m_isphysical) 857 if (m_isphysical)
@@ -873,9 +873,9 @@ namespace OpenSim.Region.Physics.OdePlugin
873 } 873 }
874 else 874 else
875 { 875 {
876 876
877 m_collisionCategories = CollisionCategories.Geom; 877 m_collisionCategories = CollisionCategories.Geom;
878 878
879 if (m_isphysical) 879 if (m_isphysical)
880 m_collisionCategories |= CollisionCategories.Body; 880 m_collisionCategories |= CollisionCategories.Body;
881 881
@@ -898,10 +898,10 @@ namespace OpenSim.Region.Physics.OdePlugin
898 enableBodySoft(); 898 enableBodySoft();
899 } 899 }
900 900
901 901
902 } 902 }
903 903
904 904
905 resetCollisionAccounting(); 905 resetCollisionAccounting();
906 m_isSelected = m_taintselected; 906 m_isSelected = m_taintselected;
907 } 907 }
@@ -918,21 +918,21 @@ namespace OpenSim.Region.Physics.OdePlugin
918 m_taintselected = m_isSelected; 918 m_taintselected = m_isSelected;
919 919
920 m_taintsize = _size; 920 m_taintsize = _size;
921 921
922 922
923 m_taintshape = false; 923 m_taintshape = false;
924 924
925 m_taintforce = false; 925 m_taintforce = false;
926 926
927 m_taintdisable = false; 927 m_taintdisable = false;
928 928
929 m_taintVelocity = PhysicsVector.Zero; 929 m_taintVelocity = PhysicsVector.Zero;
930 } 930 }
931 public void changeadd(float timestep) 931 public void changeadd(float timestep)
932 { 932 {
933 933
934 934
935 935
936 int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position); 936 int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position);
937 IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position); 937 IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position);
938 938
@@ -941,7 +941,7 @@ namespace OpenSim.Region.Physics.OdePlugin
941 941
942 m_targetSpace = targetspace; 942 m_targetSpace = targetspace;
943 943
944 944
945 945
946 if (_mesh != null) 946 if (_mesh != null)
947 { 947 {
@@ -1010,7 +1010,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1010 { 1010 {
1011 m_log.Warn("[PHYSICS]: Unable to create physics proxy for object"); 1011 m_log.Warn("[PHYSICS]: Unable to create physics proxy for object");
1012 ode.dunlock(_parent_scene.world); 1012 ode.dunlock(_parent_scene.world);
1013 return; 1013 return;
1014 } 1014 }
1015 } 1015 }
1016 } 1016 }
@@ -1060,7 +1060,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1060 1060
1061 1061
1062 } 1062 }
1063 1063
1064 _parent_scene.geom_name_map[prim_geom] = this.m_primName; 1064 _parent_scene.geom_name_map[prim_geom] = this.m_primName;
1065 _parent_scene.actor_name_map[prim_geom] = (PhysicsActor)this; 1065 _parent_scene.actor_name_map[prim_geom] = (PhysicsActor)this;
1066 1066
@@ -1072,7 +1072,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1072 } 1072 }
1073 public void changemove(float timestep) 1073 public void changemove(float timestep)
1074 { 1074 {
1075 1075
1076 1076
1077 1077
1078 if (m_isphysical) 1078 if (m_isphysical)
@@ -1080,7 +1080,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1080 // This is a fallback.. May no longer be necessary. 1080 // This is a fallback.. May no longer be necessary.
1081 if (Body == (IntPtr) 0) 1081 if (Body == (IntPtr) 0)
1082 enableBody(); 1082 enableBody();
1083 //Prim auto disable after 20 frames, 1083 //Prim auto disable after 20 frames,
1084 //if you move it, re-enable the prim manually. 1084 //if you move it, re-enable the prim manually.
1085 if (_parent != null) 1085 if (_parent != null)
1086 { 1086 {
@@ -1102,7 +1102,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1102 } 1102 }
1103 } 1103 }
1104 d.BodyEnable(Body); 1104 d.BodyEnable(Body);
1105 1105
1106 } 1106 }
1107 else 1107 else
1108 { 1108 {
@@ -1122,10 +1122,10 @@ namespace OpenSim.Region.Physics.OdePlugin
1122 d.SpaceAdd(m_targetSpace, prim_geom); 1122 d.SpaceAdd(m_targetSpace, prim_geom);
1123 } 1123 }
1124 } 1124 }
1125 1125
1126 1126
1127 changeSelectedStatus(timestep); 1127 changeSelectedStatus(timestep);
1128 1128
1129 resetCollisionAccounting(); 1129 resetCollisionAccounting();
1130 m_taintposition = _position; 1130 m_taintposition = _position;
1131 } 1131 }
@@ -1140,42 +1140,42 @@ namespace OpenSim.Region.Physics.OdePlugin
1140 { 1140 {
1141 float PID_D = 2200.0f; 1141 float PID_D = 2200.0f;
1142 //float PID_P = 900.0f; 1142 //float PID_P = 900.0f;
1143 1143
1144 1144
1145 float m_mass = CalculateMass(); 1145 float m_mass = CalculateMass();
1146 1146
1147 fz = 0f; 1147 fz = 0f;
1148 //m_log.Info(m_collisionFlags.ToString()); 1148 //m_log.Info(m_collisionFlags.ToString());
1149 1149
1150 1150
1151 1151
1152 1152
1153 if (m_buoyancy != 0) 1153 if (m_buoyancy != 0)
1154 { 1154 {
1155 1155
1156 if (m_buoyancy > 0) 1156 if (m_buoyancy > 0)
1157 { 1157 {
1158 fz = (((-1 * _parent_scene.gravityz) * m_buoyancy) * m_mass); 1158 fz = (((-1 * _parent_scene.gravityz) * m_buoyancy) * m_mass);
1159 1159
1160 //d.Vector3 l_velocity = d.BodyGetLinearVel(Body); 1160 //d.Vector3 l_velocity = d.BodyGetLinearVel(Body);
1161 //m_log.Info("Using Buoyancy: " + buoyancy + " G: " + (_parent_scene.gravityz * m_buoyancy) + "mass:" + m_mass + " Pos: " + Position.ToString()); 1161 //m_log.Info("Using Buoyancy: " + buoyancy + " G: " + (_parent_scene.gravityz * m_buoyancy) + "mass:" + m_mass + " Pos: " + Position.ToString());
1162 } 1162 }
1163 else 1163 else
1164 { 1164 {
1165 fz = (-1 * (((-1 * _parent_scene.gravityz) * (-1 * m_buoyancy)) * m_mass)); 1165 fz = (-1 * (((-1 * _parent_scene.gravityz) * (-1 * m_buoyancy)) * m_mass));
1166 } 1166 }
1167 1167
1168 1168
1169 } 1169 }
1170 1170
1171 if (m_usePID) 1171 if (m_usePID)
1172 { 1172 {
1173 // If we're using the PID controller, then we have no gravity 1173 // If we're using the PID controller, then we have no gravity
1174 fz = (-1 * _parent_scene.gravityz) * this.Mass; 1174 fz = (-1 * _parent_scene.gravityz) * this.Mass;
1175 1175
1176 // no lock; for now it's only called from within Simulate() 1176 // no lock; for now it's only called from within Simulate()
1177 1177
1178 // If the PID Controller isn't active then we set our force 1178 // If the PID Controller isn't active then we set our force
1179 // calculating base velocity to the current position 1179 // calculating base velocity to the current position
1180 if (Environment.OSVersion.Platform == PlatformID.Unix) 1180 if (Environment.OSVersion.Platform == PlatformID.Unix)
1181 { 1181 {
@@ -1189,7 +1189,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1189 } 1189 }
1190 PID_D = 35f; 1190 PID_D = 35f;
1191 1191
1192 1192
1193 //PID_P = 1.0f; 1193 //PID_P = 1.0f;
1194 float PID_G = 25; 1194 float PID_G = 25;
1195 1195
@@ -1197,7 +1197,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1197 { 1197 {
1198 PID_G = PID_G / m_PIDTau; 1198 PID_G = PID_G / m_PIDTau;
1199 } 1199 }
1200 1200
1201 1201
1202 if ((PID_G - m_PIDTau) <= 0) 1202 if ((PID_G - m_PIDTau) <= 0)
1203 { 1203 {
@@ -1205,15 +1205,15 @@ namespace OpenSim.Region.Physics.OdePlugin
1205 } 1205 }
1206 //PidStatus = true; 1206 //PidStatus = true;
1207 1207
1208 1208
1209 1209
1210 1210
1211 PhysicsVector vec = new PhysicsVector(); 1211 PhysicsVector vec = new PhysicsVector();
1212 d.Vector3 vel = d.BodyGetLinearVel(Body); 1212 d.Vector3 vel = d.BodyGetLinearVel(Body);
1213 1213
1214 1214
1215 d.Vector3 pos = d.BodyGetPosition(Body); 1215 d.Vector3 pos = d.BodyGetPosition(Body);
1216 _target_velocity = 1216 _target_velocity =
1217 new PhysicsVector( 1217 new PhysicsVector(
1218 (m_PIDTarget.X - pos.X) * ((PID_G - m_PIDTau) * timestep), 1218 (m_PIDTarget.X - pos.X) * ((PID_G - m_PIDTau) * timestep),
1219 (m_PIDTarget.Y - pos.Y) * ((PID_G - m_PIDTau) * timestep), 1219 (m_PIDTarget.Y - pos.Y) * ((PID_G - m_PIDTau) * timestep),
@@ -1222,18 +1222,18 @@ namespace OpenSim.Region.Physics.OdePlugin
1222 1222
1223 1223
1224 // if velocity is zero, use position control; otherwise, velocity control 1224 // if velocity is zero, use position control; otherwise, velocity control
1225 1225
1226 if (_target_velocity.IsIdentical(PhysicsVector.Zero,0.1f)) 1226 if (_target_velocity.IsIdentical(PhysicsVector.Zero,0.1f))
1227 { 1227 {
1228 // keep track of where we stopped. No more slippin' & slidin' 1228 // keep track of where we stopped. No more slippin' & slidin'
1229 1229
1230 1230
1231 // We only want to deactivate the PID Controller if we think we want to have our surrogate 1231 // We only want to deactivate the PID Controller if we think we want to have our surrogate
1232 // react to the physics scene by moving it's position. 1232 // react to the physics scene by moving it's position.
1233 // Avatar to Avatar collisions 1233 // Avatar to Avatar collisions
1234 // Prim to avatar collisions 1234 // Prim to avatar collisions
1235 1235
1236 1236
1237 //fx = (_target_velocity.X - vel.X) * (PID_D) + (_zeroPosition.X - pos.X) * (PID_P * 2); 1237 //fx = (_target_velocity.X - vel.X) * (PID_D) + (_zeroPosition.X - pos.X) * (PID_P * 2);
1238 //fy = (_target_velocity.Y - vel.Y) * (PID_D) + (_zeroPosition.Y - pos.Y) * (PID_P * 2); 1238 //fy = (_target_velocity.Y - vel.Y) * (PID_D) + (_zeroPosition.Y - pos.Y) * (PID_P * 2);
1239 //fz = fz + (_target_velocity.Z - vel.Z) * (PID_D) + (_zeroPosition.Z - pos.Z) * PID_P; 1239 //fz = fz + (_target_velocity.Z - vel.Z) * (PID_D) + (_zeroPosition.Z - pos.Z) * PID_P;
@@ -1245,27 +1245,27 @@ namespace OpenSim.Region.Physics.OdePlugin
1245 } 1245 }
1246 else 1246 else
1247 { 1247 {
1248 1248
1249 _zeroFlag = false; 1249 _zeroFlag = false;
1250 1250
1251 // We're flying and colliding with something 1251 // We're flying and colliding with something
1252 fx = ((_target_velocity.X) - vel.X) * (PID_D); 1252 fx = ((_target_velocity.X) - vel.X) * (PID_D);
1253 fy = ((_target_velocity.Y) - vel.Y) * (PID_D); 1253 fy = ((_target_velocity.Y) - vel.Y) * (PID_D);
1254
1255 1254
1256 1255
1257 1256
1257
1258 // vec.Z = (_target_velocity.Z - vel.Z) * PID_D + (_zeroPosition.Z - pos.Z) * PID_P; 1258 // vec.Z = (_target_velocity.Z - vel.Z) * PID_D + (_zeroPosition.Z - pos.Z) * PID_P;
1259 1259
1260 fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass); 1260 fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass);
1261 } 1261 }
1262 1262
1263 } 1263 }
1264 1264
1265 fx *= m_mass; 1265 fx *= m_mass;
1266 fy *= m_mass; 1266 fy *= m_mass;
1267 //fz *= m_mass; 1267 //fz *= m_mass;
1268 1268
1269 //m_log.Info("[OBJPID]: X:" + fx.ToString() + " Y:" + fy.ToString() + " Z:" + fz.ToString()); 1269 //m_log.Info("[OBJPID]: X:" + fx.ToString() + " Y:" + fy.ToString() + " Z:" + fz.ToString());
1270 if (fx != 0 || fy != 0 || fz != 0) 1270 if (fx != 0 || fy != 0 || fz != 0)
1271 { 1271 {
@@ -1285,7 +1285,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1285 1285
1286 public void rotate(float timestep) 1286 public void rotate(float timestep)
1287 { 1287 {
1288 1288
1289 1289
1290 d.Quaternion myrot = new d.Quaternion(); 1290 d.Quaternion myrot = new d.Quaternion();
1291 myrot.W = _orientation.w; 1291 myrot.W = _orientation.w;
@@ -1299,7 +1299,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1299 if (!m_angularlock.IsIdentical(new PhysicsVector(1, 1, 1), 0)) 1299 if (!m_angularlock.IsIdentical(new PhysicsVector(1, 1, 1), 0))
1300 createAMotor(m_angularlock); 1300 createAMotor(m_angularlock);
1301 } 1301 }
1302 1302
1303 resetCollisionAccounting(); 1303 resetCollisionAccounting();
1304 m_taintrot = _orientation; 1304 m_taintrot = _orientation;
1305 } 1305 }
@@ -1313,21 +1313,21 @@ namespace OpenSim.Region.Physics.OdePlugin
1313 1313
1314 public void changedisable(float timestep) 1314 public void changedisable(float timestep)
1315 { 1315 {
1316 1316
1317 m_disabled = true; 1317 m_disabled = true;
1318 if (Body != (IntPtr)0) 1318 if (Body != (IntPtr)0)
1319 { 1319 {
1320 d.BodyDisable(Body); 1320 d.BodyDisable(Body);
1321 Body = (IntPtr)0; 1321 Body = (IntPtr)0;
1322 } 1322 }
1323 1323
1324 1324
1325 m_taintdisable = false; 1325 m_taintdisable = false;
1326 } 1326 }
1327 1327
1328 public void changePhysicsStatus(float timestep) 1328 public void changePhysicsStatus(float timestep)
1329 { 1329 {
1330 1330
1331 1331
1332 if (m_isphysical == true) 1332 if (m_isphysical == true)
1333 { 1333 {
@@ -1352,7 +1352,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1352 1352
1353 public void changesize(float timestamp) 1353 public void changesize(float timestamp)
1354 { 1354 {
1355 1355
1356 //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom)) 1356 //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom))
1357 //{ 1357 //{
1358 // m_taintsize = _size; 1358 // m_taintsize = _size;
@@ -1369,7 +1369,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1369 { 1369 {
1370 // Cleanup meshing here 1370 // Cleanup meshing here
1371 } 1371 }
1372 //kill body to rebuild 1372 //kill body to rebuild
1373 if (IsPhysical && Body != (IntPtr) 0) 1373 if (IsPhysical && Body != (IntPtr) 0)
1374 { 1374 {
1375 disableBody(); 1375 disableBody();
@@ -1531,7 +1531,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1531 { 1531 {
1532 m_collisionFlags |= CollisionCategories.Water; 1532 m_collisionFlags |= CollisionCategories.Water;
1533 } 1533 }
1534 else 1534 else
1535 { 1535 {
1536 m_collisionFlags &= ~CollisionCategories.Water; 1536 m_collisionFlags &= ~CollisionCategories.Water;
1537 } 1537 }
@@ -1541,7 +1541,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1541 1541
1542 public void changeshape(float timestamp) 1542 public void changeshape(float timestamp)
1543 { 1543 {
1544 1544
1545 string oldname = _parent_scene.geom_name_map[prim_geom]; 1545 string oldname = _parent_scene.geom_name_map[prim_geom];
1546 1546
1547 // Cleanup of old prim geometry and Bodies 1547 // Cleanup of old prim geometry and Bodies
@@ -1579,7 +1579,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1579 // Re creates body on size. 1579 // Re creates body on size.
1580 // EnableBody also does setMass() 1580 // EnableBody also does setMass()
1581 enableBody(); 1581 enableBody();
1582 1582
1583 } 1583 }
1584 } 1584 }
1585 else 1585 else
@@ -1684,7 +1684,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1684 d.BodyEnable(Body); 1684 d.BodyEnable(Body);
1685 } 1685 }
1686 } 1686 }
1687 1687
1688 1688
1689 _parent_scene.geom_name_map[prim_geom] = oldname; 1689 _parent_scene.geom_name_map[prim_geom] = oldname;
1690 1690
@@ -1698,7 +1698,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1698 { 1698 {
1699 if (!m_isSelected) 1699 if (!m_isSelected)
1700 { 1700 {
1701 1701
1702 1702
1703 1703
1704 lock (m_forcelist) 1704 lock (m_forcelist)
@@ -1728,7 +1728,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1728 { 1728 {
1729 if (!m_isSelected) 1729 if (!m_isSelected)
1730 { 1730 {
1731 1731
1732 1732
1733 Thread.Sleep(20); 1733 Thread.Sleep(20);
1734 if (IsPhysical) 1734 if (IsPhysical)
@@ -1737,8 +1737,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1737 { 1737 {
1738 d.BodySetLinearVel(Body, m_taintVelocity.X, m_taintVelocity.Y, m_taintVelocity.Z); 1738 d.BodySetLinearVel(Body, m_taintVelocity.X, m_taintVelocity.Y, m_taintVelocity.Z);
1739 } 1739 }
1740 } 1740 }
1741 1741
1742 //resetCollisionAccounting(); 1742 //resetCollisionAccounting();
1743 } 1743 }
1744 m_taintVelocity = PhysicsVector.Zero; 1744 m_taintVelocity = PhysicsVector.Zero;
@@ -1794,7 +1794,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1794 { 1794 {
1795 get { return _position; } 1795 get { return _position; }
1796 1796
1797 set { _position = value; 1797 set { _position = value;
1798 //m_log.Info("[PHYSICS]: " + _position.ToString()); 1798 //m_log.Info("[PHYSICS]: " + _position.ToString());
1799 } 1799 }
1800 } 1800 }
@@ -1838,7 +1838,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1838 { 1838 {
1839 get 1839 get
1840 { 1840 {
1841 // Averate previous velocity with the new one so 1841 // Averate previous velocity with the new one so
1842 // client object interpolation works a 'little' better 1842 // client object interpolation works a 'little' better
1843 PhysicsVector returnVelocity = new PhysicsVector(); 1843 PhysicsVector returnVelocity = new PhysicsVector();
1844 returnVelocity.X = (m_lastVelocity.X + _velocity.X)/2; 1844 returnVelocity.X = (m_lastVelocity.X + _velocity.X)/2;
@@ -1849,7 +1849,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1849 set 1849 set
1850 { 1850 {
1851 _velocity = value; 1851 _velocity = value;
1852 1852
1853 m_taintVelocity = value; 1853 m_taintVelocity = value;
1854 _parent_scene.AddPhysicsActorTaint(this); 1854 _parent_scene.AddPhysicsActorTaint(this);
1855 } 1855 }
@@ -1898,11 +1898,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1898 if (_zeroFlag) 1898 if (_zeroFlag)
1899 return pv; 1899 return pv;
1900 m_lastUpdateSent = false; 1900 m_lastUpdateSent = false;
1901 1901
1902 if (m_rotationalVelocity.IsIdentical(pv, 0.2f)) 1902 if (m_rotationalVelocity.IsIdentical(pv, 0.2f))
1903 return pv; 1903 return pv;
1904 1904
1905 return m_rotationalVelocity; 1905 return m_rotationalVelocity;
1906 } 1906 }
1907 set { m_rotationalVelocity = value; } 1907 set { m_rotationalVelocity = value; }
1908 } 1908 }
@@ -1948,7 +1948,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1948 } 1948 }
1949 1949
1950 public void UpdatePositionAndVelocity() 1950 public void UpdatePositionAndVelocity()
1951 { 1951 {
1952 // no lock; called from Simulate() -- if you call this from elsewhere, gotta lock or do Monitor.Enter/Exit! 1952 // no lock; called from Simulate() -- if you call this from elsewhere, gotta lock or do Monitor.Enter/Exit!
1953 if (_parent != null) 1953 if (_parent != null)
1954 { 1954 {
@@ -1963,7 +1963,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1963 d.Quaternion ori = d.BodyGetQuaternion(Body); 1963 d.Quaternion ori = d.BodyGetQuaternion(Body);
1964 d.Vector3 vel = d.BodyGetLinearVel(Body); 1964 d.Vector3 vel = d.BodyGetLinearVel(Body);
1965 d.Vector3 rotvel = d.BodyGetAngularVel(Body); 1965 d.Vector3 rotvel = d.BodyGetAngularVel(Body);
1966 1966
1967 PhysicsVector l_position = new PhysicsVector(); 1967 PhysicsVector l_position = new PhysicsVector();
1968 1968
1969 // kluge to keep things in bounds. ODE lets dead avatars drift away (they should be removed!) 1969 // kluge to keep things in bounds. ODE lets dead avatars drift away (they should be removed!)
@@ -2000,16 +2000,16 @@ namespace OpenSim.Region.Physics.OdePlugin
2000 2000
2001 if (l_position.Z < 0) 2001 if (l_position.Z < 0)
2002 { 2002 {
2003 // This is so prim that get lost underground don't fall forever and suck up 2003 // This is so prim that get lost underground don't fall forever and suck up
2004 // 2004 //
2005 // Sim resources and memory. 2005 // Sim resources and memory.
2006 // Disables the prim's movement physics.... 2006 // Disables the prim's movement physics....
2007 // It's a hack and will generate a console message if it fails. 2007 // It's a hack and will generate a console message if it fails.
2008 2008
2009 //IsPhysical = false; 2009 //IsPhysical = false;
2010 if (_parent == null) 2010 if (_parent == null)
2011 base.RaiseOutOfBounds(_position); 2011 base.RaiseOutOfBounds(_position);
2012 2012
2013 _acceleration.X = 0; 2013 _acceleration.X = 0;
2014 _acceleration.Y = 0; 2014 _acceleration.Y = 0;
2015 _acceleration.Z = 0; 2015 _acceleration.Z = 0;
@@ -2020,10 +2020,10 @@ namespace OpenSim.Region.Physics.OdePlugin
2020 m_rotationalVelocity.X = 0; 2020 m_rotationalVelocity.X = 0;
2021 m_rotationalVelocity.Y = 0; 2021 m_rotationalVelocity.Y = 0;
2022 m_rotationalVelocity.Z = 0; 2022 m_rotationalVelocity.Z = 0;
2023 2023
2024 if (_parent == null) 2024 if (_parent == null)
2025 base.RequestPhysicsterseUpdate(); 2025 base.RequestPhysicsterseUpdate();
2026 2026
2027 m_throttleUpdates = false; 2027 m_throttleUpdates = false;
2028 throttleCounter = 0; 2028 throttleCounter = 0;
2029 _zeroFlag = true; 2029 _zeroFlag = true;
@@ -2065,10 +2065,10 @@ namespace OpenSim.Region.Physics.OdePlugin
2065 m_throttleUpdates = false; 2065 m_throttleUpdates = false;
2066 throttleCounter = 0; 2066 throttleCounter = 0;
2067 m_rotationalVelocity = pv; 2067 m_rotationalVelocity = pv;
2068 2068
2069 if (_parent == null) 2069 if (_parent == null)
2070 base.RequestPhysicsterseUpdate(); 2070 base.RequestPhysicsterseUpdate();
2071 2071
2072 m_lastUpdateSent = true; 2072 m_lastUpdateSent = true;
2073 } 2073 }
2074 } 2074 }
@@ -2087,11 +2087,11 @@ namespace OpenSim.Region.Physics.OdePlugin
2087 _velocity.X = vel.X; 2087 _velocity.X = vel.X;
2088 _velocity.Y = vel.Y; 2088 _velocity.Y = vel.Y;
2089 _velocity.Z = vel.Z; 2089 _velocity.Z = vel.Z;
2090 2090
2091 _acceleration = ((_velocity - m_lastVelocity) / 0.1f); 2091 _acceleration = ((_velocity - m_lastVelocity) / 0.1f);
2092 _acceleration = new PhysicsVector(_velocity.X - m_lastVelocity.X / 0.1f, _velocity.Y - m_lastVelocity.Y / 0.1f, _velocity.Z - m_lastVelocity.Z / 0.1f); 2092 _acceleration = new PhysicsVector(_velocity.X - m_lastVelocity.X / 0.1f, _velocity.Y - m_lastVelocity.Y / 0.1f, _velocity.Z - m_lastVelocity.Z / 0.1f);
2093 //m_log.Info("[PHYSICS]: V1: " + _velocity + " V2: " + m_lastVelocity + " Acceleration: " + _acceleration.ToString()); 2093 //m_log.Info("[PHYSICS]: V1: " + _velocity + " V2: " + m_lastVelocity + " Acceleration: " + _acceleration.ToString());
2094 2094
2095 if (_velocity.IsIdentical(pv, 0.5f)) 2095 if (_velocity.IsIdentical(pv, 0.5f))
2096 { 2096 {
2097 m_rotationalVelocity = pv; 2097 m_rotationalVelocity = pv;
@@ -2173,7 +2173,7 @@ namespace OpenSim.Region.Physics.OdePlugin
2173 { 2173 {
2174 m_tensor = 5f; 2174 m_tensor = 5f;
2175 } 2175 }
2176 2176
2177 float axisnum = 3; 2177 float axisnum = 3;
2178 2178
2179 axisnum = (axisnum - (axis.X + axis.Y + axis.Z)); 2179 axisnum = (axisnum - (axis.X + axis.Y + axis.Z));
@@ -2222,7 +2222,7 @@ namespace OpenSim.Region.Physics.OdePlugin
2222 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f); 2222 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f);
2223 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f); 2223 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f);
2224 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f); 2224 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f);
2225 2225
2226 d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f); 2226 d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f);
2227 d.JointSetAMotorParam(Amotor, (int)dParam.FMax, m_tensor); 2227 d.JointSetAMotorParam(Amotor, (int)dParam.FMax, m_tensor);
2228 } 2228 }
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index d795e45..c663fb0 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -42,7 +42,7 @@ using OpenSim.Region.Physics.Manager;
42namespace OpenSim.Region.Physics.OdePlugin 42namespace OpenSim.Region.Physics.OdePlugin
43{ 43{
44 /// <summary> 44 /// <summary>
45 /// ODE plugin 45 /// ODE plugin
46 /// </summary> 46 /// </summary>
47 public class OdePlugin : IPhysicsPlugin 47 public class OdePlugin : IPhysicsPlugin
48 { 48 {
@@ -51,7 +51,6 @@ namespace OpenSim.Region.Physics.OdePlugin
51 private CollisionLocker ode; 51 private CollisionLocker ode;
52 private OdeScene _mScene; 52 private OdeScene _mScene;
53 53
54
55 public OdePlugin() 54 public OdePlugin()
56 { 55 {
57 ode = new CollisionLocker(); 56 ode = new CollisionLocker();
@@ -81,15 +80,13 @@ namespace OpenSim.Region.Physics.OdePlugin
81 } 80 }
82 } 81 }
83 82
84 83 public enum StatusIndicators : int
85 public enum StatusIndicators : int
86 { 84 {
87 Generic = 0, 85 Generic = 0,
88 Start = 1, 86 Start = 1,
89 End = 2 87 End = 2
90 } 88 }
91 89
92
93 public struct sCollisionData 90 public struct sCollisionData
94 { 91 {
95 public uint ColliderLocalId; 92 public uint ColliderLocalId;
@@ -165,7 +162,6 @@ namespace OpenSim.Region.Physics.OdePlugin
165 private float mAvatarObjectContactFriction = 75f; 162 private float mAvatarObjectContactFriction = 75f;
166 private float mAvatarObjectContactBounce = 0.1f; 163 private float mAvatarObjectContactBounce = 0.1f;
167 164
168
169 private float avPIDD = 3200f; 165 private float avPIDD = 3200f;
170 private float avPIDP = 1400f; 166 private float avPIDP = 1400f;
171 private float avCapRadius = 0.37f; 167 private float avCapRadius = 0.37f;
@@ -175,13 +171,12 @@ namespace OpenSim.Region.Physics.OdePlugin
175 private float avMovementDivisorWalk = 1.3f; 171 private float avMovementDivisorWalk = 1.3f;
176 private float avMovementDivisorRun = 0.8f; 172 private float avMovementDivisorRun = 0.8f;
177 173
178
179 private float[] _heightmap; 174 private float[] _heightmap;
180 175
181 private float[] _watermap; 176 private float[] _watermap;
182 177
183 private float[] _origheightmap; 178 private float[] _origheightmap;
184 179
185 private d.NearCallback nearCallback; 180 private d.NearCallback nearCallback;
186 public d.TriCallback triCallback; 181 public d.TriCallback triCallback;
187 public d.TriArrayCallback triArrayCallback; 182 public d.TriArrayCallback triArrayCallback;
@@ -200,7 +195,6 @@ namespace OpenSim.Region.Physics.OdePlugin
200 private d.Contact AvatarMovementTerrainContact; 195 private d.Contact AvatarMovementTerrainContact;
201 private d.Contact WaterContact; 196 private d.Contact WaterContact;
202 197
203
204//Ckrinke: Comment out until used. We declare it, initialize it, but do not use it 198//Ckrinke: Comment out until used. We declare it, initialize it, but do not use it
205//Ckrinke private int m_randomizeWater = 200; 199//Ckrinke private int m_randomizeWater = 200;
206 private int m_physicsiterations = 10; 200 private int m_physicsiterations = 10;
@@ -233,7 +227,6 @@ namespace OpenSim.Region.Physics.OdePlugin
233 227
234 private IConfigSource m_config; 228 private IConfigSource m_config;
235 229
236
237 /// <summary> 230 /// <summary>
238 /// Initiailizes the scene 231 /// Initiailizes the scene
239 /// Sets many properties that ODE requires to be stable 232 /// Sets many properties that ODE requires to be stable
@@ -245,44 +238,34 @@ namespace OpenSim.Region.Physics.OdePlugin
245 nearCallback = near; 238 nearCallback = near;
246 triCallback = TriCallback; 239 triCallback = TriCallback;
247 triArrayCallback = TriArrayCallback; 240 triArrayCallback = TriArrayCallback;
248
249
250
251 241
252 lock (OdeLock) 242 lock (OdeLock)
253 { 243 {
254 244 // Create the world and the first space
255 // Creat the world and the first space
256 world = d.WorldCreate(); 245 world = d.WorldCreate();
257 space = d.HashSpaceCreate(IntPtr.Zero); 246 space = d.HashSpaceCreate(IntPtr.Zero);
258 247
259 contactgroup = d.JointGroupCreate(0); 248 contactgroup = d.JointGroupCreate(0);
260 //contactgroup 249 //contactgroup
261 250
262
263
264
265 d.WorldSetAutoDisableFlag(world, false); 251 d.WorldSetAutoDisableFlag(world, false);
266
267 } 252 }
268 253
269 // zero out a heightmap array float array (single dimention [flattened])) 254 // zero out a heightmap array float array (single dimention [flattened]))
270 _heightmap = new float[514*514]; 255 _heightmap = new float[514*514];
271 _watermap = new float[258 * 258]; 256 _watermap = new float[258 * 258];
272 257
273 // Zero out the prim spaces array (we split our space into smaller spaces so 258 // Zero out the prim spaces array (we split our space into smaller spaces so
274 // we can hit test less. 259 // we can hit test less.
275
276 } 260 }
277 261
278
279 // Initialize the mesh plugin 262 // Initialize the mesh plugin
280 public override void Initialise(IMesher meshmerizer, IConfigSource config) 263 public override void Initialise(IMesher meshmerizer, IConfigSource config)
281 { 264 {
282 mesher = meshmerizer; 265 mesher = meshmerizer;
283 m_config = config; 266 m_config = config;
284 // Defaults 267 // Defaults
285 268
286 if (Environment.OSVersion.Platform == PlatformID.Unix) 269 if (Environment.OSVersion.Platform == PlatformID.Unix)
287 { 270 {
288 avPIDD = 3200.0f; 271 avPIDD = 3200.0f;
@@ -349,10 +332,7 @@ namespace OpenSim.Region.Physics.OdePlugin
349 avPIDP = physicsconfig.GetFloat("av_pid_proportional_win", 900.0f); 332 avPIDP = physicsconfig.GetFloat("av_pid_proportional_win", 900.0f);
350 avStandupTensor = physicsconfig.GetFloat("av_capsule_standup_tensor_win", 550000f); 333 avStandupTensor = physicsconfig.GetFloat("av_capsule_standup_tensor_win", 550000f);
351 } 334 }
352
353
354 } 335 }
355
356 } 336 }
357 337
358 staticPrimspace = new IntPtr[(int)(300 / metersInSpace), (int)(300 / metersInSpace)]; 338 staticPrimspace = new IntPtr[(int)(300 / metersInSpace), (int)(300 / metersInSpace)];
@@ -361,8 +341,8 @@ namespace OpenSim.Region.Physics.OdePlugin
361 contact.surface.mu = nmAvatarObjectContactFriction; 341 contact.surface.mu = nmAvatarObjectContactFriction;
362 contact.surface.bounce = nmAvatarObjectContactBounce; 342 contact.surface.bounce = nmAvatarObjectContactBounce;
363 343
364 // Terrain contact friction and Bounce 344 // Terrain contact friction and Bounce
365 // This is the *non* moving version. Use this when an avatar 345 // This is the *non* moving version. Use this when an avatar
366 // isn't moving to keep it in place better 346 // isn't moving to keep it in place better
367 TerrainContact.surface.mode |= d.ContactFlags.SoftERP; 347 TerrainContact.surface.mode |= d.ContactFlags.SoftERP;
368 TerrainContact.surface.mu = nmTerrainContactFriction; 348 TerrainContact.surface.mu = nmTerrainContactFriction;
@@ -376,7 +356,7 @@ namespace OpenSim.Region.Physics.OdePlugin
376 WaterContact.surface.soft_erp = 0.010f; 356 WaterContact.surface.soft_erp = 0.010f;
377 357
378 // Prim contact friction and bounce 358 // Prim contact friction and bounce
379 // THis is the *non* moving version of friction and bounce 359 // THis is the *non* moving version of friction and bounce
380 // Use this when an avatar comes in contact with a prim 360 // Use this when an avatar comes in contact with a prim
381 // and is moving 361 // and is moving
382 AvatarMovementprimContact.surface.mu = mAvatarObjectContactFriction; 362 AvatarMovementprimContact.surface.mu = mAvatarObjectContactFriction;
@@ -409,7 +389,6 @@ namespace OpenSim.Region.Physics.OdePlugin
409 staticPrimspace[i, j] = IntPtr.Zero; 389 staticPrimspace[i, j] = IntPtr.Zero;
410 } 390 }
411 } 391 }
412
413 } 392 }
414 393
415 internal void waitForSpaceUnlock(IntPtr space) 394 internal void waitForSpaceUnlock(IntPtr space)
@@ -439,17 +418,17 @@ namespace OpenSim.Region.Physics.OdePlugin
439 private void near(IntPtr space, IntPtr g1, IntPtr g2) 418 private void near(IntPtr space, IntPtr g1, IntPtr g2)
440 { 419 {
441 // no lock here! It's invoked from within Simulate(), which is thread-locked 420 // no lock here! It's invoked from within Simulate(), which is thread-locked
442 421
443 // Test if we're collidng a geom with a space. 422 // Test if we're colliding a geom with a space.
444 // If so we have to drill down into the space recursively 423 // If so we have to drill down into the space recursively
445 424
446 if (d.GeomIsSpace(g1) || d.GeomIsSpace(g2)) 425 if (d.GeomIsSpace(g1) || d.GeomIsSpace(g2))
447 { 426 {
448 if (g1 == (IntPtr)0 || g2 == (IntPtr)0) 427 if (g1 == (IntPtr)0 || g2 == (IntPtr)0)
449 return; 428 return;
450 // Separating static prim geometry spaces. 429 // Separating static prim geometry spaces.
451 // We'll be calling near recursivly if one 430 // We'll be calling near recursivly if one
452 // of them is a space to find all of the 431 // of them is a space to find all of the
453 // contact points in the space 432 // contact points in the space
454 try 433 try
455 { 434 {
@@ -462,13 +441,12 @@ namespace OpenSim.Region.Physics.OdePlugin
462 } 441 }
463 //Colliding a space or a geom with a space or a geom. so drill down 442 //Colliding a space or a geom with a space or a geom. so drill down
464 443
465 //Collide all geoms in each space.. 444 //Collide all geoms in each space..
466 //if (d.GeomIsSpace(g1)) d.SpaceCollide(g1, IntPtr.Zero, nearCallback); 445 //if (d.GeomIsSpace(g1)) d.SpaceCollide(g1, IntPtr.Zero, nearCallback);
467 //if (d.GeomIsSpace(g2)) d.SpaceCollide(g2, IntPtr.Zero, nearCallback); 446 //if (d.GeomIsSpace(g2)) d.SpaceCollide(g2, IntPtr.Zero, nearCallback);
468 return; 447 return;
469 } 448 }
470 449
471
472 if (g1 == (IntPtr)0 || g2 == (IntPtr)0) 450 if (g1 == (IntPtr)0 || g2 == (IntPtr)0)
473 return; 451 return;
474 452
@@ -499,23 +477,17 @@ namespace OpenSim.Region.Physics.OdePlugin
499 int count = 0; 477 int count = 0;
500 try 478 try
501 { 479 {
502
503 // Colliding Geom To Geom 480 // Colliding Geom To Geom
504 // This portion of the function 'was' blatantly ripped off from BoxStack.cs 481 // This portion of the function 'was' blatantly ripped off from BoxStack.cs
505
506
507
508 482
509 if (g1 == g2) 483 if (g1 == g2)
510 return; // Can't collide with yourself 484 return; // Can't collide with yourself
511 485
512 if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact)) 486 if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact))
513 return; 487 return;
514 488
515 lock (contacts) 489 lock (contacts)
516 { 490 {
517
518
519 count = d.Collide(g1, g2, contacts.GetLength(0), contacts, d.ContactGeom.SizeOf); 491 count = d.Collide(g1, g2, contacts.GetLength(0), contacts, d.ContactGeom.SizeOf);
520 } 492 }
521 } 493 }
@@ -527,7 +499,7 @@ namespace OpenSim.Region.Physics.OdePlugin
527 } 499 }
528 catch (AccessViolationException) 500 catch (AccessViolationException)
529 { 501 {
530 502
531 m_log.Warn("[PHYSICS]: Unable to collide test an object"); 503 m_log.Warn("[PHYSICS]: Unable to collide test an object");
532 return; 504 return;
533 } 505 }
@@ -539,6 +511,7 @@ namespace OpenSim.Region.Physics.OdePlugin
539 { 511 {
540 p1 = PANull; 512 p1 = PANull;
541 } 513 }
514
542 if (!actor_name_map.TryGetValue(g2, out p2)) 515 if (!actor_name_map.TryGetValue(g2, out p2))
543 { 516 {
544 p2 = PANull; 517 p2 = PANull;
@@ -554,14 +527,10 @@ namespace OpenSim.Region.Physics.OdePlugin
554 // If we're colliding with terrain, use 'TerrainContact' instead of contact. 527 // If we're colliding with terrain, use 'TerrainContact' instead of contact.
555 // allows us to have different settings 528 // allows us to have different settings
556 529
557
558
559 // We only need to test p2 for 'jump crouch purposes' 530 // We only need to test p2 for 'jump crouch purposes'
560 p2.IsColliding = true; 531 p2.IsColliding = true;
561 532
562 //if ((framecount % m_returncollisions) == 0) 533 //if ((framecount % m_returncollisions) == 0)
563
564
565 534
566 switch (p1.PhysicsActorType) 535 switch (p1.PhysicsActorType)
567 { 536 {
@@ -588,41 +557,39 @@ namespace OpenSim.Region.Physics.OdePlugin
588 { 557 {
589 //This is disabled at the moment only because it needs more tweaking 558 //This is disabled at the moment only because it needs more tweaking
590 //It will eventually be uncommented 559 //It will eventually be uncommented
591 560
592 if (contacts[i].depth >= 1.00f) 561 if (contacts[i].depth >= 1.00f)
593 { 562 {
594 //m_log.Debug("[PHYSICS]: " + contacts[i].depth.ToString()); 563 //m_log.Debug("[PHYSICS]: " + contacts[i].depth.ToString());
595 } 564 }
596 565
597 //If you interpenetrate a prim with an agent 566 //If you interpenetrate a prim with an agent
598 if ((p2.PhysicsActorType == (int) ActorTypes.Agent && 567 if ((p2.PhysicsActorType == (int) ActorTypes.Agent &&
599 p1.PhysicsActorType == (int) ActorTypes.Prim) || 568 p1.PhysicsActorType == (int) ActorTypes.Prim) ||
600 (p1.PhysicsActorType == (int) ActorTypes.Agent && 569 (p1.PhysicsActorType == (int) ActorTypes.Agent &&
601 p2.PhysicsActorType == (int) ActorTypes.Prim)) 570 p2.PhysicsActorType == (int) ActorTypes.Prim))
602 { 571 {
603
604
605 # region disabled code1 572 # region disabled code1
606 //contacts[i].depth = contacts[i].depth * 4.15f; 573 //contacts[i].depth = contacts[i].depth * 4.15f;
607 /* 574 /*
608 if (p2.PhysicsActorType == (int) ActorTypes.Agent) 575 if (p2.PhysicsActorType == (int) ActorTypes.Agent)
609 { 576 {
610 p2.CollidingObj = true; 577 p2.CollidingObj = true;
611 contacts[i].depth = 0.003f; 578 contacts[i].depth = 0.003f;
612 p2.Velocity = p2.Velocity + new PhysicsVector(0, 0, 2.5f); 579 p2.Velocity = p2.Velocity + new PhysicsVector(0, 0, 2.5f);
613 OdeCharacter character = (OdeCharacter) p2; 580 OdeCharacter character = (OdeCharacter) p2;
614 character.SetPidStatus(true); 581 character.SetPidStatus(true);
615 contacts[i].pos = new d.Vector3(contacts[i].pos.X + (p1.Size.X / 2), contacts[i].pos.Y + (p1.Size.Y / 2), contacts[i].pos.Z + (p1.Size.Z / 2)); 582 contacts[i].pos = new d.Vector3(contacts[i].pos.X + (p1.Size.X / 2), contacts[i].pos.Y + (p1.Size.Y / 2), contacts[i].pos.Z + (p1.Size.Z / 2));
616 583
617 } 584 }
618 else 585 else
619 { 586 {
620 587
621 //contacts[i].depth = 0.0000000f; 588 //contacts[i].depth = 0.0000000f;
622 } 589 }
623 if (p1.PhysicsActorType == (int) ActorTypes.Agent) 590 if (p1.PhysicsActorType == (int) ActorTypes.Agent)
624 { 591 {
625 592
626 p1.CollidingObj = true; 593 p1.CollidingObj = true;
627 contacts[i].depth = 0.003f; 594 contacts[i].depth = 0.003f;
628 p1.Velocity = p1.Velocity + new PhysicsVector(0, 0, 2.5f); 595 p1.Velocity = p1.Velocity + new PhysicsVector(0, 0, 2.5f);
@@ -632,14 +599,12 @@ namespace OpenSim.Region.Physics.OdePlugin
632 } 599 }
633 else 600 else
634 { 601 {
635 602
636 //contacts[i].depth = 0.0000000f; 603 //contacts[i].depth = 0.0000000f;
637 } 604 }
638 */ 605 */
639 #endregion 606 #endregion
640
641 } 607 }
642
643 608
644 // If you interpenetrate a prim with another prim 609 // If you interpenetrate a prim with another prim
645 if (p1.PhysicsActorType == (int) ActorTypes.Prim && p2.PhysicsActorType == (int) ActorTypes.Prim) 610 if (p1.PhysicsActorType == (int) ActorTypes.Prim && p2.PhysicsActorType == (int) ActorTypes.Prim)
@@ -649,7 +614,6 @@ namespace OpenSim.Region.Physics.OdePlugin
649 //OdePrim op2 = (OdePrim)p2; 614 //OdePrim op2 = (OdePrim)p2;
650 //op1.m_collisionscore++; 615 //op1.m_collisionscore++;
651 //op2.m_collisionscore++; 616 //op2.m_collisionscore++;
652
653 617
654 //if (op1.m_collisionscore > 8000 || op2.m_collisionscore > 8000) 618 //if (op1.m_collisionscore > 8000 || op2.m_collisionscore > 8000)
655 //{ 619 //{
@@ -658,11 +622,10 @@ namespace OpenSim.Region.Physics.OdePlugin
658 //op2.m_taintdisable = true; 622 //op2.m_taintdisable = true;
659 //AddPhysicsActorTaint(p2); 623 //AddPhysicsActorTaint(p2);
660 //} 624 //}
661 625
662 //if (contacts[i].depth >= 0.25f) 626 //if (contacts[i].depth >= 0.25f)
663 //{ 627 //{
664 // Don't collide, one or both prim will expld. 628 // Don't collide, one or both prim will expld.
665
666 629
667 //op1.m_interpenetrationcount++; 630 //op1.m_interpenetrationcount++;
668 //op2.m_interpenetrationcount++; 631 //op2.m_interpenetrationcount++;
@@ -678,17 +641,17 @@ namespace OpenSim.Region.Physics.OdePlugin
678 //AddPhysicsActorTaint(p2); 641 //AddPhysicsActorTaint(p2);
679 //} 642 //}
680 643
681
682 //contacts[i].depth = contacts[i].depth / 8f; 644 //contacts[i].depth = contacts[i].depth / 8f;
683 //contacts[i].normal = new d.Vector3(0, 0, 1); 645 //contacts[i].normal = new d.Vector3(0, 0, 1);
684 //} 646 //}
685 //if (op1.m_disabled || op2.m_disabled) 647 //if (op1.m_disabled || op2.m_disabled)
686 //{ 648 //{
687 //Manually disabled objects stay disabled 649 //Manually disabled objects stay disabled
688 //contacts[i].depth = 0f; 650 //contacts[i].depth = 0f;
689 //} 651 //}
690 #endregion 652 #endregion
691 } 653 }
654
692 if (contacts[i].depth >= 1.00f) 655 if (contacts[i].depth >= 1.00f)
693 { 656 {
694 //m_log.Info("[P]: " + contacts[i].depth.ToString()); 657 //m_log.Info("[P]: " + contacts[i].depth.ToString());
@@ -713,6 +676,7 @@ namespace OpenSim.Region.Physics.OdePlugin
713 else 676 else
714 { 677 {
715 } 678 }
679
716 if (p1.PhysicsActorType == (int) ActorTypes.Agent) 680 if (p1.PhysicsActorType == (int) ActorTypes.Agent)
717 { 681 {
718 OdeCharacter character = (OdeCharacter)p1; 682 OdeCharacter character = (OdeCharacter)p1;
@@ -738,7 +702,7 @@ namespace OpenSim.Region.Physics.OdePlugin
738 702
739 if (contacts[i].depth >= 0f) 703 if (contacts[i].depth >= 0f)
740 { 704 {
741 // If we're collidng against terrain 705 // If we're colliding against terrain
742 if (name1 == "Terrain" || name2 == "Terrain") 706 if (name1 == "Terrain" || name2 == "Terrain")
743 { 707 {
744 // If we're moving 708 // If we're moving
@@ -760,12 +724,11 @@ namespace OpenSim.Region.Physics.OdePlugin
760 { 724 {
761 if ((p2.PhysicsActorType == (int)ActorTypes.Prim)) 725 if ((p2.PhysicsActorType == (int)ActorTypes.Prim))
762 { 726 {
763
764 } 727 }
765 else 728 else
766 { 729 {
767
768 } 730 }
731
769 //WaterContact.surface.soft_cfm = 0.0000f; 732 //WaterContact.surface.soft_cfm = 0.0000f;
770 //WaterContact.surface.soft_erp = 0.00000f; 733 //WaterContact.surface.soft_erp = 0.00000f;
771 if (contacts[i].depth > 0.1f) 734 if (contacts[i].depth > 0.1f)
@@ -775,7 +738,7 @@ namespace OpenSim.Region.Physics.OdePlugin
775 //contacts[i].pos = new d.Vector3(0, 0, contacts[i].pos.Z - 5f); 738 //contacts[i].pos = new d.Vector3(0, 0, contacts[i].pos.Z - 5f);
776 } 739 }
777 WaterContact.geom = contacts[i]; 740 WaterContact.geom = contacts[i];
778 741
779 joint = d.JointCreateContact(world, contactgroup, ref WaterContact); 742 joint = d.JointCreateContact(world, contactgroup, ref WaterContact);
780 743
781 //m_log.Info("[PHYSICS]: Prim Water Contact" + contacts[i].depth); 744 //m_log.Info("[PHYSICS]: Prim Water Contact" + contacts[i].depth);
@@ -806,7 +769,7 @@ namespace OpenSim.Region.Physics.OdePlugin
806 { 769 {
807 // If there are more then 3 contact points, it's likely 770 // If there are more then 3 contact points, it's likely
808 // that we've got a pile of objects 771 // that we've got a pile of objects
809 // 772 //
810 // We don't want to send out hundreds of terse updates over and over again 773 // We don't want to send out hundreds of terse updates over and over again
811 // so lets throttle them and send them again after it's somewhat sorted out. 774 // so lets throttle them and send them again after it's somewhat sorted out.
812 p2.ThrottleUpdates = true; 775 p2.ThrottleUpdates = true;
@@ -814,7 +777,6 @@ namespace OpenSim.Region.Physics.OdePlugin
814 //System.Console.WriteLine(count.ToString()); 777 //System.Console.WriteLine(count.ToString());
815 //System.Console.WriteLine("near: A collision was detected between {1} and {2}", 0, name1, name2); 778 //System.Console.WriteLine("near: A collision was detected between {1} and {2}", 0, name1, name2);
816 } 779 }
817
818 } 780 }
819 781
820 private void collision_accounting_events(PhysicsActor p1, PhysicsActor p2, float collisiondepth) 782 private void collision_accounting_events(PhysicsActor p1, PhysicsActor p2, float collisiondepth)
@@ -831,7 +793,7 @@ namespace OpenSim.Region.Physics.OdePlugin
831 { 793 {
832 case ActorTypes.Agent: 794 case ActorTypes.Agent:
833 cc2 = (OdeCharacter)p2; 795 cc2 = (OdeCharacter)p2;
834 796
835 obj1LocalID = cc2.m_localID; 797 obj1LocalID = cc2.m_localID;
836 switch ((ActorTypes)p1.PhysicsActorType) 798 switch ((ActorTypes)p1.PhysicsActorType)
837 { 799 {
@@ -840,7 +802,7 @@ namespace OpenSim.Region.Physics.OdePlugin
840 obj2LocalID = cc1.m_localID; 802 obj2LocalID = cc1.m_localID;
841 cc1.AddCollisionEvent(cc2.m_localID, collisiondepth); 803 cc1.AddCollisionEvent(cc2.m_localID, collisiondepth);
842 //ctype = (int)CollisionCategories.Character; 804 //ctype = (int)CollisionCategories.Character;
843 805
844 //if (cc1.CollidingObj) 806 //if (cc1.CollidingObj)
845 //cStartStop = (int)StatusIndicators.Generic; 807 //cStartStop = (int)StatusIndicators.Generic;
846 //else 808 //else
@@ -858,7 +820,7 @@ namespace OpenSim.Region.Physics.OdePlugin
858 //cStartStop = (int)StatusIndicators.Generic; 820 //cStartStop = (int)StatusIndicators.Generic;
859 //else 821 //else
860 //cStartStop = (int)StatusIndicators.Start; 822 //cStartStop = (int)StatusIndicators.Start;
861 823
862 //returncollisions = true; 824 //returncollisions = true;
863 break; 825 break;
864 826
@@ -869,14 +831,12 @@ namespace OpenSim.Region.Physics.OdePlugin
869 //returncollisions = true; 831 //returncollisions = true;
870 break; 832 break;
871 } 833 }
872
873 834
874
875 cc2.AddCollisionEvent(obj2LocalID, collisiondepth); 835 cc2.AddCollisionEvent(obj2LocalID, collisiondepth);
876 break; 836 break;
877 case ActorTypes.Prim: 837 case ActorTypes.Prim:
878 cp2 = (OdePrim)p2; 838 cp2 = (OdePrim)p2;
879 839
880 obj1LocalID = cp2.m_localID; 840 obj1LocalID = cp2.m_localID;
881 switch ((ActorTypes)p1.PhysicsActorType) 841 switch ((ActorTypes)p1.PhysicsActorType)
882 { 842 {
@@ -891,7 +851,7 @@ namespace OpenSim.Region.Physics.OdePlugin
891 //else 851 //else
892 //cStartStop = (int)StatusIndicators.Start; 852 //cStartStop = (int)StatusIndicators.Start;
893 //returncollisions = true; 853 //returncollisions = true;
894 854
895 break; 855 break;
896 case ActorTypes.Prim: 856 case ActorTypes.Prim:
897 cp1 = (OdePrim)p1; 857 cp1 = (OdePrim)p1;
@@ -903,7 +863,7 @@ namespace OpenSim.Region.Physics.OdePlugin
903 //cStartStop = (int)StatusIndicators.Generic; 863 //cStartStop = (int)StatusIndicators.Generic;
904 //else 864 //else
905 //cStartStop = (int)StatusIndicators.Start; 865 //cStartStop = (int)StatusIndicators.Start;
906 866
907 //returncollisions = true; 867 //returncollisions = true;
908 break; 868 break;
909 869
@@ -911,11 +871,11 @@ namespace OpenSim.Region.Physics.OdePlugin
911 case ActorTypes.Unknown: 871 case ActorTypes.Unknown:
912 obj2LocalID = 0; 872 obj2LocalID = 0;
913 //ctype = (int)CollisionCategories.Land; 873 //ctype = (int)CollisionCategories.Land;
914 874
915 //returncollisions = true; 875 //returncollisions = true;
916 break; 876 break;
917 } 877 }
918 878
919 cp2.AddCollisionEvent(obj2LocalID, collisiondepth); 879 cp2.AddCollisionEvent(obj2LocalID, collisiondepth);
920 break; 880 break;
921 } 881 }
@@ -999,7 +959,7 @@ namespace OpenSim.Region.Physics.OdePlugin
999 /// <param name="timeStep"></param> 959 /// <param name="timeStep"></param>
1000 private void collision_optimized(float timeStep) 960 private void collision_optimized(float timeStep)
1001 { 961 {
1002 962
1003 foreach (OdeCharacter chr in _characters) 963 foreach (OdeCharacter chr in _characters)
1004 { 964 {
1005 // Reset the collision values to false 965 // Reset the collision values to false
@@ -1008,7 +968,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1008 chr.IsColliding = false; 968 chr.IsColliding = false;
1009 chr.CollidingGround = false; 969 chr.CollidingGround = false;
1010 chr.CollidingObj = false; 970 chr.CollidingObj = false;
1011 971
1012 // test the avatar's geometry for collision with the space 972 // test the avatar's geometry for collision with the space
1013 // This will return near and the space that they are the closest to 973 // This will return near and the space that they are the closest to
1014 // And we'll run this again against the avatar and the space segment 974 // And we'll run this again against the avatar and the space segment
@@ -1029,15 +989,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1029 //forcedZ = true; 989 //forcedZ = true;
1030 //} 990 //}
1031 } 991 }
1032
1033 992
1034
1035 lock (_activeprims) 993 lock (_activeprims)
1036 { 994 {
1037
1038 foreach (OdePrim chr in _activeprims) 995 foreach (OdePrim chr in _activeprims)
1039 { 996 {
1040
1041 if (d.BodyIsEnabled(chr.Body) && (!chr.m_disabled)) 997 if (d.BodyIsEnabled(chr.Body) && (!chr.m_disabled))
1042 { 998 {
1043 try 999 try
@@ -1049,18 +1005,14 @@ namespace OpenSim.Region.Physics.OdePlugin
1049 else 1005 else
1050 m_log.Debug("[PHYSICS]: unable to collide test active prim against space. The space was zero, the geom was zero or it was in the process of being removed"); 1006 m_log.Debug("[PHYSICS]: unable to collide test active prim against space. The space was zero, the geom was zero or it was in the process of being removed");
1051 } 1007 }
1052
1053 } 1008 }
1054 catch (AccessViolationException) 1009 catch (AccessViolationException)
1055 { 1010 {
1056 m_log.Warn("[PHYSICS]: Unable to space collide"); 1011 m_log.Warn("[PHYSICS]: Unable to space collide");
1057 } 1012 }
1058
1059 } 1013 }
1060
1061 } 1014 }
1062 } 1015 }
1063
1064 } 1016 }
1065 1017
1066 #endregion 1018 #endregion
@@ -1077,7 +1029,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1077 { 1029 {
1078 if (!_collisionEventPrim.Contains(obj)) 1030 if (!_collisionEventPrim.Contains(obj))
1079 _collisionEventPrim.Add(obj); 1031 _collisionEventPrim.Add(obj);
1080
1081 } 1032 }
1082 } 1033 }
1083 1034
@@ -1090,7 +1041,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1090 } 1041 }
1091 } 1042 }
1092 1043
1093
1094 #region Add/Remove Entities 1044 #region Add/Remove Entities
1095 1045
1096 public override PhysicsActor AddAvatar(string avName, PhysicsVector position, PhysicsVector size) 1046 public override PhysicsActor AddAvatar(string avName, PhysicsVector position, PhysicsVector size)
@@ -1131,8 +1081,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1131 rot.y = rotation.y; 1081 rot.y = rotation.y;
1132 rot.z = rotation.z; 1082 rot.z = rotation.z;
1133 1083
1134
1135
1136 OdePrim newPrim; 1084 OdePrim newPrim;
1137 lock (OdeLock) 1085 lock (OdeLock)
1138 { 1086 {
@@ -1141,7 +1089,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1141 _prims.Add(newPrim); 1089 _prims.Add(newPrim);
1142 } 1090 }
1143 1091
1144
1145 return newPrim; 1092 return newPrim;
1146 } 1093 }
1147 1094
@@ -1178,11 +1125,9 @@ namespace OpenSim.Region.Physics.OdePlugin
1178 1125
1179 result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical); 1126 result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical);
1180 1127
1181
1182 return result; 1128 return result;
1183 } 1129 }
1184 1130
1185
1186 public void remActivePrim(OdePrim deactivatePrim) 1131 public void remActivePrim(OdePrim deactivatePrim)
1187 { 1132 {
1188 lock (_activeprims) 1133 lock (_activeprims)
@@ -1210,8 +1155,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1210 /// This is called from within simulate but outside the locked portion 1155 /// This is called from within simulate but outside the locked portion
1211 /// We need to do our own locking here 1156 /// We need to do our own locking here
1212 /// Essentially, we need to remove the prim from our space segment, whatever segment it's in. 1157 /// Essentially, we need to remove the prim from our space segment, whatever segment it's in.
1213 /// 1158 ///
1214 /// If there are no more prim in the segment, we need to empty (spacedestroy)the segment and reclaim memory 1159 /// If there are no more prim in the segment, we need to empty (spacedestroy)the segment and reclaim memory
1215 /// that the space was using. 1160 /// that the space was using.
1216 /// </summary> 1161 /// </summary>
1217 /// <param name="prim"></param> 1162 /// <param name="prim"></param>
@@ -1226,7 +1171,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1226 { 1171 {
1227 prim.ResetTaints(); 1172 prim.ResetTaints();
1228 1173
1229
1230 if (prim.IsPhysical) 1174 if (prim.IsPhysical)
1231 { 1175 {
1232 prim.disableBody(); 1176 prim.disableBody();
@@ -1267,7 +1211,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1267 { 1211 {
1268 m_log.Warn("[PHYSICS]: Unable to remove prim from physics scene"); 1212 m_log.Warn("[PHYSICS]: Unable to remove prim from physics scene");
1269 } 1213 }
1270
1271 } 1214 }
1272 catch (AccessViolationException) 1215 catch (AccessViolationException)
1273 { 1216 {
@@ -1297,8 +1240,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1297 //} 1240 //}
1298 //} 1241 //}
1299 } 1242 }
1300
1301
1302 } 1243 }
1303 } 1244 }
1304 } 1245 }
@@ -1337,12 +1278,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1337 /// <returns>a pointer to the new space it's in</returns> 1278 /// <returns>a pointer to the new space it's in</returns>
1338 public IntPtr recalculateSpaceForGeom(IntPtr geom, PhysicsVector pos, IntPtr currentspace) 1279 public IntPtr recalculateSpaceForGeom(IntPtr geom, PhysicsVector pos, IntPtr currentspace)
1339 { 1280 {
1340 1281 // Called from setting the Position and Size of an ODEPrim so
1341 // Called from setting the Position and Size of an ODEPrim so
1342 // it's already in locked space. 1282 // it's already in locked space.
1343 1283
1344 // we don't want to remove the main space 1284 // we don't want to remove the main space
1345 // we don't need to test physical here because this function should 1285 // we don't need to test physical here because this function should
1346 // never be called if the prim is physical(active) 1286 // never be called if the prim is physical(active)
1347 1287
1348 // All physical prim end up in the root space 1288 // All physical prim end up in the root space
@@ -1399,7 +1339,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1399 waitForSpaceUnlock(space); 1339 waitForSpaceUnlock(space);
1400 d.SpaceRemove(space, currentspace); 1340 d.SpaceRemove(space, currentspace);
1401 // free up memory used by the space. 1341 // free up memory used by the space.
1402 1342
1403 //d.SpaceDestroy(currentspace); 1343 //d.SpaceDestroy(currentspace);
1404 resetSpaceArrayItemToZero(currentspace); 1344 resetSpaceArrayItemToZero(currentspace);
1405 } 1345 }
@@ -1418,7 +1358,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1418 { 1358 {
1419 if (d.SpaceQuery(currentspace, geom)) 1359 if (d.SpaceQuery(currentspace, geom))
1420 { 1360 {
1421
1422 if (d.GeomIsSpace(currentspace)) 1361 if (d.GeomIsSpace(currentspace))
1423 { 1362 {
1424 waitForSpaceUnlock(currentspace); 1363 waitForSpaceUnlock(currentspace);
@@ -1453,8 +1392,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1453 } 1392 }
1454 } 1393 }
1455 1394
1456 // The routines in the Position and Size sections do the 'inserting' into the space, 1395 // The routines in the Position and Size sections do the 'inserting' into the space,
1457 // so all we have to do is make sure that the space that we're putting the prim into 1396 // so all we have to do is make sure that the space that we're putting the prim into
1458 // is in the 'main' space. 1397 // is in the 'main' space.
1459 int[] iprimspaceArrItem = calculateSpaceArrayItemFromPos(pos); 1398 int[] iprimspaceArrItem = calculateSpaceArrayItemFromPos(pos);
1460 IntPtr newspace = calculateSpaceForGeom(pos); 1399 IntPtr newspace = calculateSpaceForGeom(pos);
@@ -1492,11 +1431,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1492 public IntPtr calculateSpaceForGeom(PhysicsVector pos) 1431 public IntPtr calculateSpaceForGeom(PhysicsVector pos)
1493 { 1432 {
1494 IntPtr locationbasedspace =IntPtr.Zero; 1433 IntPtr locationbasedspace =IntPtr.Zero;
1495 1434
1496 int[] xyspace = calculateSpaceArrayItemFromPos(pos); 1435 int[] xyspace = calculateSpaceArrayItemFromPos(pos);
1497 //m_log.Info("[Physics]: Attempting to use arrayItem: " + xyspace[0].ToString() + "," + xyspace[1].ToString()); 1436 //m_log.Info("[Physics]: Attempting to use arrayItem: " + xyspace[0].ToString() + "," + xyspace[1].ToString());
1498 locationbasedspace = staticPrimspace[xyspace[0], xyspace[1]]; 1437 locationbasedspace = staticPrimspace[xyspace[0], xyspace[1]];
1499 1438
1500 //locationbasedspace = space; 1439 //locationbasedspace = space;
1501 return locationbasedspace; 1440 return locationbasedspace;
1502 } 1441 }
@@ -1523,13 +1462,10 @@ namespace OpenSim.Region.Physics.OdePlugin
1523 if (returnint[1] < 0) 1462 if (returnint[1] < 0)
1524 returnint[1] = 0; 1463 returnint[1] = 0;
1525 1464
1526
1527 return returnint; 1465 return returnint;
1528 } 1466 }
1529 #endregion
1530
1531
1532 1467
1468 #endregion
1533 1469
1534 /// <summary> 1470 /// <summary>
1535 /// Routine to figure out if we need to mesh this prim with our mesher 1471 /// Routine to figure out if we need to mesh this prim with our mesher
@@ -1564,7 +1500,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1564 return false; 1500 return false;
1565 } 1501 }
1566 1502
1567
1568 /// <summary> 1503 /// <summary>
1569 /// Called after our prim properties are set Scale, position etc. 1504 /// Called after our prim properties are set Scale, position etc.
1570 /// We use this event queue like method to keep changes to the physical scene occuring in the threadlocked mutex 1505 /// We use this event queue like method to keep changes to the physical scene occuring in the threadlocked mutex
@@ -1586,7 +1521,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1586 1521
1587 /// <summary> 1522 /// <summary>
1588 /// This is our main simulate loop 1523 /// This is our main simulate loop
1589 /// It's thread locked by a Mutex in the scene. 1524 /// It's thread locked by a Mutex in the scene.
1590 /// It holds Collisions, it instructs ODE to step through the physical reactions 1525 /// It holds Collisions, it instructs ODE to step through the physical reactions
1591 /// It moves the objects around in memory 1526 /// It moves the objects around in memory
1592 /// It calls the methods that report back to the object owners.. (scenepresence, SceneObjectGroup) 1527 /// It calls the methods that report back to the object owners.. (scenepresence, SceneObjectGroup)
@@ -1597,7 +1532,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1597 { 1532 {
1598 if (framecount >= int.MaxValue) 1533 if (framecount >= int.MaxValue)
1599 framecount = 0; 1534 framecount = 0;
1600 1535
1601 framecount++; 1536 framecount++;
1602 1537
1603 float fps = 0; 1538 float fps = 0;
@@ -1605,12 +1540,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1605 step_time += timeStep; 1540 step_time += timeStep;
1606 1541
1607 1542
1608 // If We're loaded down by something else, 1543 // If We're loaded down by something else,
1609 // or debugging with the Visual Studio project on pause 1544 // or debugging with the Visual Studio project on pause
1610 // skip a few frames to catch up gracefully. 1545 // skip a few frames to catch up gracefully.
1611 // without shooting the physicsactors all over the place 1546 // without shooting the physicsactors all over the place
1612 1547
1613
1614 if (step_time >= m_SkipFramesAtms) 1548 if (step_time >= m_SkipFramesAtms)
1615 { 1549 {
1616 // Instead of trying to catch up, it'll do 5 physics frames only 1550 // Instead of trying to catch up, it'll do 5 physics frames only
@@ -1623,7 +1557,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1623 } 1557 }
1624 lock (OdeLock) 1558 lock (OdeLock)
1625 { 1559 {
1626 // Process 10 frames if the sim is running normal.. 1560 // Process 10 frames if the sim is running normal..
1627 // process 5 frames if the sim is running slow 1561 // process 5 frames if the sim is running slow
1628 //try 1562 //try
1629 //{ 1563 //{
@@ -1642,13 +1576,13 @@ namespace OpenSim.Region.Physics.OdePlugin
1642 //(step_time == 0.004f, there's 250 of those per second. Times the step time/step size 1576 //(step_time == 0.004f, there's 250 of those per second. Times the step time/step size
1643 step_time = 0.09375f; 1577 step_time = 0.09375f;
1644 fps = (step_time/ODE_STEPSIZE) * 1000; 1578 fps = (step_time/ODE_STEPSIZE) * 1000;
1645 1579
1646 while (step_time > 0.0f) 1580 while (step_time > 0.0f)
1647 { 1581 {
1648 //lock (ode) 1582 //lock (ode)
1649 //{ 1583 //{
1650 //if (!ode.lockquery()) 1584 //if (!ode.lockquery())
1651 //{ 1585 //{
1652 // ode.dlock(world); 1586 // ode.dlock(world);
1653 try 1587 try
1654 { 1588 {
@@ -1661,9 +1595,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1661 } 1595 }
1662 } 1596 }
1663 1597
1664
1665 bool processedtaints = false; 1598 bool processedtaints = false;
1666 1599
1667 lock (_taintedPrim) 1600 lock (_taintedPrim)
1668 { 1601 {
1669 foreach (OdePrim prim in _taintedPrim) 1602 foreach (OdePrim prim in _taintedPrim)
@@ -1679,10 +1612,9 @@ namespace OpenSim.Region.Physics.OdePlugin
1679 processedtaints = true; 1612 processedtaints = true;
1680 prim.m_collisionscore = 0; 1613 prim.m_collisionscore = 0;
1681 } 1614 }
1682 1615
1683 if (processedtaints) 1616 if (processedtaints)
1684 _taintedPrim = new List<OdePrim>(); 1617 _taintedPrim = new List<OdePrim>();
1685
1686 } 1618 }
1687 1619
1688 lock (_activeprims) 1620 lock (_activeprims)
@@ -1696,7 +1628,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1696 1628
1697 //if ((framecount % m_randomizeWater) == 0) 1629 //if ((framecount % m_randomizeWater) == 0)
1698 // randomizeWater(waterlevel); 1630 // randomizeWater(waterlevel);
1699
1700 1631
1701 collision_optimized(timeStep); 1632 collision_optimized(timeStep);
1702 1633
@@ -1718,7 +1649,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1718 pobj.SendCollisions(); 1649 pobj.SendCollisions();
1719 break; 1650 break;
1720 } 1651 }
1721
1722 } 1652 }
1723 } 1653 }
1724 1654
@@ -1726,13 +1656,13 @@ namespace OpenSim.Region.Physics.OdePlugin
1726 1656
1727 d.JointGroupEmpty(contactgroup); 1657 d.JointGroupEmpty(contactgroup);
1728 //ode.dunlock(world); 1658 //ode.dunlock(world);
1729 } 1659 }
1730 catch (Exception e) 1660 catch (Exception e)
1731 { 1661 {
1732 m_log.Error("[PHYSICS]: " + e.Message.ToString() + e.TargetSite.ToString()); 1662 m_log.Error("[PHYSICS]: " + e.Message.ToString() + e.TargetSite.ToString());
1733 ode.dunlock(world); 1663 ode.dunlock(world);
1734 } 1664 }
1735 1665
1736 step_time -= ODE_STEPSIZE; 1666 step_time -= ODE_STEPSIZE;
1737 i++; 1667 i++;
1738 //} 1668 //}
@@ -1765,7 +1695,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1765 } 1695 }
1766 } 1696 }
1767 } 1697 }
1768
1769 } 1698 }
1770 return fps; 1699 return fps;
1771 } 1700 }
@@ -1780,7 +1709,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1780 get { return (false); } 1709 get { return (false); }
1781 } 1710 }
1782 1711
1783 #region ODE Specific Terrain Fixes 1712 #region ODE Specific Terrain Fixes
1784 public float[] ResizeTerrain512NearestNeighbour(float[] heightMap) 1713 public float[] ResizeTerrain512NearestNeighbour(float[] heightMap)
1785 { 1714 {
1786 float[] returnarr = new float[262144]; 1715 float[] returnarr = new float[262144];
@@ -1800,7 +1729,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1800 // This particular way is quick but it only works on a multiple of the original 1729 // This particular way is quick but it only works on a multiple of the original
1801 1730
1802 // The idea behind this method can be described with the following diagrams 1731 // The idea behind this method can be described with the following diagrams
1803 // second pass and third pass happen in the same loop really.. just separated 1732 // second pass and third pass happen in the same loop really.. just separated
1804 // them to show what this does. 1733 // them to show what this does.
1805 1734
1806 // First Pass 1735 // First Pass
@@ -1893,6 +1822,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1893 1822
1894 return returnarr; 1823 return returnarr;
1895 } 1824 }
1825
1896 public float[] ResizeTerrain512Interpolation(float[] heightMap) 1826 public float[] ResizeTerrain512Interpolation(float[] heightMap)
1897 { 1827 {
1898 float[] returnarr = new float[262144]; 1828 float[] returnarr = new float[262144];
@@ -1912,7 +1842,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1912 // This particular way is quick but it only works on a multiple of the original 1842 // This particular way is quick but it only works on a multiple of the original
1913 1843
1914 // The idea behind this method can be described with the following diagrams 1844 // The idea behind this method can be described with the following diagrams
1915 // second pass and third pass happen in the same loop really.. just separated 1845 // second pass and third pass happen in the same loop really.. just separated
1916 // them to show what this does. 1846 // them to show what this does.
1917 1847
1918 // First Pass 1848 // First Pass
@@ -2139,7 +2069,6 @@ namespace OpenSim.Region.Physics.OdePlugin
2139 // m_log.Info((baseheight - 0.1f) + ((float)fluidRandomizer.Next(1, 9) / 10f)); 2069 // m_log.Info((baseheight - 0.1f) + ((float)fluidRandomizer.Next(1, 9) / 10f));
2140 } 2070 }
2141 2071
2142
2143 lock (OdeLock) 2072 lock (OdeLock)
2144 { 2073 {
2145 if (!(WaterGeom == (IntPtr)0)) 2074 if (!(WaterGeom == (IntPtr)0))
@@ -2183,7 +2112,6 @@ namespace OpenSim.Region.Physics.OdePlugin
2183 { 2112 {
2184 lock (OdeLock) 2113 lock (OdeLock)
2185 { 2114 {
2186
2187 foreach (OdePrim prm in _prims) 2115 foreach (OdePrim prm in _prims)
2188 { 2116 {
2189 RemovePrim(prm); 2117 RemovePrim(prm);
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
index 9ca1b23..82ce144 100644
--- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
+++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
@@ -171,12 +171,12 @@ namespace OpenSim.Region.Physics.POSPlugin
171 { 171 {
172 if (check_collision(c, _prims[i])) 172 if (check_collision(c, _prims[i]))
173 { 173 {
174 174
175 return true; 175 return true;
176 } 176 }
177 177
178 } 178 }
179 179
180 return false; 180 return false;
181 } 181 }
182 182
@@ -234,7 +234,7 @@ namespace OpenSim.Region.Physics.POSPlugin
234 character.Position.Z += character._target_velocity.Z*timeStep; 234 character.Position.Z += character._target_velocity.Z*timeStep;
235 } 235 }
236 236
237 /// this is it -- the magic you've all been waiting for! Ladies and gentlemen -- 237 /// this is it -- the magic you've all been waiting for! Ladies and gentlemen --
238 /// Completely Bogus Collision Detection!!! 238 /// Completely Bogus Collision Detection!!!
239 /// better known as the CBCD algorithm 239 /// better known as the CBCD algorithm
240 240