aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules')
-rwxr-xr-xOpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs73
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]