Difference between revisions of "LlRotTarget"
Jump to navigation
Jump to search
m (<lsl> tag to <source>) |
|||
(12 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LSL Function | ||
|inject-2={{LSL Function/rotation|rot|region=*}} | |||
|func_id=68|func_sleep=0.0|func_energy=10.0 | |func_id=68|func_sleep=0.0|func_energy=10.0 | ||
|func=llRotTarget | |func=llRotTarget | ||
|return_type=integer|p1_type=rotation|p1_name=rot|p2_type=float|p2_name=error | |return_type=integer | ||
|func_footnote=A similar function exists for positions: | |return_subtype=handle | ||
|func_desc=This function is to have the script know when it has reached a rotation.<br/>It registers a | |p1_type=rotation|p1_name=rot|p1_desc=target rotation | ||
|return_text= | |p2_type=float|p2_name=error|p2_desc=angle in radians, defines when {{LSLP|rot}} has been reached|p2_hover=angle in radians, defines when 'rot' has been reached | ||
|func_footnote=A similar function exists for positions: [[llTarget]]<br/>This function does not rotate the object, to do that use [[llSetRot]], [[llRotLookAt]] or [[llLookAt]]. | |||
|func_desc=This function is to have the script know when it has reached a rotation.<br/>It registers a {{LSLP|rot}} with a {{LSLP|error}} that triggers [[at_rot_target]] and [[not_at_rot_target]] events continuously until unregistered. | |||
|return_text=to unregister the target with {{LSLG|llRotTargetRemove}} | |||
|spec | |spec | ||
|caveats | |caveats | ||
|constants | |constants | ||
|examples=< | |examples= | ||
<source lang="lsl2"> | |||
vector standrot = <0.0, 0.0, 0.0>; | vector standrot = <0.0, 0.0, 0.0>; | ||
vector fliprot = <45.0, 0.0, 0.0>; | vector fliprot = <45.0, 0.0, 0.0>; | ||
Line 25: | Line 28: | ||
{ | { | ||
state_entry(){ | state_entry(){ | ||
rottarget = llRotTarget(llEuler2Rot(fliprot*DEG_TO_RAD), 0.1); | |||
llSetPrimitiveParams ([PRIM_ROTATION, llEuler2Rot(standrot*DEG_TO_RAD)]); // rotate to starting point | |||
} | } | ||
not_at_rot_target() | |||
{ | { | ||
llRotTargetRemove( rottarget ); | llRotTargetRemove( rottarget ); | ||
llOwnerSay("not there"); //not at target | llOwnerSay("not there"); //not at target | ||
} | |||
touch_start (integer total_number) | touch_start (integer total_number) | ||
{ | { | ||
state rotatestate; // change to state for new position | |||
} | } | ||
} | } | ||
state rotatestate | |||
{ | |||
state_entry(){ | state_entry(){ | ||
rottarget = llRotTarget(llEuler2Rot(fliprot*DEG_TO_RAD), 0.1); | |||
llSetPrimitiveParams ([PRIM_ROTATION, llEuler2Rot(fliprot*DEG_TO_RAD)]); // rotate to new point | |||
} | } | ||
at_rot_target(integer tnum, rotation targetrot, rotation ourrot) | at_rot_target(integer tnum, rotation targetrot, rotation ourrot) | ||
{ | |||
llRotTargetRemove( rottarget ); | llRotTargetRemove( rottarget ); | ||
llOwnerSay("there"); //reached the target | llOwnerSay("there"); //reached the target | ||
} | |||
touch_start(integer touched) | touch_start(integer touched){ | ||
state default; | state default; | ||
} | } | ||
} | } | ||
</ | </source> | ||
|helpers | |helpers | ||
|also_tests | |also_tests | ||
|also_events= | |also_events= | ||
{{LSL DefineRow|[[at_rot_target]]|[[not_at_rot_target]]|rotational target events}} | |||
{{LSL DefineRow|[[at_target]]|[[not_at_target]]|positional target events}} | |||
|also_functions= | |||
{{LSL DefineRow||[[llRotTargetRemove]]|Cancel a target rotation}} | |||
{{LSL DefineRow||[[llTarget]]|Register a target position}} | |||
{{LSL DefineRow||[[llTargetRemove]]|Cancel a target position}} | |||
|also_articles | |also_articles | ||
|notes | |notes | ||
|cat1=Physics | |cat1=Physics | ||
|cat2=Target | |cat2=Target | ||
|cat3 | |cat3=At Target | ||
|cat4 | |cat4 | ||
}} | }} |
Latest revision as of 14:40, 22 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: integer llRotTarget( rotation rot, float error );68 | Function ID |
0.0 | Forced Delay |
10.0 | Energy |
This function is to have the script know when it has reached a rotation.
It registers a rot with a error that triggers at_rot_target and not_at_rot_target events continuously until unregistered.
Returns a handle (an integer) to unregister the target with llRotTargetRemove
• rotation | rot | – | target rotation | |
• float | error | – | angle in radians, defines when rot has been reached |
A similar function exists for positions: llTarget
This function does not rotate the object, to do that use llSetRot, llRotLookAt or llLookAt.
Caveats
Examples
vector standrot = <0.0, 0.0, 0.0>;
vector fliprot = <45.0, 0.0, 0.0>;
// simple two-state rot target detection and rotation by Hypatia Callisto
// works, to detect a rotation target. An example I wrote
// since there is almost zilch for clean examples for
// at_rot_target, not_at_rot_target, llRotTarget, llRotTargetRemove
integer rottarget;
default
{
state_entry(){
rottarget = llRotTarget(llEuler2Rot(fliprot*DEG_TO_RAD), 0.1);
llSetPrimitiveParams ([PRIM_ROTATION, llEuler2Rot(standrot*DEG_TO_RAD)]); // rotate to starting point
}
not_at_rot_target()
{
llRotTargetRemove( rottarget );
llOwnerSay("not there"); //not at target
}
touch_start (integer total_number)
{
state rotatestate; // change to state for new position
}
}
state rotatestate
{
state_entry(){
rottarget = llRotTarget(llEuler2Rot(fliprot*DEG_TO_RAD), 0.1);
llSetPrimitiveParams ([PRIM_ROTATION, llEuler2Rot(fliprot*DEG_TO_RAD)]); // rotate to new point
}
at_rot_target(integer tnum, rotation targetrot, rotation ourrot)
{
llRotTargetRemove( rottarget );
llOwnerSay("there"); //reached the target
}
touch_start(integer touched){
state default;
}
}
See Also
Events
• at_rot_target | not_at_rot_target | – | rotational target events | |
• at_target | not_at_target | – | positional target events |
Functions
• | llRotTargetRemove | – | Cancel a target rotation | |
• | llTarget | – | Register a target position | |
• | llTargetRemove | – | Cancel a target position |