GetRootLocalPos

From Second Life Wiki
Revision as of 01:35, 6 May 2010 by Strife Onizuka (talk | contribs) (Created page with 'While writing another function, I got thinking about the whole attachment local root rotation problem (you need to know the local rotation of the root prim in an attachment so yo...')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

While writing another function, I got thinking about the whole attachment local root rotation problem (you need to know the local rotation of the root prim in an attachment so you can use PRIM_ROT). I came to the conclusion with all the new(ish) functions, it is now possible to actually work this out.

  1. You know the position and rotation of the avatar, thanks to llGetObjectDetails.
  2. You know the attach point (llGetAttached)
  3. You know the combined rotation and position (llGetRootRotation & llGetRootPosition)

It should just be a matter of subtracting the one from the other and canceling out the attach point offsets.

Something like this should work... <lsl>list offsets = [ 0, <0.5, 0.5, 0.5, 0.5>, <0.0, 0.0, 0.70710678118654752440084436210485, 0.70710678118654752440084436210485>, 0, 0, 0, 0, 0, 0, <-0.5, -0.5, 0.5, 0.5> ];

vector GetRootLocalPos() {

   integer point = llGetAttached();
   if(point)
   {
       list avatar = llGetObjectDetails( llGetOwner(), [OBJECT_POS, OBJECT_ROT]);
       return ((llList2Vector(avatar, 0) - llGetRootPosition()) / llList2Rot(avatar, 1)) / llList2Rot(offsets, point);
   }
   return llGetRootPosition();

}

vector GetRootLocalRot() {

   integer point = llGetAttached();
   rotation root = llGetRootRotation();
   if(point)
       return ((root / llList2Rot(llGetObjectDetails( llGetOwner(), [OBJECT_ROT]), 0)) / llList2Rot(offsets, point);
   return root;

}</lsl> -- Strife (talk|contribs) 08:35, 6 May 2010 (UTC)