Difference between revisions of "Control"

From Second Life Wiki
Jump to navigation Jump to search
m (corrected "edge" - happens only during key-up (release))
m (Undo revision 72190 by Udge Watanabe (Talk) I was unable to verify that edge only triggers when released, quite the contrary in fact)
Line 2: Line 2:
|event_id=15|event_delay=0.05|event=control
|event_id=15|event_delay=0.05|event=control
|p1_type=key|p1_name=id|p1_desc
|p1_type=key|p1_name=id|p1_desc
|p2_type=integer|p2_name=level|p2_desc
|p2_type=integer|p2_name=level|p2_desc=bitfield of CONTORL_* flags, non-zero while one or more keys is being held down.
|p3_type=integer|p3_name=edge|p3_desc
|p3_type=integer|p3_name=edge|p3_desc=bitfield of CONTORL_* flags, non-zero when one or more keys have been just pressed or released.
|event_desc=Result of [[llTakeControls]] library function call and user input.
|event_desc=Result of [[llTakeControls]] library function call and user input.
|constants={{LSL Constants/Controls}}
|constants={{LSL Constants/Controls}}
Line 37: Line 37:
         integer end = ~level & edge;
         integer end = ~level & edge;
         integer held = level & ~edge;
         integer held = level & ~edge;
         integer unheld = ~(level | edge);
         integer untouched = ~(level | edge);
         llOwnerSay(llList2CSV([level, edge, start, end, held, unheld]));
         llOwnerSay(llList2CSV([level, edge, start, end, held, untouched]));
     }
     }
}</lsl>
}</lsl>
Line 55: Line 55:


My tests determined that the key returned when an agent control is caught is not the key for that agent, but is the object owner's key. If more then one script is used in the same object to hold permissions for multiple agents simultaneously, control may be triggered in all scripts but there is no way to know which agent actually caused the trigger. This has been filed as [http://jira.secondlife.com/browse/SVC-476 SVC-476]
My tests determined that the key returned when an agent control is caught is not the key for that agent, but is the object owner's key. If more then one script is used in the same object to hold permissions for multiple agents simultaneously, control may be triggered in all scripts but there is no way to know which agent actually caused the trigger. This has been filed as [http://jira.secondlife.com/browse/SVC-476 SVC-476]
"level" is non-zero while one or more keys are being held down.
"edge" is non-zero in the instant that one or more keys are released.
The actual values of "level" and "edge" are a bitmask of the keys currently being held (or released).
|mode
|mode
|cat1=Controls
|cat1=Controls

Revision as of 21:10, 15 June 2008

Description

Event: control( key id, integer level, integer edge ){ ; }
15 Event ID
0.05 Delay

Result of llTakeControls library function call and user input.

• key id
• integer level bitfield of CONTORL_* flags, non-zero while one or more keys is being held down.
• integer edge bitfield of CONTORL_* flags, non-zero when one or more keys have been just pressed or released.
Constant Value Description
CONTROL_FWD 0x00000001 Move forward control ( or W)
CONTROL_BACK 0x00000002 Move back control ( or S)
CONTROL_LEFT 0x00000004 Move left control (⇧ Shift- or ⇧ Shift-A [ or A in mouselook])
CONTROL_RIGHT 0x00000008 Move right control (⇧ Shift- or ⇧ Shift-D [ or D in mouselook])
CONTROL_ROT_LEFT 0x00000100 Rotate left control ( or A)
CONTROL_ROT_RIGHT 0x00000200 Rotate right control ( or D)
CONTROL_UP 0x00000010 Move up control (PgUp or E)
CONTROL_DOWN 0x00000020 Move down control (PgDn or C)
CONTROL_LBUTTON 0x10000000 Left mouse button control
CONTROL_ML_LBUTTON 0x40000000 Left mouse button control while in mouselook
(undocumented) 0x02000000 Avatar left rotation detected. Triggers llGetAnimation == "Turning Left"
(undocumented) 0x04000000 Avatar right rotation detected. Triggers llGetAnimation == "Turning Right"

Caveats


Examples

<lsl>default {

   state_entry()
   {
       llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
   }
   run_time_permissions(integer perm)
   {
       if(PERMISSION_TAKE_CONTROLS & perm)
       {
           llTakeControls(
                           CONTROL_FWD

Notes

llGetRot in mouselook for an attachment returns the angle the avatar is looking in.

If llMinEventDelay is set to at least double this events delay, then this event will treat the llMinEventDelay as if it were half; in other words, this event can trigger twice as often as other events if the llMinEventDelay is greater than 0.1

My tests determined that the key returned when an agent control is caught is not the key for that agent, but is the object owner's key. If more then one script is used in the same object to hold permissions for multiple agents simultaneously, control may be triggered in all scripts but there is no way to know which agent actually caused the trigger. This has been filed as SVC-476

See Also

Deep Notes

Signature

event void control( key id, integer level, integer edge );