diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs | 69 |
1 files changed, 63 insertions, 6 deletions
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs index 6f27ac7..1d552eb 100644 --- a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs | |||
@@ -33,7 +33,7 @@ using log4net; | |||
33 | using OMV = OpenMetaverse; | 33 | using OMV = OpenMetaverse; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Region.PhysicsModules.SharedBase; | 35 | using OpenSim.Region.PhysicsModules.SharedBase; |
36 | using OpenSim.Region.PhysicsModule.ConvexDecompositionDotNet; | 36 | using OpenSim.Region.PhysicsModules.ConvexDecompositionDotNet; |
37 | 37 | ||
38 | namespace OpenSim.Region.PhysicsModule.BulletS | 38 | namespace OpenSim.Region.PhysicsModule.BulletS |
39 | { | 39 | { |
@@ -280,20 +280,20 @@ public class BSPrim : BSPhysObject | |||
280 | }); | 280 | }); |
281 | } | 281 | } |
282 | 282 | ||
283 | public override void LockAngularMotion(OMV.Vector3 axis) | 283 | public override void LockAngularMotion(byte axislocks) |
284 | { | 284 | { |
285 | DetailLog("{0},BSPrim.LockAngularMotion,call,axis={1}", LocalID, axis); | 285 | DetailLog("{0},BSPrim.LockAngularMotion,call,axis={1}", LocalID, axislocks); |
286 | 286 | ||
287 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR, 0f, 0f); | 287 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR, 0f, 0f); |
288 | if (axis.X != 1) | 288 | if ((axislocks & 0x02) != 0) |
289 | { | 289 | { |
290 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_X, 0f, 0f); | 290 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_X, 0f, 0f); |
291 | } | 291 | } |
292 | if (axis.Y != 1) | 292 | if ((axislocks & 0x04) != 0) |
293 | { | 293 | { |
294 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_Y, 0f, 0f); | 294 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_Y, 0f, 0f); |
295 | } | 295 | } |
296 | if (axis.Z != 1) | 296 | if ((axislocks & 0x08) != 0) |
297 | { | 297 | { |
298 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_Z, 0f, 0f); | 298 | ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_Z, 0f, 0f); |
299 | } | 299 | } |
@@ -647,6 +647,59 @@ public class BSPrim : BSPhysObject | |||
647 | }); | 647 | }); |
648 | } | 648 | } |
649 | 649 | ||
650 | public override void SetVehicle(object pvdata) | ||
651 | { | ||
652 | PhysScene.TaintedObject(LocalID, "BSPrim.SetVehicle", delegate () | ||
653 | { | ||
654 | BSDynamics vehicleActor = GetVehicleActor(true /* createIfNone */); | ||
655 | if (vehicleActor != null && (pvdata is VehicleData) ) | ||
656 | { | ||
657 | VehicleData vdata = (VehicleData)pvdata; | ||
658 | // vehicleActor.ProcessSetVehicle((VehicleData)vdata); | ||
659 | |||
660 | vehicleActor.ProcessTypeChange(vdata.m_type); | ||
661 | vehicleActor.ProcessVehicleFlags(-1, false); | ||
662 | vehicleActor.ProcessVehicleFlags((int)vdata.m_flags, false); | ||
663 | |||
664 | // Linear properties | ||
665 | vehicleActor.ProcessVectorVehicleParam(Vehicle.LINEAR_MOTOR_DIRECTION, vdata.m_linearMotorDirection); | ||
666 | vehicleActor.ProcessVectorVehicleParam(Vehicle.LINEAR_FRICTION_TIMESCALE, vdata.m_linearFrictionTimescale); | ||
667 | vehicleActor.ProcessFloatVehicleParam(Vehicle.LINEAR_MOTOR_DECAY_TIMESCALE, vdata.m_linearMotorDecayTimescale); | ||
668 | vehicleActor.ProcessFloatVehicleParam(Vehicle.LINEAR_MOTOR_TIMESCALE, vdata.m_linearMotorTimescale); | ||
669 | vehicleActor.ProcessVectorVehicleParam(Vehicle.LINEAR_MOTOR_OFFSET, vdata.m_linearMotorOffset); | ||
670 | |||
671 | //Angular properties | ||
672 | vehicleActor.ProcessVectorVehicleParam(Vehicle.ANGULAR_MOTOR_DIRECTION, vdata.m_angularMotorDirection); | ||
673 | vehicleActor.ProcessFloatVehicleParam(Vehicle.ANGULAR_MOTOR_TIMESCALE, vdata.m_angularMotorTimescale); | ||
674 | vehicleActor.ProcessFloatVehicleParam(Vehicle.ANGULAR_MOTOR_DECAY_TIMESCALE, vdata.m_angularMotorDecayTimescale); | ||
675 | vehicleActor.ProcessVectorVehicleParam(Vehicle.ANGULAR_FRICTION_TIMESCALE, vdata.m_angularFrictionTimescale); | ||
676 | |||
677 | //Deflection properties | ||
678 | vehicleActor.ProcessFloatVehicleParam(Vehicle.ANGULAR_DEFLECTION_EFFICIENCY, vdata.m_angularDeflectionEfficiency); | ||
679 | vehicleActor.ProcessFloatVehicleParam(Vehicle.ANGULAR_DEFLECTION_TIMESCALE, vdata.m_angularDeflectionTimescale); | ||
680 | vehicleActor.ProcessFloatVehicleParam(Vehicle.LINEAR_DEFLECTION_EFFICIENCY, vdata.m_linearDeflectionEfficiency); | ||
681 | vehicleActor.ProcessFloatVehicleParam(Vehicle.LINEAR_DEFLECTION_TIMESCALE, vdata.m_linearDeflectionTimescale); | ||
682 | |||
683 | //Banking properties | ||
684 | vehicleActor.ProcessFloatVehicleParam(Vehicle.BANKING_EFFICIENCY, vdata.m_bankingEfficiency); | ||
685 | vehicleActor.ProcessFloatVehicleParam(Vehicle.BANKING_MIX, vdata.m_bankingMix); | ||
686 | vehicleActor.ProcessFloatVehicleParam(Vehicle.BANKING_TIMESCALE, vdata.m_bankingTimescale); | ||
687 | |||
688 | //Hover and Buoyancy properties | ||
689 | vehicleActor.ProcessFloatVehicleParam(Vehicle.HOVER_HEIGHT, vdata.m_VhoverHeight); | ||
690 | vehicleActor.ProcessFloatVehicleParam(Vehicle.HOVER_EFFICIENCY, vdata.m_VhoverEfficiency); | ||
691 | vehicleActor.ProcessFloatVehicleParam(Vehicle.HOVER_TIMESCALE, vdata.m_VhoverTimescale); | ||
692 | vehicleActor.ProcessFloatVehicleParam(Vehicle.BUOYANCY, vdata.m_VehicleBuoyancy); | ||
693 | |||
694 | //Attractor properties | ||
695 | vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, vdata.m_verticalAttractionEfficiency); | ||
696 | vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, vdata.m_verticalAttractionTimescale); | ||
697 | |||
698 | vehicleActor.ProcessRotationVehicleParam(Vehicle.REFERENCE_FRAME, vdata.m_referenceFrame); | ||
699 | } | ||
700 | }); | ||
701 | } | ||
702 | |||
650 | // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more | 703 | // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more |
651 | public override void SetVolumeDetect(int param) { | 704 | public override void SetVolumeDetect(int param) { |
652 | bool newValue = (param != 0); | 705 | bool newValue = (param != 0); |
@@ -1173,6 +1226,10 @@ public class BSPrim : BSPhysObject | |||
1173 | // Used for llSetHoverHeight and maybe vehicle height | 1226 | // Used for llSetHoverHeight and maybe vehicle height |
1174 | // Hover Height will override MoveTo target's Z | 1227 | // Hover Height will override MoveTo target's Z |
1175 | public override bool PIDHoverActive { | 1228 | public override bool PIDHoverActive { |
1229 | get | ||
1230 | { | ||
1231 | return base.HoverActive; | ||
1232 | } | ||
1176 | set { | 1233 | set { |
1177 | base.HoverActive = value; | 1234 | base.HoverActive = value; |
1178 | EnableActor(HoverActive, HoverActorName, delegate() | 1235 | EnableActor(HoverActive, HoverActorName, delegate() |