diff options
Diffstat (limited to '')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs index 0df4310..2017fa5 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs | |||
@@ -32,6 +32,15 @@ using OMV = OpenMetaverse; | |||
32 | 32 | ||
33 | namespace OpenSim.Region.Physics.BulletSPlugin | 33 | namespace OpenSim.Region.Physics.BulletSPlugin |
34 | { | 34 | { |
35 | |||
36 | // A BSPrim can get individual information about its linkedness attached | ||
37 | // to it through an instance of a subclass of LinksetInfo. | ||
38 | // Each type of linkset will define the information needed for its type. | ||
39 | public abstract class BSLinksetInfo | ||
40 | { | ||
41 | public virtual void Clear() { } | ||
42 | } | ||
43 | |||
35 | public abstract class BSLinkset | 44 | public abstract class BSLinkset |
36 | { | 45 | { |
37 | // private static string LogHeader = "[BULLETSIM LINKSET]"; | 46 | // private static string LogHeader = "[BULLETSIM LINKSET]"; |
@@ -87,13 +96,6 @@ public abstract class BSLinkset | |||
87 | return BSPhysicsShapeType.SHAPE_UNKNOWN; | 96 | return BSPhysicsShapeType.SHAPE_UNKNOWN; |
88 | } | 97 | } |
89 | 98 | ||
90 | // Linksets move around the children so the linkset might need to compute the child position | ||
91 | public virtual OMV.Vector3 Position(BSPhysObject member) | ||
92 | { return member.RawPosition; } | ||
93 | public virtual OMV.Quaternion Orientation(BSPhysObject member) | ||
94 | { return member.RawOrientation; } | ||
95 | // TODO: does this need to be done for Velocity and RotationalVelocityy? | ||
96 | |||
97 | // We keep the prim's mass in the linkset structure since it could be dependent on other prims | 99 | // We keep the prim's mass in the linkset structure since it could be dependent on other prims |
98 | protected float m_mass; | 100 | protected float m_mass; |
99 | public float LinksetMass | 101 | public float LinksetMass |
@@ -116,7 +118,7 @@ public abstract class BSLinkset | |||
116 | get { return ComputeLinksetGeometricCenter(); } | 118 | get { return ComputeLinksetGeometricCenter(); } |
117 | } | 119 | } |
118 | 120 | ||
119 | protected void Initialize(BSScene scene, BSPhysObject parent) | 121 | protected BSLinkset(BSScene scene, BSPhysObject parent) |
120 | { | 122 | { |
121 | // A simple linkset of one (no children) | 123 | // A simple linkset of one (no children) |
122 | LinksetID = m_nextLinksetID++; | 124 | LinksetID = m_nextLinksetID++; |
@@ -127,6 +129,7 @@ public abstract class BSLinkset | |||
127 | LinksetRoot = parent; | 129 | LinksetRoot = parent; |
128 | m_children = new HashSet<BSPhysObject>(); | 130 | m_children = new HashSet<BSPhysObject>(); |
129 | m_mass = parent.RawMass; | 131 | m_mass = parent.RawMass; |
132 | Rebuilding = false; | ||
130 | } | 133 | } |
131 | 134 | ||
132 | // Link to a linkset where the child knows the parent. | 135 | // Link to a linkset where the child knows the parent. |
@@ -219,7 +222,7 @@ public abstract class BSLinkset | |||
219 | // I am the root of a linkset and a new child is being added | 222 | // I am the root of a linkset and a new child is being added |
220 | // Called while LinkActivity is locked. | 223 | // Called while LinkActivity is locked. |
221 | protected abstract void AddChildToLinkset(BSPhysObject child); | 224 | protected abstract void AddChildToLinkset(BSPhysObject child); |
222 | 225 | ||
223 | // I am the root of a linkset and one of my children is being removed. | 226 | // I am the root of a linkset and one of my children is being removed. |
224 | // Safe to call even if the child is not really in my linkset. | 227 | // Safe to call even if the child is not really in my linkset. |
225 | protected abstract void RemoveChildFromLinkset(BSPhysObject child); | 228 | protected abstract void RemoveChildFromLinkset(BSPhysObject child); |
@@ -229,6 +232,10 @@ public abstract class BSLinkset | |||
229 | // May be called at runtime or taint-time. | 232 | // May be called at runtime or taint-time. |
230 | public abstract void Refresh(BSPhysObject requestor); | 233 | public abstract void Refresh(BSPhysObject requestor); |
231 | 234 | ||
235 | // Flag denoting the linkset is in the process of being rebuilt. | ||
236 | // Used to know not the schedule a rebuild in the middle of a rebuild. | ||
237 | protected bool Rebuilding { get; set; } | ||
238 | |||
232 | // The object is going dynamic (physical). Do any setup necessary | 239 | // The object is going dynamic (physical). Do any setup necessary |
233 | // for a dynamic linkset. | 240 | // for a dynamic linkset. |
234 | // Only the state of the passed object can be modified. The rest of the linkset | 241 | // Only the state of the passed object can be modified. The rest of the linkset |
@@ -245,8 +252,9 @@ public abstract class BSLinkset | |||
245 | 252 | ||
246 | // Called when a parameter update comes from the physics engine for any object | 253 | // Called when a parameter update comes from the physics engine for any object |
247 | // of the linkset is received. | 254 | // of the linkset is received. |
255 | // Passed flag is update came from physics engine (true) or the user (false). | ||
248 | // Called at taint-time!! | 256 | // Called at taint-time!! |
249 | public abstract void UpdateProperties(BSPhysObject physObject); | 257 | public abstract void UpdateProperties(BSPhysObject physObject, bool physicalUpdate); |
250 | 258 | ||
251 | // Routine used when rebuilding the body of the root of the linkset | 259 | // Routine used when rebuilding the body of the root of the linkset |
252 | // Destroy all the constraints have have been made to root. | 260 | // Destroy all the constraints have have been made to root. |