Difference between revisions of "LlTarget"

From Second Life Wiki
Jump to: navigation, search
(caveats caveats are tasty treats)
Line 11: Line 11:
 
|caveats=* The position always references the current region. If you set llTarget to <100, 100, 100> while in Region A and then move the object to region B, the target automatically becomes <100, 100, 100> in Region B.
 
|caveats=* The position always references the current region. If you set llTarget to <100, 100, 100> while in Region A and then move the object to region B, the target automatically becomes <100, 100, 100> in Region B.
 
* The position can be set outside the region boundaries, but at_target can only happen if the range extends into the current region.  The part of the range outside the current region will not activate at_target.
 
* The position can be set outside the region boundaries, but at_target can only happen if the range extends into the current region.  The part of the range outside the current region will not activate at_target.
 +
* Only 8 targets can be active to a script. Additional llTarget will remove the oldest target set.
 
|constants
 
|constants
 
|examples=
 
|examples=

Revision as of 12:34, 29 April 2009

Summary

Function: integer llTarget( vector position, float range );

This function is to have the script know when it has reached a position.
It registers a position with a range that triggers at_target and not_at_target events continuously until unregistered.
Returns an integer that is the handle to unregister the target with llTargetRemove.

• vector position
• float range

A similar function exists for rotations: llRotTarget
This function does not move the object, to do that use llSetPos or llMoveToTarget.

Caveats

  • The position always references the current region. If you set llTarget to <100, 100, 100> while in Region A and then move the object to region B, the target automatically becomes <100, 100, 100> in Region B.
  • The position can be set outside the region boundaries, but at_target can only happen if the range extends into the current region. The part of the range outside the current region will not activate at_target.
  • Only 8 targets can be active to a script. Additional llTarget will remove the oldest target set.
All Issues ~ Search JIRA for related Bugs

Examples

<lsl> integer target_id; vector target_pos;

default {

   state_entry()
   {
       target_pos = llGetPos() + <1.0, 0.0, 0.0>;
       target_id = llTarget(target_pos, 0.5);
   }
   at_target(integer tnum, vector targetpos, vector ourpos)
   {
       if (tnum == target_id)
       {
           llOwnerSay("object is within range of target");
           llOwnerSay("target position: " + (string)targetpos + ", object is now at: " + (string)ourpos);
           llOwnerSay("this is " + (string)llVecDist(targetpos, ourpos) + " meters from the target");
           llTargetRemove(target_id);
       }
   }
   not_at_target()
   {
       llOwnerSay(
           "not there yet - object is at " + (string)llGetPos() + 
           ", which is " + (string)llVecDist(target_pos, llGetPos()) + 
           " meters from the target (" + (string)target_pos + ")"
       );
   }

}

</lsl>

See Also

Events

• at_target not_at_target positional target events
• at_rot_target not_at_rot_target rotational target events

Functions

•  llTargetRemove Stop a target position
•  llRotTarget Setup a target rotation
•  llRotTargetRemove Stop a target rotation

Deep Notes

Search JIRA for related Issues

Signature

function integer llTarget( vector position, float range );