aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs')
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs149
1 files changed, 115 insertions, 34 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index 61d5a1d..f2f4725 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -161,9 +161,6 @@ namespace OpenSim.Region.Physics.OdePlugin
161 161
162 private List<OdePrim> childrenPrim = new List<OdePrim>(); 162 private List<OdePrim> childrenPrim = new List<OdePrim>();
163 163
164
165// private bool m_throttleUpdates;
166// private int throttleCounter;
167 public float m_collisionscore; 164 public float m_collisionscore;
168 private int m_colliderfilter = 0; 165 private int m_colliderfilter = 0;
169 166
@@ -175,7 +172,7 @@ namespace OpenSim.Region.Physics.OdePlugin
175 private bool m_lastUpdateSent; 172 private bool m_lastUpdateSent;
176 173
177 public IntPtr Body = IntPtr.Zero; 174 public IntPtr Body = IntPtr.Zero;
178// public String Name { get; private set; } 175
179 private Vector3 _target_velocity; 176 private Vector3 _target_velocity;
180 177
181 public Vector3 primOOBsize; // prim real dimensions from mesh 178 public Vector3 primOOBsize; // prim real dimensions from mesh
@@ -366,12 +363,7 @@ namespace OpenSim.Region.Physics.OdePlugin
366 363
367 364
368 public override bool ThrottleUpdates {get;set;} 365 public override bool ThrottleUpdates {get;set;}
369/* 366
370 {
371 get { return m_throttleUpdates; }
372 set { m_throttleUpdates = value; }
373 }
374*/
375 public override bool Stopped 367 public override bool Stopped
376 { 368 {
377 get { return _zeroFlag; } 369 get { return _zeroFlag; }
@@ -418,7 +410,6 @@ namespace OpenSim.Region.Physics.OdePlugin
418 410
419 public override Vector3 Force 411 public override Vector3 Force
420 { 412 {
421 //get { return Vector3.Zero; }
422 get { return m_force; } 413 get { return m_force; }
423 set 414 set
424 { 415 {
@@ -673,7 +664,7 @@ namespace OpenSim.Region.Physics.OdePlugin
673 get { return m_buoyancy; } 664 get { return m_buoyancy; }
674 set 665 set
675 { 666 {
676 m_buoyancy = value; 667 AddChange(changes.Buoyancy,value);
677 } 668 }
678 } 669 }
679 670
@@ -691,28 +682,35 @@ namespace OpenSim.Region.Physics.OdePlugin
691 { 682 {
692 if (value.IsFinite()) 683 if (value.IsFinite())
693 { 684 {
694 m_PIDTarget = value; 685 AddChange(changes.PIDTarget,value);
695 } 686 }
696 else 687 else
697 m_log.WarnFormat("[PHYSICS]: Got NaN PIDTarget from Scene on Object {0}", Name); 688 m_log.WarnFormat("[PHYSICS]: Got NaN PIDTarget from Scene on Object {0}", Name);
698 } 689 }
699 } 690 }
700 691
701 public override bool PIDActive { set { m_usePID = value; } } 692 public override bool PIDActive
693 {
694 set
695 {
696 AddChange(changes.PIDActive,value);
697 }
698 }
699
702 public override float PIDTau 700 public override float PIDTau
703 { 701 {
704 set 702 set
705 { 703 {
706 if (value <= 0) 704 float tmp = 0;
707 m_PIDTau = 0; 705 if (value > 0)
708 else
709 { 706 {
710 float mint = (0.05f > m_timeStep ? 0.05f : m_timeStep); 707 float mint = (0.05f > m_timeStep ? 0.05f : m_timeStep);
711 if (value < mint) 708 if (value < mint)
712 m_PIDTau = mint; 709 tmp = mint;
713 else 710 else
714 m_PIDTau = value; 711 tmp = value;
715 } 712 }
713 AddChange(changes.PIDTau,tmp);
716 } 714 }
717 } 715 }
718 716
@@ -720,27 +718,39 @@ namespace OpenSim.Region.Physics.OdePlugin
720 { 718 {
721 set 719 set
722 { 720 {
723 m_PIDHoverHeight = value; 721 AddChange(changes.PIDHoverHeight,value);
724 if (value == 0) 722 }
725 m_useHoverPID = false; 723 }
724 public override bool PIDHoverActive
725 {
726 set
727 {
728 AddChange(changes.PIDHoverActive, value);
726 } 729 }
727 } 730 }
728 public override bool PIDHoverActive { set { m_useHoverPID = value; } } 731
729 public override PIDHoverType PIDHoverType { set { m_PIDHoverType = value; } } 732 public override PIDHoverType PIDHoverType
733 {
734 set
735 {
736 AddChange(changes.PIDHoverType,value);
737 }
738 }
739
730 public override float PIDHoverTau 740 public override float PIDHoverTau
731 { 741 {
732 set 742 set
733 { 743 {
734 if (value <= 0) 744 float tmp =0;
735 m_PIDHoverTau = 0; 745 if (value > 0)
736 else
737 { 746 {
738 float mint = (0.05f > m_timeStep ? 0.05f : m_timeStep); 747 float mint = (0.05f > m_timeStep ? 0.05f : m_timeStep);
739 if (value < mint) 748 if (value < mint)
740 m_PIDHoverTau = mint; 749 tmp = mint;
741 else 750 else
742 m_PIDHoverTau = value; 751 tmp = value;
743 } 752 }
753 AddChange(changes.PIDHoverTau, tmp);
744 } 754 }
745 } 755 }
746 756
@@ -981,7 +991,6 @@ namespace OpenSim.Region.Physics.OdePlugin
981 return false; 991 return false;
982 } 992 }
983 993
984
985 public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size, 994 public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size,
986 Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical,bool pisPhantom,byte _shapeType,uint plocalID) 995 Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical,bool pisPhantom,byte _shapeType,uint plocalID)
987 { 996 {
@@ -3099,7 +3108,6 @@ namespace OpenSim.Region.Physics.OdePlugin
3099 resetCollisionAccounting(); 3108 resetCollisionAccounting();
3100 } 3109 }
3101 3110
3102
3103 private void changeDisable(bool disable) 3111 private void changeDisable(bool disable)
3104 { 3112 {
3105 if (disable) 3113 if (disable)
@@ -3250,7 +3258,6 @@ namespace OpenSim.Region.Physics.OdePlugin
3250 d.BodyEnable(Body); 3258 d.BodyEnable(Body);
3251 } 3259 }
3252 3260
3253
3254 private void changeAddForce(Vector3 theforce) 3261 private void changeAddForce(Vector3 theforce)
3255 { 3262 {
3256 m_forceacc += theforce; 3263 m_forceacc += theforce;
@@ -3267,7 +3274,6 @@ namespace OpenSim.Region.Physics.OdePlugin
3267 d.BodyEnable(Body); 3274 d.BodyEnable(Body);
3268 } 3275 }
3269 } 3276 }
3270
3271 m_collisionscore = 0; 3277 m_collisionscore = 0;
3272 } 3278 }
3273 } 3279 }
@@ -3317,7 +3323,6 @@ namespace OpenSim.Region.Physics.OdePlugin
3317 _velocity = newVel; 3323 _velocity = newVel;
3318 } 3324 }
3319 3325
3320
3321 private void changeangvelocity(Vector3 newAngVel) 3326 private void changeangvelocity(Vector3 newAngVel)
3322 { 3327 {
3323 float len = newAngVel.LengthSquared(); 3328 float len = newAngVel.LengthSquared();
@@ -3384,6 +3389,7 @@ namespace OpenSim.Region.Physics.OdePlugin
3384 m_vehicle = new ODEDynamics(this); 3389 m_vehicle = new ODEDynamics(this);
3385 m_vehicle.DoSetVehicle(vdata); 3390 m_vehicle.DoSetVehicle(vdata);
3386 } 3391 }
3392
3387 private void changeVehicleType(int value) 3393 private void changeVehicleType(int value)
3388 { 3394 {
3389 if (value == (int)Vehicle.TYPE_NONE) 3395 if (value == (int)Vehicle.TYPE_NONE)
@@ -3429,6 +3435,48 @@ namespace OpenSim.Region.Physics.OdePlugin
3429 m_vehicle.ProcessVehicleFlags(bp.param, bp.value); 3435 m_vehicle.ProcessVehicleFlags(bp.param, bp.value);
3430 } 3436 }
3431 3437
3438 private void changeBuoyancy(float b)
3439 {
3440 m_buoyancy = b;
3441 }
3442
3443 private void changePIDTarget(Vector3 trg)
3444 {
3445 m_PIDTarget = trg;
3446 }
3447
3448 private void changePIDTau(float tau)
3449 {
3450 m_PIDTau = tau;
3451 }
3452
3453 private void changePIDActive(bool val)
3454 {
3455 m_usePID = val;
3456 }
3457
3458 private void changePIDHoverHeight(float val)
3459 {
3460 m_PIDHoverHeight = val;
3461 if (val == 0)
3462 m_useHoverPID = false;
3463 }
3464
3465 private void changePIDHoverType(PIDHoverType type)
3466 {
3467 m_PIDHoverType = type;
3468 }
3469
3470 private void changePIDHoverTau(float tau)
3471 {
3472 m_PIDHoverTau = tau;
3473 }
3474
3475 private void changePIDHoverActive(bool active)
3476 {
3477 m_useHoverPID = active;
3478 }
3479
3432 #endregion 3480 #endregion
3433 3481
3434 public void Move() 3482 public void Move()
@@ -3987,6 +4035,39 @@ namespace OpenSim.Region.Physics.OdePlugin
3987 case changes.SetVehicle: 4035 case changes.SetVehicle:
3988 changeSetVehicle((VehicleData) arg); 4036 changeSetVehicle((VehicleData) arg);
3989 break; 4037 break;
4038
4039 case changes.Buoyancy:
4040 changeBuoyancy((float)arg);
4041 break;
4042
4043 case changes.PIDTarget:
4044 changePIDTarget((Vector3)arg);
4045 break;
4046
4047 case changes.PIDTau:
4048 changePIDTau((float)arg);
4049 break;
4050
4051 case changes.PIDActive:
4052 changePIDActive((bool)arg);
4053 break;
4054
4055 case changes.PIDHoverHeight:
4056 changePIDHoverHeight((float)arg);
4057 break;
4058
4059 case changes.PIDHoverType:
4060 changePIDHoverType((PIDHoverType)arg);
4061 break;
4062
4063 case changes.PIDHoverTau:
4064 changePIDHoverTau((float)arg);
4065 break;
4066
4067 case changes.PIDHoverActive:
4068 changePIDHoverActive((bool)arg);
4069 break;
4070
3990 case changes.Null: 4071 case changes.Null:
3991 donullchange(); 4072 donullchange();
3992 break; 4073 break;