Difference between revisions of "LlPassTouches"
Jump to navigation
Jump to search
All Issues ~ Search JIRA for related Bugs
m |
(I think that all makes more sense.) |
||
Line 6: | Line 6: | ||
|return_text | |return_text | ||
|spec | |spec | ||
|caveats=This has no effect | |caveats=This has no effect (whether set [[TRUE]] or [[FALSE]]) from the root. Touches are always passed to the parent when there is '''no touch event script in the child''', even if this is set ([[TRUE]] or [[FALSE]]) within another event in a child's script. If you want to block touches from a child by using this function, you must add a script with a touch event in the child and set to [[FALSE]]. | ||
|constants | |constants | ||
|examples | |examples=Make a two prim [[LINK_SET]] (Object). Name the root "Parent" and the child "Child". To the root add this script -<lsl>integer told; | ||
default | |||
{ | |||
state_entry() | |||
{ | |||
told = FALSE; | |||
} | |||
touch_start(integer total_number) | |||
{ | |||
if(!(llDetectedLinkNumber(0) == llGetLinkNumber()))// We can use a condition like this to filter from which prims touches are triggered. | |||
{ | |||
llSay(0, "My child tells me you touched it. Abuse report pending.");// This will only be spoken if the child is touched twice. | |||
told = TRUE; | |||
} | |||
else | |||
{ | |||
if(!told) | |||
llSay(0, "You can touch me all you like");// The unaware Parent leads you on. | |||
else | |||
llSay(0, "If I had my way you would have your hands cut off!");// Not any more. | |||
} | |||
} | |||
}</lsl>And to the child add this script -<lsl>integer once_is_too_often; | |||
default | |||
{ | |||
state_entry() | |||
{ | |||
llPassTouches(FALSE);// Innocent child doesn't know to say something the first time. | |||
once_is_too_often = FALSE; | |||
} | |||
touch_start(integer total_number) | |||
{ | |||
if(llDetectedLinkNumber(0) == llGetLinkNumber())// Again we check who is being touched. | |||
{ | |||
if(!once_is_too_often) | |||
{ | |||
llSay(0, "If you touch me again I'm telling."); | |||
llPassTouches(TRUE); // But if a second time, it will tell. | |||
once_is_too_often = TRUE;// And then fall silent. | |||
} | |||
} | |||
} | |||
}</lsl> | |||
|helpers | |helpers | ||
|also_events= | |also_events= |
Revision as of 07:23, 8 August 2009
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llPassTouches( integer pass );154 | Function ID |
0.0 | Forced Delay |
10.0 | Energy |
Sets pass-touches prim attribute.
• integer | pass | – | boolean, if TRUE, touches are passed from children on to parents |
The default is TRUE if there is no script to handle the touch events.
Caveats
This has no effect (whether set TRUE or FALSE) from the root. Touches are always passed to the parent when there is no touch event script in the child, even if this is set (TRUE or FALSE) within another event in a child's script. If you want to block touches from a child by using this function, you must add a script with a touch event in the child and set to FALSE.
Examples
Make a two prim LINK_SET (Object). Name the root "Parent" and the child "Child". To the root add this script -<lsl>integer told;
default {
state_entry() { told = FALSE; } touch_start(integer total_number) { if(!(llDetectedLinkNumber(0) == llGetLinkNumber()))// We can use a condition like this to filter from which prims touches are triggered. { llSay(0, "My child tells me you touched it. Abuse report pending.");// This will only be spoken if the child is touched twice. told = TRUE; } else { if(!told) llSay(0, "You can touch me all you like");// The unaware Parent leads you on. else llSay(0, "If I had my way you would have your hands cut off!");// Not any more. } }
}</lsl>And to the child add this script -<lsl>integer once_is_too_often;
default {
state_entry() { llPassTouches(FALSE);// Innocent child doesn't know to say something the first time. once_is_too_often = FALSE; } touch_start(integer total_number) { if(llDetectedLinkNumber(0) == llGetLinkNumber())// Again we check who is being touched. { if(!once_is_too_often) { llSay(0, "If you touch me again I'm telling."); llPassTouches(TRUE); // But if a second time, it will tell. once_is_too_often = TRUE;// And then fall silent. } } }}</lsl>