aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs20
-rw-r--r--OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs6
-rw-r--r--OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs5
-rw-r--r--OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs20
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs19
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs22
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs26
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs102
-rw-r--r--OpenSim/Region/Physics/POSPlugin/POSCharacter.cs21
-rw-r--r--OpenSim/Region/Physics/POSPlugin/POSPrim.cs20
-rw-r--r--OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs44
11 files changed, 280 insertions, 25 deletions
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs
index 8df997e..f411dd7 100644
--- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs
+++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs
@@ -303,6 +303,26 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
303 set { return; } 303 set { return; }
304 } 304 }
305 305
306 public override Quaternion APIDTarget
307 {
308 set { return; }
309 }
310
311 public override bool APIDActive
312 {
313 set { return; }
314 }
315
316 public override float APIDStrength
317 {
318 set { return; }
319 }
320
321 public override float APIDDamping
322 {
323 set { return; }
324 }
325
306 public override void SubscribeEvents(int ms) 326 public override void SubscribeEvents(int ms)
307 { 327 {
308 } 328 }
diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs
index 5ed3b14..98681d6 100644
--- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs
+++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs
@@ -619,6 +619,12 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
619 { 619 {
620 set { return; } 620 set { return; }
621 } 621 }
622
623 public override Quaternion APIDTarget { set { return; } }
624 public override bool APIDActive { set { return; } }
625 public override float APIDStrength { set { return; } }
626 public override float APIDDamping { set { return; } }
627
622 628
623 /// <summary> 629 /// <summary>
624 /// Adds the force supplied to the Target Velocity 630 /// Adds the force supplied to the Target Velocity
diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs
index 5b542db..d931f126 100644
--- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs
+++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs
@@ -565,6 +565,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
565 public override PIDHoverType PIDHoverType { set { m_PIDHoverType = value; } } 565 public override PIDHoverType PIDHoverType { set { m_PIDHoverType = value; } }
566 public override float PIDHoverTau { set { m_PIDHoverTau = value; } } 566 public override float PIDHoverTau { set { m_PIDHoverTau = value; } }
567 567
568 public override Quaternion APIDTarget { set { return; } }
569 public override bool APIDActive { set { return; } }
570 public override float APIDStrength { set { return; } }
571 public override float APIDDamping { set { return; } }
572
568 573
569 public override void AddForce(Vector3 force, bool pushforce) 574 public override void AddForce(Vector3 force, bool pushforce)
570 { 575 {
diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
index cbe73bb..0b3cee7 100644
--- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
+++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
@@ -1236,6 +1236,26 @@ namespace OpenSim.Region.Physics.BulletXPlugin
1236 public override PIDHoverType PIDHoverType { set { return; } } 1236 public override PIDHoverType PIDHoverType { set { return; } }
1237 public override float PIDHoverTau { set { return; } } 1237 public override float PIDHoverTau { set { return; } }
1238 1238
1239 public override OpenMetaverse.Quaternion APIDTarget
1240 {
1241 set { return; }
1242 }
1243
1244 public override bool APIDActive
1245 {
1246 set { return; }
1247 }
1248
1249 public override float APIDStrength
1250 {
1251 set { return; }
1252 }
1253
1254 public override float APIDDamping
1255 {
1256 set { return; }
1257 }
1258
1239 1259
1240 public override void SubscribeEvents(int ms) 1260 public override void SubscribeEvents(int ms)
1241 { 1261 {
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index 6bfdff2..ea4db70 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -230,10 +230,15 @@ namespace OpenSim.Region.Physics.Manager
230 public abstract PIDHoverType PIDHoverType { set;} 230 public abstract PIDHoverType PIDHoverType { set;}
231 public abstract float PIDHoverTau { set;} 231 public abstract float PIDHoverTau { set;}
232 232
233 233 // For RotLookAt
234 public abstract void AddForce(Vector3 force, bool pushforce); 234 public abstract Quaternion APIDTarget { set;}
235 public abstract void AddAngularForce(Vector3 force, bool pushforce); 235 public abstract bool APIDActive { set;}
236 public abstract void SetMomentum(Vector3 momentum); 236 public abstract float APIDStrength { set;}
237 public abstract float APIDDamping { set;}
238
239 public abstract void AddForce(PhysicsVector force, bool pushforce);
240 public abstract void AddAngularForce(PhysicsVector force, bool pushforce);
241 public abstract void SetMomentum(PhysicsVector momentum);
237 public abstract void SubscribeEvents(int ms); 242 public abstract void SubscribeEvents(int ms);
238 public abstract void UnSubscribeEvents(); 243 public abstract void UnSubscribeEvents();
239 public abstract bool SubscribedEvents(); 244 public abstract bool SubscribedEvents();
@@ -463,6 +468,12 @@ namespace OpenSim.Region.Physics.Manager
463 public override bool PIDHoverActive { set { return; } } 468 public override bool PIDHoverActive { set { return; } }
464 public override PIDHoverType PIDHoverType { set { return; } } 469 public override PIDHoverType PIDHoverType { set { return; } }
465 public override float PIDHoverTau { set { return; } } 470 public override float PIDHoverTau { set { return; } }
471
472 public override Quaternion APIDTarget { set { return; } }
473 public override bool APIDActive { set { return; } }
474 public override float APIDStrength { set { return; } }
475 public override float APIDDamping { set { return; } }
476
466 477
467 public override void SetMomentum(Vector3 momentum) 478 public override void SetMomentum(Vector3 momentum)
468 { 479 {
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index c86bc62..e344f97 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -1196,6 +1196,28 @@ namespace OpenSim.Region.Physics.OdePlugin
1196 public override bool PIDHoverActive { set { return; } } 1196 public override bool PIDHoverActive { set { return; } }
1197 public override PIDHoverType PIDHoverType { set { return; } } 1197 public override PIDHoverType PIDHoverType { set { return; } }
1198 public override float PIDHoverTau { set { return; } } 1198 public override float PIDHoverTau { set { return; } }
1199
1200 public override Quaternion APIDTarget
1201 {
1202 set { return; }
1203 }
1204
1205 public override bool APIDActive
1206 {
1207 set { return; }
1208 }
1209
1210 public override float APIDStrength
1211 {
1212 set { return; }
1213 }
1214
1215 public override float APIDDamping
1216 {
1217 set { return; }
1218 }
1219
1220
1199 1221
1200 public override void SubscribeEvents(int ms) 1222 public override void SubscribeEvents(int ms)
1201 { 1223 {
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs
index 4a802cd..345112d 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs
@@ -23,6 +23,19 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 * Revised Aug, Sept 2009 by Kitto Flora. ODEDynamics.cs replaces
28 * ODEVehicleSettings.cs. It and ODEPrim.cs are re-organised:
29 * ODEPrim.cs contains methods dealing with Prim editing, Prim
30 * characteristics and Kinetic motion.
31 * ODEDynamics.cs contains methods dealing with Prim Physical motion
32 * (dynamics) and the associated settings. Old Linear and angular
33 * motors for dynamic motion have been replace with MoveLinear()
34 * and MoveAngular(); 'Physical' is used only to switch ODE dynamic
35 * simualtion on/off; VEHICAL_TYPE_NONE/VEHICAL_TYPE_<other> is to
36 * switch between 'VEHICLE' parameter use and general dynamics
37 * settings use.
38 *
26 */ 39 */
27 40
28/* Revised Aug, Sept 2009 by Kitto Flora. ODEDynamics.cs replaces 41/* Revised Aug, Sept 2009 by Kitto Flora. ODEDynamics.cs replaces
@@ -67,8 +80,8 @@ namespace OpenSim.Region.Physics.OdePlugin
67 80
68 // private OdeScene m_parentScene = null; 81 // private OdeScene m_parentScene = null;
69 private IntPtr m_body = IntPtr.Zero; 82 private IntPtr m_body = IntPtr.Zero;
70 private IntPtr m_jointGroup = IntPtr.Zero; 83// private IntPtr m_jointGroup = IntPtr.Zero;
71 private IntPtr m_aMotor = IntPtr.Zero; 84// private IntPtr m_aMotor = IntPtr.Zero;
72 85
73 86
74 // Vehicle properties 87 // Vehicle properties
@@ -120,7 +133,7 @@ namespace OpenSim.Region.Physics.OdePlugin
120 private float m_VhoverEfficiency = 0f; 133 private float m_VhoverEfficiency = 0f;
121 private float m_VhoverTimescale = 0f; 134 private float m_VhoverTimescale = 0f;
122 private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height 135 private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height
123 private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle. 136 private float m_VehicleBuoyancy = 0f; // Set by VEHICLE_BUOYANCY, for a vehicle.
124 // Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity) 137 // Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity)
125 // KF: So far I have found no good method to combine a script-requested .Z velocity and gravity. 138 // KF: So far I have found no good method to combine a script-requested .Z velocity and gravity.
126 // Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity. 139 // Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity.
@@ -479,7 +492,7 @@ namespace OpenSim.Region.Physics.OdePlugin
479 Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); // rotq = rotation of object 492 Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); // rotq = rotation of object
480 m_dir *= rotq; // apply obj rotation to velocity vector 493 m_dir *= rotq; // apply obj rotation to velocity vector
481 494
482 // add Gravity andBuoyancy 495 // add Gravity and Buoyancy
483 // KF: So far I have found no good method to combine a script-requested 496 // KF: So far I have found no good method to combine a script-requested
484 // .Z velocity and gravity. Therefore only 0g will used script-requested 497 // .Z velocity and gravity. Therefore only 0g will used script-requested
485 // .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only. 498 // .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only.
@@ -561,6 +574,7 @@ namespace OpenSim.Region.Physics.OdePlugin
561 private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate 574 private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate
562 private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body 575 private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body
563 */ 576 */
577//if(frcount == 0) Console.WriteLine("MoveAngular ");
564 578
565 // Get what the body is doing, this includes 'external' influences 579 // Get what the body is doing, this includes 'external' influences
566 d.Vector3 angularVelocity = d.BodyGetAngularVel(Body); 580 d.Vector3 angularVelocity = d.BodyGetAngularVel(Body);
@@ -615,7 +629,7 @@ namespace OpenSim.Region.Physics.OdePlugin
615 // Error is 0 (no error) to +/- 2 (max error) 629 // Error is 0 (no error) to +/- 2 (max error)
616 // scale it by VAservo 630 // scale it by VAservo
617 verterr = verterr * VAservo; 631 verterr = verterr * VAservo;
618//if(frcount == 0) Console.WriteLine("VAerr=" + verterr); 632if(frcount == 0) Console.WriteLine("VAerr=" + verterr);
619 633
620 // As the body rotates around the X axis, then verterr.Y increases; Rotated around Y then .X increases, so 634 // As the body rotates around the X axis, then verterr.Y increases; Rotated around Y then .X increases, so
621 // Change Body angular velocity X based on Y, and Y based on X. Z is not changed. 635 // Change Body angular velocity X based on Y, and Y based on X. Z is not changed.
@@ -636,7 +650,7 @@ namespace OpenSim.Region.Physics.OdePlugin
636 // Deflection section tba 650 // Deflection section tba
637 651
638 // Sum velocities 652 // Sum velocities
639 m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // + bank + deflection 653 m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // tba: + bank + deflection
640 654
641 if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f)) 655 if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f))
642 { 656 {
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 5ff9d32..62c5c81 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -21,6 +21,18 @@
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 * Revised August 26 2009 by Kitto Flora. ODEDynamics.cs replaces
26 * ODEVehicleSettings.cs. It and ODEPrim.cs are re-organised:
27 * ODEPrim.cs contains methods dealing with Prim editing, Prim
28 * characteristics and Kinetic motion.
29 * ODEDynamics.cs contains methods dealing with Prim Physical motion
30 * (dynamics) and the associated settings. Old Linear and angular
31 * motors for dynamic motion have been replace with MoveLinear()
32 * and MoveAngular(); 'Physical' is used only to switch ODE dynamic
33 * simualtion on/off; VEHICAL_TYPE_NONE/VEHICAL_TYPE_<other> is to
34 * switch between 'VEHICLE' parameter use and general dynamics
35 * settings use.
24 */ 36 */
25 37
26/* 38/*
@@ -81,7 +93,12 @@ namespace OpenSim.Region.Physics.OdePlugin
81 private float m_PIDTau; 93 private float m_PIDTau;
82 private float PID_D = 35f; 94 private float PID_D = 35f;
83 private float PID_G = 25f; 95 private float PID_G = 25f;
84 private bool m_usePID; 96 private bool m_usePID = false;
97
98 private Quaternion m_APIDTarget = new Quaternion();
99 private float m_APIDStrength = 0.5f;
100 private float m_APIDDamping = 0.5f;
101 private bool m_useAPID = false;
85 102
86 // KF: These next 7 params apply to llSetHoverHeight(float height, integer water, float tau), 103 // KF: These next 7 params apply to llSetHoverHeight(float height, integer water, float tau),
87 // and are for non-VEHICLES only. 104 // and are for non-VEHICLES only.
@@ -90,10 +107,17 @@ namespace OpenSim.Region.Physics.OdePlugin
90 private float m_PIDHoverTau; 107 private float m_PIDHoverTau;
91 private bool m_useHoverPID; 108 private bool m_useHoverPID;
92 private PIDHoverType m_PIDHoverType = PIDHoverType.Ground; 109 private PIDHoverType m_PIDHoverType = PIDHoverType.Ground;
110<<<<<<< HEAD:OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
111 private float m_targetHoverHeight = 0f;
112 private float m_groundHeight = 0f;
113 private float m_waterHeight = 0f;
114 private float m_buoyancy = 0f; //Set by llSetBuoyancy(), for non-vehicles.
115=======
93 private float m_targetHoverHeight; 116 private float m_targetHoverHeight;
94 private float m_groundHeight; 117 private float m_groundHeight;
95 private float m_waterHeight; 118 private float m_waterHeight;
96 private float m_buoyancy; //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. 119 private float m_buoyancy; //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle.
120>>>>>>> vehicles:OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
97 121
98 // private float m_tensor = 5f; 122 // private float m_tensor = 5f;
99 private int body_autodisable_frames = 20; 123 private int body_autodisable_frames = 20;
@@ -182,6 +206,9 @@ namespace OpenSim.Region.Physics.OdePlugin
182 private ODEDynamics m_vehicle; 206 private ODEDynamics m_vehicle;
183 207
184 internal int m_material = (int)Material.Wood; 208 internal int m_material = (int)Material.Wood;
209
210 private int frcount = 0; // Used to limit dynamics debug output to
211
185 212
186 public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size, 213 public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size,
187 Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool pisPhysical, CollisionLocker dode) 214 Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool pisPhysical, CollisionLocker dode)
@@ -1558,9 +1585,14 @@ Console.WriteLine(" JointCreateFixed");
1558 float fy = 0; 1585 float fy = 0;
1559 float fz = 0; 1586 float fz = 0;
1560 1587
1588 frcount++; // used to limit debug comment output
1589 if (frcount > 100)
1590 frcount = 0;
1561 1591
1562 if (IsPhysical && (Body != IntPtr.Zero) && !m_isSelected && !childPrim) // KF: Only move root prims. 1592 if (IsPhysical && (Body != IntPtr.Zero) && !m_isSelected && !childPrim) // KF: Only move root prims.
1563 { 1593 {
1594if(frcount == 0) Console.WriteLine("Move " + m_primName + " VTyp " + m_vehicle.Type +
1595 " usePID=" + m_usePID + " seHover=" + m_useHoverPID + " useAPID=" + m_useAPID);
1564 if (m_vehicle.Type != Vehicle.TYPE_NONE) 1596 if (m_vehicle.Type != Vehicle.TYPE_NONE)
1565 { 1597 {
1566 // 'VEHICLES' are dealt with in ODEDynamics.cs 1598 // 'VEHICLES' are dealt with in ODEDynamics.cs
@@ -1568,7 +1600,6 @@ Console.WriteLine(" JointCreateFixed");
1568 } 1600 }
1569 else 1601 else
1570 { 1602 {
1571//Console.WriteLine("Move " + m_primName);
1572 if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009 1603 if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009
1573 // NON-'VEHICLES' are dealt with here 1604 // NON-'VEHICLES' are dealt with here
1574 if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f)) 1605 if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f))
@@ -1590,21 +1621,18 @@ Console.WriteLine(" JointCreateFixed");
1590 //m_log.Info(m_collisionFlags.ToString()); 1621 //m_log.Info(m_collisionFlags.ToString());
1591 1622
1592 1623
1593 //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. 1624 //KF: m_buoyancy is set by llSetBuoyancy() and is for non-vehicle.
1594 // would come from SceneObjectPart.cs, public void SetBuoyancy(float fvalue) , PhysActor.Buoyancy = fvalue; ??
1595 // m_buoyancy: (unlimited value) <0=Falls fast; 0=1g; 1=0g; >1 = floats up 1625 // m_buoyancy: (unlimited value) <0=Falls fast; 0=1g; 1=0g; >1 = floats up
1596 // gravityz multiplier = 1 - m_buoyancy 1626 // NB Prims in ODE are no subject to global gravity
1597 fz = _parent_scene.gravityz * (1.0f - m_buoyancy) * m_mass; 1627 fz = _parent_scene.gravityz * (1.0f - m_buoyancy) * m_mass; // force = acceleration * mass
1598 1628
1599 if (m_usePID) 1629 if (m_usePID)
1600 { 1630 {
1601//Console.WriteLine("PID " + m_primName); 1631//if(frcount == 0) Console.WriteLine("PID " + m_primName);
1602 // KF - this is for object move? eg. llSetPos() ? 1632 // KF - this is for object MoveToTarget.
1633
1603 //if (!d.BodyIsEnabled(Body)) 1634 //if (!d.BodyIsEnabled(Body))
1604 //d.BodySetForce(Body, 0f, 0f, 0f); 1635 //d.BodySetForce(Body, 0f, 0f, 0f);
1605 // If we're using the PID controller, then we have no gravity
1606 //fz = (-1 * _parent_scene.gravityz) * m_mass; //KF: ?? Prims have no global gravity,so simply...
1607 fz = 0f;
1608 1636
1609 // no lock; for now it's only called from within Simulate() 1637 // no lock; for now it's only called from within Simulate()
1610 1638
@@ -1739,7 +1767,7 @@ Console.WriteLine(" JointCreateFixed");
1739 d.BodySetPosition(Body, pos.X, pos.Y, m_targetHoverHeight); 1767 d.BodySetPosition(Body, pos.X, pos.Y, m_targetHoverHeight);
1740 d.BodySetLinearVel(Body, vel.X, vel.Y, 0); 1768 d.BodySetLinearVel(Body, vel.X, vel.Y, 0);
1741 d.BodyAddForce(Body, 0, 0, fz); 1769 d.BodyAddForce(Body, 0, 0, fz);
1742 return; 1770 //KF this prevents furthur motions return;
1743 } 1771 }
1744 else 1772 else
1745 { 1773 {
@@ -1748,8 +1776,46 @@ Console.WriteLine(" JointCreateFixed");
1748 // We're flying and colliding with something 1776 // We're flying and colliding with something
1749 fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass); 1777 fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass);
1750 } 1778 }
1751 } 1779 } // end m_useHoverPID && !m_usePID
1752 1780
1781 if (m_useAPID)
1782 {
1783 // RotLookAt, apparently overrides all other rotation sources. Inputs:
1784 // Quaternion m_APIDTarget
1785 // float m_APIDStrength // From SL experiments, this is the time to get there
1786 // float m_APIDDamping // From SL experiments, this is damping, 1.0 = damped, 0.1 = wobbly
1787 // Also in SL the mass of the object has no effect on time to get there.
1788 // Factors:
1789//if(frcount == 0) Console.WriteLine("APID ");
1790 // get present body rotation
1791 float limit = 1.0f;
1792 float scaler = 50f; // adjusts damping time
1793 float RLAservo = 0f;
1794
1795 d.Quaternion rot = d.BodyGetQuaternion(Body);
1796 Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W);
1797 Quaternion rot_diff = Quaternion.Inverse(rotq) * m_APIDTarget;
1798 float diff_angle;
1799 Vector3 diff_axis;
1800 rot_diff.GetAxisAngle(out diff_axis, out diff_angle);
1801 diff_axis.Normalize();
1802 if(diff_angle > 0.01f) // diff_angle is always +ve
1803 {
1804// PhysicsVector rotforce = new PhysicsVector(diff_axis.X, diff_axis.Y, diff_axis.Z);
1805 Vector3 rotforce = new Vector3(diff_axis.X, diff_axis.Y, diff_axis.Z);
1806 rotforce = rotforce * rotq;
1807 if(diff_angle > limit) diff_angle = limit; // cap the rotate rate
1808// RLAservo = timestep / m_APIDStrength * m_mass * scaler;
1809 // rotforce = rotforce * RLAservo * diff_angle ;
1810 // d.BodyAddRelTorque(Body, rotforce.X, rotforce.Y, rotforce.Z);
1811 RLAservo = timestep / m_APIDStrength * scaler;
1812 rotforce = rotforce * RLAservo * diff_angle ;
1813 d.BodySetAngularVel (Body, rotforce.X, rotforce.Y, rotforce.Z);
1814//Console.WriteLine("axis= " + diff_axis + " angle= " + diff_angle + "servo= " + RLAservo);
1815 }
1816if(frcount == 0) Console.WriteLine("mass= " + m_mass + " servo= " + RLAservo + " angle= " + diff_angle);
1817 } // end m_useAPID
1818
1753 fx *= m_mass; 1819 fx *= m_mass;
1754 fy *= m_mass; 1820 fy *= m_mass;
1755 //fz *= m_mass; 1821 //fz *= m_mass;
@@ -2643,7 +2709,7 @@ Console.WriteLine(" JointCreateFixed");
2643 //outofBounds = true; 2709 //outofBounds = true;
2644 } 2710 }
2645 2711
2646 float Adiff = 1.0f - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)); 2712// float Adiff = 1.0f - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation));
2647//Console.WriteLine("Adiff " + m_primName + " = " + Adiff); 2713//Console.WriteLine("Adiff " + m_primName + " = " + Adiff);
2648 if ((Math.Abs(m_lastposition.X - l_position.X) < 0.02) 2714 if ((Math.Abs(m_lastposition.X - l_position.X) < 0.02)
2649 && (Math.Abs(m_lastposition.Y - l_position.Y) < 0.02) 2715 && (Math.Abs(m_lastposition.Y - l_position.Y) < 0.02)
@@ -2782,6 +2848,12 @@ Console.WriteLine(" JointCreateFixed");
2782 } 2848 }
2783 public override bool PIDActive { set { m_usePID = value; } } 2849 public override bool PIDActive { set { m_usePID = value; } }
2784 public override float PIDTau { set { m_PIDTau = value; } } 2850 public override float PIDTau { set { m_PIDTau = value; } }
2851
2852 // For RotLookAt
2853 public override Quaternion APIDTarget { set { m_APIDTarget = value; } }
2854 public override bool APIDActive { set { m_useAPID = value; } }
2855 public override float APIDStrength { set { m_APIDStrength = value; } }
2856 public override float APIDDamping { set { m_APIDDamping = value; } }
2785 2857
2786 public override float PIDHoverHeight { set { m_PIDHoverHeight = value; ; } } 2858 public override float PIDHoverHeight { set { m_PIDHoverHeight = value; ; } }
2787 public override bool PIDHoverActive { set { m_useHoverPID = value; } } 2859 public override bool PIDHoverActive { set { m_useHoverPID = value; } }
diff --git a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs
index 26cd1dd..566b4e7 100644
--- a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs
+++ b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs
@@ -304,6 +304,27 @@ namespace OpenSim.Region.Physics.POSPlugin
304 { 304 {
305 set { return; } 305 set { return; }
306 } 306 }
307
308 public override Quaternion APIDTarget
309 {
310 set { return; }
311 }
312
313 public override bool APIDActive
314 {
315 set { return; }
316 }
317
318 public override float APIDStrength
319 {
320 set { return; }
321 }
322
323 public override float APIDDamping
324 {
325 set { return; }
326 }
327
307 328
308 public override void SubscribeEvents(int ms) 329 public override void SubscribeEvents(int ms)
309 { 330 {
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs
index 96c3e26..847b634 100644
--- a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs
+++ b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs
@@ -299,6 +299,26 @@ namespace OpenSim.Region.Physics.POSPlugin
299 { 299 {
300 set { return; } 300 set { return; }
301 } 301 }
302 public override Quaternion APIDTarget
303 {
304 set { return; }
305 }
306
307 public override bool APIDActive
308 {
309 set { return; }
310 }
311
312 public override float APIDStrength
313 {
314 set { return; }
315 }
316
317 public override float APIDDamping
318 {
319 set { return; }
320 }
321
302 322
303 public override void SubscribeEvents(int ms) 323 public override void SubscribeEvents(int ms)
304 { 324 {
diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
index 8bdb18d..24eb6b1 100644
--- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
+++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
@@ -498,6 +498,28 @@ namespace OpenSim.Region.Physics.PhysXPlugin
498 public override bool PIDHoverActive { set { return; } } 498 public override bool PIDHoverActive { set { return; } }
499 public override PIDHoverType PIDHoverType { set { return; } } 499 public override PIDHoverType PIDHoverType { set { return; } }
500 public override float PIDHoverTau { set { return; } } 500 public override float PIDHoverTau { set { return; } }
501
502 public override Quaternion APIDTarget
503 {
504 set { return; }
505 }
506
507 public override bool APIDActive
508 {
509 set { return; }
510 }
511
512 public override float APIDStrength
513 {
514 set { return; }
515 }
516
517 public override float APIDDamping
518 {
519 set { return; }
520 }
521
522
501 523
502 public override void SubscribeEvents(int ms) 524 public override void SubscribeEvents(int ms)
503 { 525 {
@@ -780,6 +802,28 @@ namespace OpenSim.Region.Physics.PhysXPlugin
780 public override bool PIDHoverActive { set { return; } } 802 public override bool PIDHoverActive { set { return; } }
781 public override PIDHoverType PIDHoverType { set { return; } } 803 public override PIDHoverType PIDHoverType { set { return; } }
782 public override float PIDHoverTau { set { return; } } 804 public override float PIDHoverTau { set { return; } }
805
806 public override Quaternion APIDTarget
807 {
808 set { return; }
809 }
810
811 public override bool APIDActive
812 {
813 set { return; }
814 }
815
816 public override float APIDStrength
817 {
818 set { return; }
819 }
820
821 public override float APIDDamping
822 {
823 set { return; }
824 }
825
826
783 827
784 public override void SubscribeEvents(int ms) 828 public override void SubscribeEvents(int ms)
785 { 829 {