Difference between revisions of "LlMoveToTarget"

From Second Life Wiki
Jump to navigation Jump to search
(those are all really caveats aren't they?)
m (<lsl> tag to <source>)
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Issues/SVC-2441}}{{LSL Function/physical|avatar=*}}{{LSL Function/damping|tau}}{{LSL_Function
{{LSL_Function
|inject-2=
{{Issues/SVC-2441}}
{{LSL Function/physical|avatar=*}}
{{LSL Function/damping|tau}}
{{LSL Function/position|target|region=*}}
|func_id=70|func_sleep=0.0|func_energy=10.0
|func_id=70|func_sleep=0.0|func_energy=10.0
|func=llMoveToTarget
|func=llMoveToTarget
|p1_type=vector|p1_name=target|p1_desc=[[Viewer coordinate frames#Region|region]] position
|p1_type=vector|p1_name=target
|p2_type=float|p2_name=tau
|p2_type=float|p2_name=tau
|func_footnote=To stop the object from maintaining the '''target''' positions use [[llStopMoveToTarget]]<br/>
|func_footnote=To stop the object from maintaining the {{LSLP|target}} positions use [[llStopMoveToTarget]]<br/>
To change the rotation in the same manner use [[llLookAt]] or [[llRotLookAt]].
To change the rotation in the same manner use [[llLookAt]] or [[llRotLookAt]].
|func_desc=Critically damp to '''target''' in '''tau''' seconds (if the script is physical)
|func_desc=Critically damp to {{LSLP|target}} in {{LSLP|tau}} seconds (if the script is physical)
|return_text
|return_text
|spec
|spec
|caveats=* When slowly moving to a lower Z value, beware of {{jira|SVC-2441}} - the sim will incorrectly move the object down faster than it should. That is, if you try moving to llGetPos() + <10, 10, -10>, you can end up at .z-10 several meters before getting to .x-10 and .y-10. There is a demo object in the JIRA which shows this effect.
|caveats=* When slowly moving to a lower Z value, beware of {{jira|SVC-2441}} - the sim will incorrectly move the object down faster than it should. That is, if you try moving to llGetPos() + <10, 10, -10>, you can end up at .z-10 several meters before getting to .x-10 and .y-10. There is a demo object in the JIRA which shows this effect.
* A llMoveToTarget call seems to persist even if physics is turned off. This is a useful trick on sluggish sims where the object can drop a bit between the call to enable physics and the call to llMoveToTarget - just do the llMoveToTarget before setting the object to physical.
* A llMoveToTarget call seems to persist even if physics is turned off. This is a useful trick on sluggish sims where the object can drop a bit between the call to enable physics and the call to llMoveToTarget - just do the llMoveToTarget before setting the object to physical.
* [[llVecDist]]([[llGetPos]](), '''target''') must be ''less than'' 65, or no movement will occur.
* <code>[[llVecDist]]([[llGetPos]](), {{LSLPT|target}})</code> must be ''less than'' 65, or no movement will occur.
* Calling llMoveToTarget with a Tau of 0.0 will silently fail, and do nothing.
* Calling llMoveToTarget with a {{LSLP|tau}} of {{HoverText|0.0|zero}} or less will silently fail, and do nothing. The smallest functional {{LSLP|tau}} is 0.044444444 (two physics frames, 2/45).
|constants
|constants
|examples=Drop this script in a prim to have it follow the prim owner.
|examples=Drop this script in a prim to have it follow the prim owner.
<lsl>
<source lang="lsl2">
default
default
{
{
Line 32: Line 37:
         // Get position of detected owner
         // Get position of detected owner
         vector pos = llDetectedPos(0);
         vector pos = llDetectedPos(0);
         // Offset back one metre in X and up one metre in Z based on world coordinates.
         // Offset back one meter in X and up one meter in Z based on world coordinates.
        // Offset relative to owner is possible but beyond the scope of this example.
         vector offset =<-1,0,1>;
         vector offset =<-1,0,1>;
//        offset = offset*llDetectedRot(0);  //Adding this line will orient the follower relative to the owner's position.
         pos+=offset;
         pos+=offset;
         llMoveToTarget(pos,0.4);     
         llMoveToTarget(pos,0.4);     
     }
     }
}
}
</lsl>
</source>
|helpers
|helpers
|also_functions={{LSL DefineRow||[[llStopMoveToTarget]]}}
|also_functions={{LSL DefineRow||[[llStopMoveToTarget]]}}

Latest revision as of 14:00, 22 January 2015

Summary

Function: llMoveToTarget( vector target, float tau );

Critically damp to target in tau seconds (if the script is physical)

• vector target position in region coordinates
• float tau seconds to critically damp in

To stop the object from maintaining the target positions use llStopMoveToTarget
To change the rotation in the same manner use llLookAt or llRotLookAt.

Caveats

  • Only works in attachments and physics-enabled objects.
  • When slowly moving to a lower Z value, beware of SVC-2441 - the sim will incorrectly move the object down faster than it should. That is, if you try moving to llGetPos() + <10, 10, -10>, you can end up at .z-10 several meters before getting to .x-10 and .y-10. There is a demo object in the JIRA which shows this effect.
  • A llMoveToTarget call seems to persist even if physics is turned off. This is a useful trick on sluggish sims where the object can drop a bit between the call to enable physics and the call to llMoveToTarget - just do the llMoveToTarget before setting the object to physical.
  • llVecDist(llGetPos(), target) must be less than 65, or no movement will occur.
  • Calling llMoveToTarget with a tau of 0.0 or less will silently fail, and do nothing. The smallest functional tau is 0.044444444 (two physics frames, 2/45).

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   Slowish llMoveToTarget path inconsistent when moving to a target at a -z position vs moving to +z

Examples

Drop this script in a prim to have it follow the prim owner.

default
{
    state_entry()
    {
        vector pos = llGetPos();
        llSetStatus(STATUS_PHYSICS, TRUE);
        // Little pause to allow server to make potentially large linked object physical.
        llSleep(0.1);
        llMoveToTarget(pos,0.4);
        // Look for owner within 20 meters in 360 degree arc every 1 seconds.
        llSensorRepeat("", llGetOwner(), AGENT, 20.0, PI,1.0);
    }
    sensor(integer total_number)
    {
        // Get position of detected owner
        vector pos = llDetectedPos(0);
        // Offset back one meter in X and up one meter in Z based on world coordinates.
        vector offset =<-1,0,1>;
//        offset = offset*llDetectedRot(0);  //Adding this line will orient the follower relative to the owner's position.
        pos+=offset;
        llMoveToTarget(pos,0.4);     
    }
}

See Also

Functions

•  llStopMoveToTarget
•  llLookAt
•  llRotLookAt
•  llTarget

Deep Notes

All Issues

~ Search JIRA for related Issues
   Slowish llMoveToTarget path inconsistent when moving to a target at a -z position vs moving to +z

Signature

function void llMoveToTarget( vector target, float tau );