diff options
author | Robert Adams | 2013-08-08 08:36:36 -0700 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-09-20 21:02:20 +0100 |
commit | 826f8ce79127040b787c9a87696c92a9cb558cdb (patch) | |
tree | d5fddf8d1c0da1d7d237a49247797c528c1e6cff /OpenSim/Region/OptionalModules | |
parent | BulletSim: Linkset.Refresh() calls internal ScheduleRebuild() to recreate the... (diff) | |
download | opensim-SC_OLD-826f8ce79127040b787c9a87696c92a9cb558cdb.zip opensim-SC_OLD-826f8ce79127040b787c9a87696c92a9cb558cdb.tar.gz opensim-SC_OLD-826f8ce79127040b787c9a87696c92a9cb558cdb.tar.bz2 opensim-SC_OLD-826f8ce79127040b787c9a87696c92a9cb558cdb.tar.xz |
BulletSim: add physChangeLinkSpring to change linkset link to be a spring constraint. Add implementation to create spring constraint. Send up property updates for linkset children at the end of flexible linkset links. The simulator probably doesn't do the right thing yet.
Diffstat (limited to 'OpenSim/Region/OptionalModules')
-rwxr-xr-x | OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs | 73 |
1 files changed, 70 insertions, 3 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs index decb61a..278e9e7 100755 --- a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs +++ b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs | |||
@@ -291,6 +291,10 @@ public class ExtendedPhysics : INonSharedRegionModule | |||
291 | return ret; | 291 | return ret; |
292 | } | 292 | } |
293 | 293 | ||
294 | // physChangeLinkFixed(integer linkNum) | ||
295 | // Change the link between the root and the linkNum into a fixed, static physical connection. | ||
296 | // This needs to change 'linkNum' into the physical object because lower level code has | ||
297 | // no access to the link numbers. | ||
294 | [ScriptInvocation] | 298 | [ScriptInvocation] |
295 | public int physChangeLinkFixed(UUID hostID, UUID scriptID, int linkNum) | 299 | public int physChangeLinkFixed(UUID hostID, UUID scriptID, int linkNum) |
296 | { | 300 | { |
@@ -353,13 +357,76 @@ public class ExtendedPhysics : INonSharedRegionModule | |||
353 | [ScriptInvocation] | 357 | [ScriptInvocation] |
354 | public int physChangeLinkHinge(UUID hostID, UUID scriptID, int linkNum) | 358 | public int physChangeLinkHinge(UUID hostID, UUID scriptID, int linkNum) |
355 | { | 359 | { |
356 | return 0; | 360 | return -1; |
357 | } | 361 | } |
358 | 362 | ||
359 | [ScriptInvocation] | 363 | [ScriptInvocation] |
360 | public int physChangeLinkSpring(UUID hostID, UUID scriptID, int linkNum) | 364 | public int physChangeLinkSpring(UUID hostID, UUID scriptID, int linkNum, |
365 | Vector3 frameInAloc, Quaternion frameInArot, | ||
366 | Vector3 frameInBloc, Quaternion frameInBrot, | ||
367 | Vector3 linearLimitLow, Vector3 linearLimitHigh, | ||
368 | Vector3 angularLimitLow, Vector3 angularLimitHigh | ||
369 | ) | ||
361 | { | 370 | { |
362 | return 0; | 371 | int ret = -1; |
372 | if (!Enabled) return ret; | ||
373 | |||
374 | // The part that is requesting the change. | ||
375 | SceneObjectPart requestingPart = BaseScene.GetSceneObjectPart(hostID); | ||
376 | |||
377 | if (requestingPart != null) | ||
378 | { | ||
379 | // The type is is always on the root of a linkset. | ||
380 | SceneObjectGroup containingGroup = requestingPart.ParentGroup; | ||
381 | SceneObjectPart rootPart = containingGroup.RootPart; | ||
382 | |||
383 | if (rootPart != null) | ||
384 | { | ||
385 | Physics.Manager.PhysicsActor rootPhysActor = rootPart.PhysActor; | ||
386 | if (rootPhysActor != null) | ||
387 | { | ||
388 | SceneObjectPart linkPart = containingGroup.GetLinkNumPart(linkNum); | ||
389 | if (linkPart != null) | ||
390 | { | ||
391 | Physics.Manager.PhysicsActor linkPhysActor = linkPart.PhysActor; | ||
392 | if (linkPhysActor != null) | ||
393 | { | ||
394 | ret = (int)rootPhysActor.Extension(PhysFunctChangeLinkSpring, linkNum, linkPhysActor, | ||
395 | frameInAloc, frameInArot, | ||
396 | frameInBloc, frameInBrot, | ||
397 | linearLimitLow, linearLimitHigh, | ||
398 | angularLimitLow, angularLimitHigh | ||
399 | ); | ||
400 | } | ||
401 | else | ||
402 | { | ||
403 | m_log.WarnFormat("{0} physChangeLinkFixed: Link part has no physical actor. rootName={1}, hostID={2}, linknum={3}", | ||
404 | LogHeader, rootPart.Name, hostID, linkNum); | ||
405 | } | ||
406 | } | ||
407 | else | ||
408 | { | ||
409 | m_log.WarnFormat("{0} physChangeLinkFixed: Could not find linknum part. rootName={1}, hostID={2}, linknum={3}", | ||
410 | LogHeader, rootPart.Name, hostID, linkNum); | ||
411 | } | ||
412 | } | ||
413 | else | ||
414 | { | ||
415 | m_log.WarnFormat("{0} physChangeLinkFixed: Root part does not have a physics actor. rootName={1}, hostID={2}", | ||
416 | LogHeader, rootPart.Name, hostID); | ||
417 | } | ||
418 | } | ||
419 | else | ||
420 | { | ||
421 | m_log.WarnFormat("{0} physChangeLinkFixed: Root part does not exist. RequestingPartName={1}, hostID={2}", | ||
422 | LogHeader, requestingPart.Name, hostID); | ||
423 | } | ||
424 | } | ||
425 | else | ||
426 | { | ||
427 | m_log.WarnFormat("{0} physGetLinsetType: cannot find script object in scene. hostID={1}", LogHeader, hostID); | ||
428 | } | ||
429 | return ret; | ||
363 | } | 430 | } |
364 | 431 | ||
365 | [ScriptInvocation] | 432 | [ScriptInvocation] |