BulletSim: remove the handle to the vehicle actor and cause routines
that need it to look it up.cpu-performance
							parent
							
								
									425d2a2a97
								
							
						
					
					
						commit
						9d5ae75950
					
				|  | @ -70,18 +70,17 @@ public class BSPrim : BSPhysObject | |||
|     private int CrossingFailures { get; set; } | ||||
| 
 | ||||
|     // Keep a handle to the vehicle actor so it is easy to set parameters on same. | ||||
|     public BSDynamics VehicleActor; | ||||
|     public const string VehicleActorName = "BasicVehicle"; | ||||
| 
 | ||||
|     // Parameters for the hover actor | ||||
|     public const string HoverActorName = "HoverActor"; | ||||
|     public const string HoverActorName = "BSPrim.HoverActor"; | ||||
|     // Parameters for the axis lock actor | ||||
|     public const String LockedAxisActorName = "BSPrim.LockedAxis"; | ||||
|     // Parameters for the move to target actor | ||||
|     public const string MoveToTargetActorName = "MoveToTargetActor"; | ||||
|     public const string MoveToTargetActorName = "BSPrim.MoveToTargetActor"; | ||||
|     // Parameters for the setForce and setTorque actors | ||||
|     public const string SetForceActorName = "SetForceActor"; | ||||
|     public const string SetTorqueActorName = "SetTorqueActor"; | ||||
|     public const string SetForceActorName = "BSPrim.SetForceActor"; | ||||
|     public const string SetTorqueActorName = "BSPrim.SetTorqueActor"; | ||||
| 
 | ||||
|     public BSPrim(uint localID, String primName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 size, | ||||
|                        OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical) | ||||
|  | @ -100,9 +99,8 @@ public class BSPrim : BSPhysObject | |||
|         _isPhysical = pisPhysical; | ||||
|         _isVolumeDetect = false; | ||||
| 
 | ||||
|         // We keep a handle to the vehicle actor so we can set vehicle parameters later. | ||||
|         VehicleActor = new BSDynamics(PhysScene, this, VehicleActorName); | ||||
|         PhysicalActors.Add(VehicleActorName, VehicleActor); | ||||
|         // Add a dynamic vehicle to our set of actors that can move this prim. | ||||
|         PhysicalActors.Add(VehicleActorName, new BSDynamics(PhysScene, this, VehicleActorName)); | ||||
| 
 | ||||
|         _mass = CalculateMass(); | ||||
| 
 | ||||
