GetRootLocalPos
Revision as of 20:18, 29 October 2010 by Strife Onizuka (talk | contribs)
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_ROTATION). I came to the conclusion with all the new(ish) functions, it is now possible to actually work this out.
- You know the position and rotation of the avatar, thanks to llGetObjectDetails.
- You know the attach point (llGetAttached)
- 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() {
if(llGetLinkNumber() <= LINK_ROOT) return llGetLocalPos(); integer point = llGetAttached(); if(point)// (((child-global - avatar-position) / rot-avatar) / rot-root) (/ attach-offset?) - child-local == root-local return (((llGetPos() - llGetRootPosition()) / llGetRootRotation()) / GetRootLocalRot()) - llGetLocalPos(); return llGetRootPosition();
}
vector GetRootLocalRot() {
return llList2Rot(llGetLinkPrimitiveParams(!!llGetLinkNumber(), [PRIM_ROT_LOCAL]), 0);