Difference between revisions of "LlTarget"

From Second Life Wiki
Jump to navigation Jump to search
m (LSL llTarget moved to LlTarget)
m (Replaced old <LSL> block with <source lang="lsl2">)
 
(20 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{LSL Function
{{LSL_Function
|func_id=66
|inject-2={{LSL Function/position|position|region=*}}
|func_sleep=0.0
|func_id=66|func_sleep=0.0|func_energy=10.0
|func_energy=10.0
|func=llTarget|sort=Target
|func=llTarget
|return_type=integer
|return_type=integer
|p1_type=vector
|return_subtype=handle
|p1_name=position
|p1_type=vector|p1_name=position
|p2_type=float
|p2_type=float|p2_name=range
|p2_name=range
|func_footnote=A similar function exists for rotations: {{LSLG|llRotTarget}}<br/>This function does not move the object, to do that use {{LSLG|llSetPos}} or {{LSLG|llMoveToTarget}}.
|func_footnote=set positions within range of position as a target and return an ID for the target
|func_desc=This function is to have the script know when it has reached a position.<br/>It registers a {{LSLP|position}} with a {{LSLP|range}} that triggers {{LSLG|at_target}} and {{LSLG|not_at_target}} events continuously until unregistered.
|return_text=returns an integer used to identify the specified target; this can be removed with [[llTargetRemove]]
|return_text=to unregister the target with {{LSLG|llTargetRemove}}.
|spec|caveats|examples|helpers|related|also|notes}}
|spec
|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.
|constants
|examples=
<source lang="lsl2">
integer target_id;
vector target_pos;


[[Category:LSL Functions|Target]]
default
[[Category:LSL Stub]]
{
    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 + ")"
        );
    }
}
</source>
|helpers
|also_functions=
{{LSL DefineRow||[[llTargetRemove]]|Cancel a target position}}
{{LSL DefineRow||[[llRotTarget]]|Register a target rotation}}
{{LSL DefineRow||[[llRotTargetRemove]]|Cancel a target rotation}}
|also_tests
|also_events=
{{LSL DefineRow|[[at_target]]|[[not_at_target]]|positional target events}}
{{LSL DefineRow|[[at_rot_target]]|[[not_at_rot_target]]|rotational target events}}
|also_articles
|notes
|cat1=Target
|cat2=Physics
|cat3=At Target
|cat4
}}

Latest revision as of 11:31, 22 January 2015

Summary

Function: integer llTarget( vector position, float range );
0.0 Forced Delay
10.0 Energy

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 a handle (an integer) to unregister the target with llTargetRemove.

• vector position position in region coordinates
• 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.

Examples

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 + ")"
        );
    }
}

See Also

Events

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

Functions

•  llTargetRemove Cancel a target position
•  llRotTarget Register a target rotation
•  llRotTargetRemove Cancel a target rotation

Deep Notes

Signature

function integer llTarget( vector position, float range );