diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs index 3afd52e..77f69a5 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinkset.cs | |||
@@ -77,6 +77,10 @@ public abstract class BSLinkset | |||
77 | { | 77 | { |
78 | member = pMember; | 78 | member = pMember; |
79 | } | 79 | } |
80 | public virtual void ResetLink() { } | ||
81 | public virtual void SetLinkParameters(BSConstraint constrain) { } | ||
82 | // Returns 'true' if physical property updates from the child should be reported to the simulator | ||
83 | public virtual bool ShouldUpdateChildProperties() { return false; } | ||
80 | } | 84 | } |
81 | 85 | ||
82 | public LinksetImplementation LinksetImpl { get; protected set; } | 86 | public LinksetImplementation LinksetImpl { get; protected set; } |
@@ -148,7 +152,7 @@ public abstract class BSLinkset | |||
148 | // Returns a new linkset for the child which is a linkset of one (just the | 152 | // Returns a new linkset for the child which is a linkset of one (just the |
149 | // orphened child). | 153 | // orphened child). |
150 | // Called at runtime. | 154 | // Called at runtime. |
151 | public BSLinkset RemoveMeFromLinkset(BSPrimLinkable child) | 155 | public BSLinkset RemoveMeFromLinkset(BSPrimLinkable child, bool inTaintTime) |
152 | { | 156 | { |
153 | lock (m_linksetActivityLock) | 157 | lock (m_linksetActivityLock) |
154 | { | 158 | { |
@@ -157,7 +161,7 @@ public abstract class BSLinkset | |||
157 | // Cannot remove the root from a linkset. | 161 | // Cannot remove the root from a linkset. |
158 | return this; | 162 | return this; |
159 | } | 163 | } |
160 | RemoveChildFromLinkset(child); | 164 | RemoveChildFromLinkset(child, inTaintTime); |
161 | LinksetMass = ComputeLinksetMass(); | 165 | LinksetMass = ComputeLinksetMass(); |
162 | } | 166 | } |
163 | 167 | ||
@@ -205,6 +209,17 @@ public abstract class BSLinkset | |||
205 | return ret; | 209 | return ret; |
206 | } | 210 | } |
207 | 211 | ||
212 | public bool TryGetLinkInfo(BSPrimLinkable child, out BSLinkInfo foundInfo) | ||
213 | { | ||
214 | bool ret = false; | ||
215 | BSLinkInfo found = null; | ||
216 | lock (m_linksetActivityLock) | ||
217 | { | ||
218 | ret = m_children.TryGetValue(child, out found); | ||
219 | } | ||
220 | foundInfo = found; | ||
221 | return ret; | ||
222 | } | ||
208 | // Perform an action on each member of the linkset including root prim. | 223 | // Perform an action on each member of the linkset including root prim. |
209 | // Depends on the action on whether this should be done at taint time. | 224 | // Depends on the action on whether this should be done at taint time. |
210 | public delegate bool ForEachLinkInfoAction(BSLinkInfo obj); | 225 | public delegate bool ForEachLinkInfoAction(BSLinkInfo obj); |
@@ -222,6 +237,21 @@ public abstract class BSLinkset | |||
222 | return ret; | 237 | return ret; |
223 | } | 238 | } |
224 | 239 | ||
240 | // Check the type of the link and return 'true' if the link is flexible and the | ||
241 | // updates from the child should be sent to the simulator so things change. | ||
242 | public virtual bool ShouldReportPropertyUpdates(BSPrimLinkable child) | ||
243 | { | ||
244 | bool ret = false; | ||
245 | |||
246 | BSLinkInfo linkInfo; | ||
247 | if (m_children.TryGetValue(child, out linkInfo)) | ||
248 | { | ||
249 | ret = linkInfo.ShouldUpdateChildProperties(); | ||
250 | } | ||
251 | |||
252 | return ret; | ||
253 | } | ||
254 | |||
225 | // Called after a simulation step to post a collision with this object. | 255 | // Called after a simulation step to post a collision with this object. |
226 | // Return 'true' if linkset processed the collision. 'false' says the linkset didn't have | 256 | // Return 'true' if linkset processed the collision. 'false' says the linkset didn't have |
227 | // anything to add for the collision and it should be passed through normal processing. | 257 | // anything to add for the collision and it should be passed through normal processing. |
@@ -255,7 +285,7 @@ public abstract class BSLinkset | |||
255 | 285 | ||
256 | // I am the root of a linkset and one of my children is being removed. | 286 | // I am the root of a linkset and one of my children is being removed. |
257 | // Safe to call even if the child is not really in my linkset. | 287 | // Safe to call even if the child is not really in my linkset. |
258 | protected abstract void RemoveChildFromLinkset(BSPrimLinkable child); | 288 | protected abstract void RemoveChildFromLinkset(BSPrimLinkable child, bool inTaintTime); |
259 | 289 | ||
260 | // When physical properties are changed the linkset needs to recalculate | 290 | // When physical properties are changed the linkset needs to recalculate |
261 | // its internal properties. | 291 | // its internal properties. |
@@ -430,6 +460,13 @@ public abstract class BSLinkset | |||
430 | return com; | 460 | return com; |
431 | } | 461 | } |
432 | 462 | ||
463 | #region Extension | ||
464 | public virtual object Extension(string pFunct, params object[] pParams) | ||
465 | { | ||
466 | return null; | ||
467 | } | ||
468 | #endregion // Extension | ||
469 | |||
433 | // Invoke the detailed logger and output something if it's enabled. | 470 | // Invoke the detailed logger and output something if it's enabled. |
434 | protected void DetailLog(string msg, params Object[] args) | 471 | protected void DetailLog(string msg, params Object[] args) |
435 | { | 472 | { |