|  | @ -505,9 +503,25 @@ public class BSPrim : BSPhysObject | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|         // Find and return a handle to the current vehicle actor. | ||||
|         // Return 'null' if there is no vehicle actor. | ||||
|     public BSDynamics GetVehicleActor() | ||||
|     { | ||||
|         BSDynamics ret = null; | ||||
|         BSActor actor; | ||||
|         if (PhysicalActors.TryGetActor(VehicleActorName, out actor)) | ||||
|         { | ||||
|             ret = actor as BSDynamics; | ||||
|         } | ||||
|         return ret; | ||||
|     } | ||||
|     public override int VehicleType { | ||||
|         get { | ||||
|             return (int)VehicleActor.Type; | ||||
|             int ret = (int)Vehicle.TYPE_NONE; | ||||
|             BSDynamics vehicleActor = GetVehicleActor(); | ||||
|             if (vehicleActor != null) | ||||
|                 ret = (int)vehicleActor.Type; | ||||
|             return ret; | ||||
|         } | ||||
|         set { | ||||
|             Vehicle type = (Vehicle)value; | ||||
|  | @ -518,8 +532,12 @@ public class BSPrim : BSPhysObject | |||
|                 //    change all the parameters. Like a plane changing to CAR when on the | ||||
|                 //    ground. In this case, don't want to zero motion. | ||||
|                 // ZeroMotion(true /* inTaintTime */); | ||||
|                 VehicleActor.ProcessTypeChange(type); | ||||
|                 ActivateIfPhysical(false); | ||||
|                 BSDynamics vehicleActor = GetVehicleActor(); | ||||
|                 if (vehicleActor != null) | ||||
|                 { | ||||
|                     vehicleActor.ProcessTypeChange(type); | ||||
|                     ActivateIfPhysical(false); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | @ -527,31 +545,47 @@ public class BSPrim : BSPhysObject | |||
|     { | ||||
|         PhysScene.TaintedObject("BSPrim.VehicleFloatParam", delegate() | ||||
|         { | ||||
|             VehicleActor.ProcessFloatVehicleParam((Vehicle)param, value); | ||||
|             ActivateIfPhysical(false); | ||||
|             BSDynamics vehicleActor = GetVehicleActor(); | ||||
|             if (vehicleActor != null) | ||||
|             { | ||||
|                 vehicleActor.ProcessFloatVehicleParam((Vehicle)param, value); | ||||
|                 ActivateIfPhysical(false); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|     public override void VehicleVectorParam(int param, OMV.Vector3 value) | ||||
|     { | ||||
|         PhysScene.TaintedObject("BSPrim.VehicleVectorParam", delegate() | ||||
|         { | ||||
|             VehicleActor.ProcessVectorVehicleParam((Vehicle)param, value); | ||||
|             ActivateIfPhysical(false); | ||||
|             BSDynamics vehicleActor = GetVehicleActor(); | ||||
|             if (vehicleActor != null) | ||||
|             { | ||||
|                 vehicleActor.ProcessVectorVehicleParam((Vehicle)param, value); | ||||
|                 ActivateIfPhysical(false); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|     public override void VehicleRotationParam(int param, OMV.Quaternion rotation) | ||||
|     { | ||||
|         PhysScene.TaintedObject("BSPrim.VehicleRotationParam", delegate() | ||||
|         { | ||||
|             VehicleActor.ProcessRotationVehicleParam((Vehicle)param, rotation); | ||||
|             ActivateIfPhysical(false); | ||||
|             BSDynamics vehicleActor = GetVehicleActor(); | ||||
|             if (vehicleActor != null) | ||||
|             { | ||||
|                 vehicleActor.ProcessRotationVehicleParam((Vehicle)param, rotation); | ||||
|                 ActivateIfPhysical(false); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|     public override void VehicleFlags(int param, bool remove) | ||||
|     { | ||||
|         PhysScene.TaintedObject("BSPrim.VehicleFlags", delegate() | ||||
|         { | ||||
|             VehicleActor.ProcessVehicleFlags(param, remove); | ||||
|             BSDynamics vehicleActor = GetVehicleActor(); | ||||
|             if (vehicleActor != null) | ||||
|             { | ||||
|                 vehicleActor.ProcessVehicleFlags(param, remove); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -114,21 +114,25 @@ public class BasicVehicles : OpenSimTestCase | |||
|         //    Instead the appropriate values are set and calls are made just the parts of the | ||||
|         //    controller we want to exercise. Stepping the physics engine then applies | ||||
|         //    the actions of that one feature. | ||||
|         TestVehicle.VehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency); | ||||
|         TestVehicle.VehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale); | ||||
|         TestVehicle.VehicleActor.enableAngularVerticalAttraction = true; | ||||
| 
 | ||||
|         TestVehicle.IsPhysical = true; | ||||
|         PhysicsScene.ProcessTaints(); | ||||
| 
 | ||||
|         // Step the simulator a bunch of times and vertical attraction should orient the vehicle up | ||||
|         for (int ii = 0; ii < simSteps; ii++) | ||||
|         BSDynamics vehicleActor = TestVehicle.GetVehicleActor(); | ||||
|         if (vehicleActor != null) | ||||
|         { | ||||
|             TestVehicle.VehicleActor.ForgetKnownVehicleProperties(); | ||||
|             TestVehicle.VehicleActor.ComputeAngularVerticalAttraction(); | ||||
|             TestVehicle.VehicleActor.PushKnownChanged(); | ||||
|             vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency); | ||||
|             vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale); | ||||
|             vehicleActor.enableAngularVerticalAttraction = true; | ||||
| 
 | ||||
|             PhysicsScene.Simulate(simulationTimeStep); | ||||
|             TestVehicle.IsPhysical = true; | ||||
|             PhysicsScene.ProcessTaints(); | ||||
| 
 | ||||
|             // Step the simulator a bunch of times and vertical attraction should orient the vehicle up | ||||
|             for (int ii = 0; ii < simSteps; ii++) | ||||
|             { | ||||
|                 vehicleActor.ForgetKnownVehicleProperties(); | ||||
|                 vehicleActor.ComputeAngularVerticalAttraction(); | ||||
|                 vehicleActor.PushKnownChanged(); | ||||
| 
 | ||||
|                 PhysicsScene.Simulate(simulationTimeStep); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         TestVehicle.IsPhysical = false; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Robert Adams
						Robert Adams