diff options
Diffstat (limited to '')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs index 085d195..8f12189 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs | |||
@@ -90,10 +90,9 @@ public sealed class BSLinksetCompound : BSLinkset | |||
90 | // its internal properties. | 90 | // its internal properties. |
91 | public override void Refresh(BSPrimLinkable requestor) | 91 | public override void Refresh(BSPrimLinkable requestor) |
92 | { | 92 | { |
93 | base.Refresh(requestor); | ||
94 | |||
95 | // Something changed so do the rebuilding thing | 93 | // Something changed so do the rebuilding thing |
96 | // ScheduleRebuild(); | 94 | ScheduleRebuild(requestor); |
95 | base.Refresh(requestor); | ||
97 | } | 96 | } |
98 | 97 | ||
99 | // Schedule a refresh to happen after all the other taint processing. | 98 | // Schedule a refresh to happen after all the other taint processing. |
@@ -127,7 +126,7 @@ public sealed class BSLinksetCompound : BSLinkset | |||
127 | if (IsRoot(child)) | 126 | if (IsRoot(child)) |
128 | { | 127 | { |
129 | // The root is going dynamic. Rebuild the linkset so parts and mass get computed properly. | 128 | // The root is going dynamic. Rebuild the linkset so parts and mass get computed properly. |
130 | ScheduleRebuild(LinksetRoot); | 129 | Refresh(LinksetRoot); |
131 | } | 130 | } |
132 | return ret; | 131 | return ret; |
133 | } | 132 | } |
@@ -144,7 +143,7 @@ public sealed class BSLinksetCompound : BSLinkset | |||
144 | if (IsRoot(child)) | 143 | if (IsRoot(child)) |
145 | { | 144 | { |
146 | // Schedule a rebuild to verify that the root shape is set to the real shape. | 145 | // Schedule a rebuild to verify that the root shape is set to the real shape. |
147 | ScheduleRebuild(LinksetRoot); | 146 | Refresh(LinksetRoot); |
148 | } | 147 | } |
149 | return ret; | 148 | return ret; |
150 | } | 149 | } |
@@ -227,7 +226,7 @@ public sealed class BSLinksetCompound : BSLinkset | |||
227 | // there will already be a rebuild scheduled. | 226 | // there will already be a rebuild scheduled. |
228 | DetailLog("{0},BSLinksetCompound.UpdateProperties,couldNotUpdateChild.schedulingRebuild,whichUpdated={1}", | 227 | DetailLog("{0},BSLinksetCompound.UpdateProperties,couldNotUpdateChild.schedulingRebuild,whichUpdated={1}", |
229 | updated.LocalID, whichUpdated); | 228 | updated.LocalID, whichUpdated); |
230 | ScheduleRebuild(updated); | 229 | Refresh(updated); |
231 | } | 230 | } |
232 | } | 231 | } |
233 | } | 232 | } |
@@ -242,10 +241,10 @@ public sealed class BSLinksetCompound : BSLinkset | |||
242 | { | 241 | { |
243 | bool ret = false; | 242 | bool ret = false; |
244 | 243 | ||
245 | DetailLog("{0},BSLinksetCompound.RemoveBodyDependencies,refreshIfChild,rID={1},rBody={2},isRoot={3}", | 244 | DetailLog("{0},BSLinksetCompound.RemoveDependencies,refreshIfChild,rID={1},rBody={2},isRoot={3}", |
246 | child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody, IsRoot(child)); | 245 | child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody, IsRoot(child)); |
247 | 246 | ||
248 | ScheduleRebuild(child); | 247 | Refresh(child); |
249 | 248 | ||
250 | return ret; | 249 | return ret; |
251 | } | 250 | } |
@@ -263,14 +262,14 @@ public sealed class BSLinksetCompound : BSLinkset | |||
263 | DetailLog("{0},BSLinksetCompound.AddChildToLinkset,call,child={1}", LinksetRoot.LocalID, child.LocalID); | 262 | DetailLog("{0},BSLinksetCompound.AddChildToLinkset,call,child={1}", LinksetRoot.LocalID, child.LocalID); |
264 | 263 | ||
265 | // Rebuild the compound shape with the new child shape included | 264 | // Rebuild the compound shape with the new child shape included |
266 | ScheduleRebuild(child); | 265 | Refresh(child); |
267 | } | 266 | } |
268 | return; | 267 | return; |
269 | } | 268 | } |
270 | 269 | ||
271 | // Remove the specified child from the linkset. | 270 | // Remove the specified child from the linkset. |
272 | // Safe to call even if the child is not really in the linkset. | 271 | // Safe to call even if the child is not really in the linkset. |
273 | protected override void RemoveChildFromLinkset(BSPrimLinkable child) | 272 | protected override void RemoveChildFromLinkset(BSPrimLinkable child, bool inTaintTime) |
274 | { | 273 | { |
275 | child.ClearDisplacement(); | 274 | child.ClearDisplacement(); |
276 | 275 | ||
@@ -282,17 +281,17 @@ public sealed class BSLinksetCompound : BSLinkset | |||
282 | child.LocalID, child.PhysBody.AddrString); | 281 | child.LocalID, child.PhysBody.AddrString); |
283 | 282 | ||
284 | // Cause the child's body to be rebuilt and thus restored to normal operation | 283 | // Cause the child's body to be rebuilt and thus restored to normal operation |
285 | child.ForceBodyShapeRebuild(false); | 284 | child.ForceBodyShapeRebuild(inTaintTime); |
286 | 285 | ||
287 | if (!HasAnyChildren) | 286 | if (!HasAnyChildren) |
288 | { | 287 | { |
289 | // The linkset is now empty. The root needs rebuilding. | 288 | // The linkset is now empty. The root needs rebuilding. |
290 | LinksetRoot.ForceBodyShapeRebuild(false); | 289 | LinksetRoot.ForceBodyShapeRebuild(inTaintTime); |
291 | } | 290 | } |
292 | else | 291 | else |
293 | { | 292 | { |
294 | // Rebuild the compound shape with the child removed | 293 | // Rebuild the compound shape with the child removed |
295 | ScheduleRebuild(LinksetRoot); | 294 | Refresh(LinksetRoot); |
296 | } | 295 | } |
297 | } | 296 | } |
298 | return; | 297 | return; |
@@ -318,10 +317,10 @@ public sealed class BSLinksetCompound : BSLinkset | |||
318 | // being destructed and going non-physical. | 317 | // being destructed and going non-physical. |
319 | LinksetRoot.ForceBodyShapeRebuild(true); | 318 | LinksetRoot.ForceBodyShapeRebuild(true); |
320 | 319 | ||
321 | // There is no reason to build all this physical stuff for a non-physical linkset. | 320 | // There is no reason to build all this physical stuff for a non-physical or empty linkset. |
322 | if (!LinksetRoot.IsPhysicallyActive) | 321 | if (!LinksetRoot.IsPhysicallyActive || !HasAnyChildren) |
323 | { | 322 | { |
324 | DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,notPhysical", LinksetRoot.LocalID); | 323 | DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,notPhysicalOrNoChildren", LinksetRoot.LocalID); |
325 | return; // Note the 'finally' clause at the botton which will get executed. | 324 | return; // Note the 'finally' clause at the botton which will get executed. |
326 | } | 325 | } |
327 | 326 | ||