aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorRobert Adams2013-07-16 10:02:14 -0700
committerRobert Adams2013-07-22 10:27:24 -0700
commitb44f0e1a00eba7f76401692322e48a3b23a81164 (patch)
tree96e44a80c97f35571116f120adf0e4d9c679b42e
parentBulletSim: change BSDynamics to expect to be passed a BSPrimLinkable (diff)
downloadopensim-SC_OLD-b44f0e1a00eba7f76401692322e48a3b23a81164.zip
opensim-SC_OLD-b44f0e1a00eba7f76401692322e48a3b23a81164.tar.gz
opensim-SC_OLD-b44f0e1a00eba7f76401692322e48a3b23a81164.tar.bz2
opensim-SC_OLD-b44f0e1a00eba7f76401692322e48a3b23a81164.tar.xz
BulletSim: Add logic to linksets to change physical properties for
whole linkset. Override physical property setting for BSLinksetCompound as there are not children to the compound spape.
Diffstat (limited to '')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActors.cs6
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs24
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs36
3 files changed, 59 insertions, 7 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs
index fff63e4..e0ccc50 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs
@@ -69,7 +69,7 @@ public class BSActorCollection
69 { 69 {
70 lock (m_actors) 70 lock (m_actors)
71 { 71 {
72 Release(); 72 ForEachActor(a => a.Dispose());
73 m_actors.Clear(); 73 m_actors.Clear();
74 } 74 }
75 } 75 }
@@ -98,10 +98,6 @@ public class BSActorCollection
98 { 98 {
99 ForEachActor(a => a.SetEnabled(enabl)); 99 ForEachActor(a => a.SetEnabled(enabl));
100 } 100 }
101 public void Release()
102 {
103 ForEachActor(a => a.Dispose());
104 }
105 public void Refresh() 101 public void Refresh()
106 { 102 {
107 ForEachActor(a => a.Refresh()); 103 ForEachActor(a => a.Refresh());
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs
index 78c0af7..960c0b4 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs
@@ -309,14 +309,14 @@ public abstract class BSLinkset
309 } 309 }
310 ); 310 );
311 } 311 }
312 public virtual void ComputeLocalInertia() 312 public virtual void ComputeLocalInertia(OMV.Vector3 inertiaFactor)
313 { 313 {
314 ForEachMember((member) => 314 ForEachMember((member) =>
315 { 315 {
316 if (member.PhysBody.HasPhysicalBody) 316 if (member.PhysBody.HasPhysicalBody)
317 { 317 {
318 OMV.Vector3 inertia = m_physicsScene.PE.CalculateLocalInertia(member.PhysShape.physShapeInfo, member.Mass); 318 OMV.Vector3 inertia = m_physicsScene.PE.CalculateLocalInertia(member.PhysShape.physShapeInfo, member.Mass);
319 member.Inertia = inertia * BSParam.VehicleInertiaFactor; 319 member.Inertia = inertia * inertiaFactor;
320 m_physicsScene.PE.SetMassProps(member.PhysBody, member.Mass, member.Inertia); 320 m_physicsScene.PE.SetMassProps(member.PhysBody, member.Mass, member.Inertia);
321 m_physicsScene.PE.UpdateInertiaTensor(member.PhysBody); 321 m_physicsScene.PE.UpdateInertiaTensor(member.PhysBody);
322 } 322 }
@@ -324,6 +324,26 @@ public abstract class BSLinkset
324 } 324 }
325 ); 325 );
326 } 326 }
327 public virtual void SetPhysicalCollisionFlags(CollisionFlags collFlags)
328 {
329 ForEachMember((member) =>
330 {
331 if (member.PhysBody.HasPhysicalBody)
332 m_physicsScene.PE.SetCollisionFlags(member.PhysBody, collFlags);
333 return false; // 'false' says to continue looping
334 }
335 );
336 }
337 public virtual void RemoveFromPhysicalCollisionFlags(CollisionFlags collFlags)
338 {
339 ForEachMember((member) =>
340 {
341 if (member.PhysBody.HasPhysicalBody)
342 m_physicsScene.PE.RemoveFromCollisionFlags(member.PhysBody, collFlags);
343 return false; // 'false' says to continue looping
344 }
345 );
346 }
327 // ================================================================ 347 // ================================================================
328 protected virtual float ComputeLinksetMass() 348 protected virtual float ComputeLinksetMass()
329 { 349 {
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
index 3668456..33ae5a5 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
@@ -44,6 +44,42 @@ public sealed class BSLinksetCompound : BSLinkset
44 { 44 {
45 } 45 }
46 46
47 // ================================================================
48 // Changing the physical property of the linkset only needs to change the root
49 public override void SetPhysicalFriction(float friction)
50 {
51 if (LinksetRoot.PhysBody.HasPhysicalBody)
52 m_physicsScene.PE.SetFriction(LinksetRoot.PhysBody, friction);
53 }
54 public override void SetPhysicalRestitution(float restitution)
55 {
56 if (LinksetRoot.PhysBody.HasPhysicalBody)
57 m_physicsScene.PE.SetRestitution(LinksetRoot.PhysBody, restitution);
58 }
59 public override void SetPhysicalGravity(OMV.Vector3 gravity)
60 {
61 if (LinksetRoot.PhysBody.HasPhysicalBody)
62 m_physicsScene.PE.SetGravity(LinksetRoot.PhysBody, gravity);
63 }
64 public override void ComputeLocalInertia(OMV.Vector3 inertiaFactor)
65 {
66 OMV.Vector3 inertia = m_physicsScene.PE.CalculateLocalInertia(LinksetRoot.PhysShape.physShapeInfo, LinksetRoot.Mass);
67 LinksetRoot.Inertia = inertia * inertiaFactor;
68 m_physicsScene.PE.SetMassProps(LinksetRoot.PhysBody, LinksetRoot.Mass, LinksetRoot.Inertia);
69 m_physicsScene.PE.UpdateInertiaTensor(LinksetRoot.PhysBody);
70 }
71 public override void SetPhysicalCollisionFlags(CollisionFlags collFlags)
72 {
73 if (LinksetRoot.PhysBody.HasPhysicalBody)
74 m_physicsScene.PE.SetCollisionFlags(LinksetRoot.PhysBody, collFlags);
75 }
76 public override void RemoveFromPhysicalCollisionFlags(CollisionFlags collFlags)
77 {
78 if (LinksetRoot.PhysBody.HasPhysicalBody)
79 m_physicsScene.PE.RemoveFromCollisionFlags(LinksetRoot.PhysBody, collFlags);
80 }
81 // ================================================================
82
47 // When physical properties are changed the linkset needs to recalculate 83 // When physical properties are changed the linkset needs to recalculate
48 // its internal properties. 84 // its internal properties.
49 public override void Refresh(BSPrimLinkable requestor) 85 public override void Refresh(BSPrimLinkable requestor)