aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSMotors.cs18
1 files changed, 16 insertions, 2 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
index 8781fe9..9e1a9ba 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
@@ -43,7 +43,9 @@ public abstract class BSMotor
43 { 43 {
44 UseName = useName; 44 UseName = useName;
45 PhysicsScene = null; 45 PhysicsScene = null;
46 Enabled = true;
46 } 47 }
48 public virtual bool Enabled { get; set; }
47 public virtual void Reset() { } 49 public virtual void Reset() { }
48 public virtual void Zero() { } 50 public virtual void Zero() { }
49 public virtual void GenerateTestOutput(float timeStep) { } 51 public virtual void GenerateTestOutput(float timeStep) { }
@@ -98,6 +100,12 @@ public class BSVMotor : BSMotor
98 public virtual Vector3 CurrentValue { get; protected set; } 100 public virtual Vector3 CurrentValue { get; protected set; }
99 public virtual Vector3 LastError { get; protected set; } 101 public virtual Vector3 LastError { get; protected set; }
100 102
103 public virtual bool ErrorIsZero
104 { get {
105 return (LastError == Vector3.Zero || LastError.LengthSquared() <= ErrorZeroThreshold);
106 }
107 }
108
101 public BSVMotor(string useName) 109 public BSVMotor(string useName)
102 : base(useName) 110 : base(useName)
103 { 111 {
@@ -105,7 +113,7 @@ public class BSVMotor : BSMotor
105 Efficiency = 1f; 113 Efficiency = 1f;
106 FrictionTimescale = BSMotor.InfiniteVector; 114 FrictionTimescale = BSMotor.InfiniteVector;
107 CurrentValue = TargetValue = Vector3.Zero; 115 CurrentValue = TargetValue = Vector3.Zero;
108 ErrorZeroThreshold = 0.01f; 116 ErrorZeroThreshold = 0.001f;
109 } 117 }
110 public BSVMotor(string useName, float timeScale, float decayTimeScale, Vector3 frictionTimeScale, float efficiency) 118 public BSVMotor(string useName, float timeScale, float decayTimeScale, Vector3 frictionTimeScale, float efficiency)
111 : this(useName) 119 : this(useName)
@@ -133,6 +141,8 @@ public class BSVMotor : BSMotor
133 // Compute the next step and return the new current value 141 // Compute the next step and return the new current value
134 public virtual Vector3 Step(float timeStep) 142 public virtual Vector3 Step(float timeStep)
135 { 143 {
144 if (!Enabled) return TargetValue;
145
136 Vector3 origTarget = TargetValue; // DEBUG 146 Vector3 origTarget = TargetValue; // DEBUG
137 Vector3 origCurrVal = CurrentValue; // DEBUG 147 Vector3 origCurrVal = CurrentValue; // DEBUG
138 148
@@ -178,7 +188,7 @@ public class BSVMotor : BSMotor
178 { 188 {
179 // Difference between what we have and target is small. Motor is done. 189 // Difference between what we have and target is small. Motor is done.
180 CurrentValue = TargetValue; 190 CurrentValue = TargetValue;
181 MDetailLog("{0}, BSVMotor.Step,zero,{1},origTgt={2},origCurr={3},ret={2}", 191 MDetailLog("{0}, BSVMotor.Step,zero,{1},origTgt={2},origCurr={3},ret={4}",
182 BSScene.DetailLogZero, UseName, origCurrVal, origTarget, CurrentValue); 192 BSScene.DetailLogZero, UseName, origCurrVal, origTarget, CurrentValue);
183 } 193 }
184 194
@@ -186,6 +196,8 @@ public class BSVMotor : BSMotor
186 } 196 }
187 public virtual Vector3 Step(float timeStep, Vector3 error) 197 public virtual Vector3 Step(float timeStep, Vector3 error)
188 { 198 {
199 if (!Enabled) return Vector3.Zero;
200
189 LastError = error; 201 LastError = error;
190 Vector3 returnCorrection = Vector3.Zero; 202 Vector3 returnCorrection = Vector3.Zero;
191 if (!error.ApproxEquals(Vector3.Zero, ErrorZeroThreshold)) 203 if (!error.ApproxEquals(Vector3.Zero, ErrorZeroThreshold))
@@ -313,6 +325,8 @@ public class BSPIDVMotor : BSVMotor
313 // Ignore Current and Target Values and just advance the PID computation on this error. 325 // Ignore Current and Target Values and just advance the PID computation on this error.
314 public override Vector3 Step(float timeStep, Vector3 error) 326 public override Vector3 Step(float timeStep, Vector3 error)
315 { 327 {
328 if (!Enabled) return Vector3.Zero;
329
316 // Add up the error so we can integrate over the accumulated errors 330 // Add up the error so we can integrate over the accumulated errors
317 RunningIntegration += error * timeStep; 331 RunningIntegration += error * timeStep;
318 332