aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSMotors.cs25
1 files changed, 16 insertions, 9 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
index 6d0db2e..82fd2d2 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs
@@ -138,7 +138,8 @@ public class BSVMotor : BSMotor
138 CurrentValue = TargetValue = Vector3.Zero; 138 CurrentValue = TargetValue = Vector3.Zero;
139 } 139 }
140 140
141 // Compute the next step and return the new current value 141 // Compute the next step and return the new current value.
142 // Returns the correction needed to move 'current' to 'target'.
142 public virtual Vector3 Step(float timeStep) 143 public virtual Vector3 Step(float timeStep)
143 { 144 {
144 if (!Enabled) return TargetValue; 145 if (!Enabled) return TargetValue;
@@ -150,7 +151,7 @@ public class BSVMotor : BSMotor
150 Vector3 error = TargetValue - CurrentValue; 151 Vector3 error = TargetValue - CurrentValue;
151 if (!ErrorIsZero(error)) 152 if (!ErrorIsZero(error))
152 { 153 {
153 correction = Step(timeStep, error); 154 correction = StepError(timeStep, error);
154 155
155 CurrentValue += correction; 156 CurrentValue += correction;
156 157
@@ -187,14 +188,20 @@ public class BSVMotor : BSMotor
187 else 188 else
188 { 189 {
189 // Difference between what we have and target is small. Motor is done. 190 // Difference between what we have and target is small. Motor is done.
190 CurrentValue = TargetValue; 191 CurrentValue = TargetValue = Vector3.Zero;
191 MDetailLog("{0}, BSVMotor.Step,zero,{1},origTgt={2},origCurr={3},ret={4}", 192 MDetailLog("{0}, BSVMotor.Step,zero,{1},origTgt={2},origCurr={3},ret={4}",
192 BSScene.DetailLogZero, UseName, origCurrVal, origTarget, CurrentValue); 193 BSScene.DetailLogZero, UseName, origCurrVal, origTarget, CurrentValue);
193 } 194 }
194 195
195 return CurrentValue; 196 return correction;
197 }
198 // version of step that sets the current value before doing the step
199 public virtual Vector3 Step(float timeStep, Vector3 current)
200 {
201 CurrentValue = current;
202 return Step(timeStep);
196 } 203 }
197 public virtual Vector3 Step(float timeStep, Vector3 error) 204 public virtual Vector3 StepError(float timeStep, Vector3 error)
198 { 205 {
199 if (!Enabled) return Vector3.Zero; 206 if (!Enabled) return Vector3.Zero;
200 207
@@ -304,7 +311,7 @@ public class BSFMotor : BSMotor
304 float error = TargetValue - CurrentValue; 311 float error = TargetValue - CurrentValue;
305 if (!ErrorIsZero(error)) 312 if (!ErrorIsZero(error))
306 { 313 {
307 correction = Step(timeStep, error); 314 correction = StepError(timeStep, error);
308 315
309 CurrentValue += correction; 316 CurrentValue += correction;
310 317
@@ -347,7 +354,7 @@ public class BSFMotor : BSMotor
347 return CurrentValue; 354 return CurrentValue;
348 } 355 }
349 356
350 public virtual float Step(float timeStep, float error) 357 public virtual float StepError(float timeStep, float error)
351 { 358 {
352 if (!Enabled) return 0f; 359 if (!Enabled) return 0f;
353 360
@@ -440,8 +447,8 @@ public class BSPIDVMotor : BSVMotor
440 } 447 }
441 } 448 }
442 449
443 // Ignore Current and Target Values and just advance the PID computation on this error. 450 // Advance the PID computation on this error.
444 public override Vector3 Step(float timeStep, Vector3 error) 451 public override Vector3 StepError(float timeStep, Vector3 error)
445 { 452 {
446 if (!Enabled) return Vector3.Zero; 453 if (!Enabled) return Vector3.Zero;
447 454