Difference between revisions of "LlTarget"
Jump to navigation
Jump to search
All Issues ~ Search JIRA for related Bugs
Lady Sumoku (talk | contribs) m (Replaced old <LSL> block with <source lang="lsl2">) |
|||
(18 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{LSL_Function | {{LSL_Function | ||
|inject-2={{LSL Function/position|position|region=*}} | |||
|func_id=66|func_sleep=0.0|func_energy=10.0 | |func_id=66|func_sleep=0.0|func_energy=10.0 | ||
|func=llTarget | |func=llTarget|sort=Target | ||
|return_type=integer|p1_type=vector|p1_name=position|p2_type=float|p2_name=range | |return_type=integer | ||
|func_footnote=A similar function exists for rotations: {{LSLG|llRotTarget}} | |return_subtype=handle | ||
|func_desc= | |p1_type=vector|p1_name=position | ||
|return_text= | |p2_type=float|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_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=to unregister the target with {{LSLG|llTargetRemove}}. | |||
|spec | |spec | ||
|caveats | |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 | |constants | ||
|examples | |examples= | ||
<source lang="lsl2"> | |||
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 + ")" | |||
); | |||
} | |||
} | |||
</source> | |||
|helpers | |helpers | ||
|also_functions= | |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_tests | ||
|also_events= | |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 | |also_articles | ||
|notes | |notes | ||
|cat1=Target | |cat1=Target | ||
|cat2=Physics | |cat2=Physics | ||
|cat3 | |cat3=At Target | ||
|cat4 | |cat4 | ||
}} | }} |
Latest revision as of 12:31, 22 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: integer llTarget( vector position, float range );66 | Function ID |
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 |