Difference between revisions of "State exit"

From Second Life Wiki
Jump to navigation Jump to search
m (Replaced old <LSL> block with <source lang="lsl2">)
 
(3 intermediate revisions by 3 users not shown)
Line 6: Line 6:
|caveats=
|caveats=
* Events queued during [[state_exit]], are dumped before the next state is entered. use [[state_entry]] to avoid this, when possible. See [[state]] for further caveats.
* Events queued during [[state_exit]], are dumped before the next state is entered. use [[state_entry]] to avoid this, when possible. See [[state]] for further caveats.
|examples=<lsl>default
|examples=<source lang="lsl2">default
{
{
     state_entry()
     state_entry()
     {
     {
         llOwnerSay("in default state");
         llOwnerSay("Entering default state");
    }
    touch_start(integer detected)
    {
        //Do NOT trigger change state here. See NOTES (2)
     }
     }
     touch_end(integer detected)
     touch_end(integer detected)
     {
     {
        // Note: NEVER do a state change from a touch_start event -
        // - this can result in a missed touch_start on re-entering this state
        // Here we do the state change safely from within touch_end
         state other;
         state other;
     }
     }
Line 30: Line 29:
     state_entry()
     state_entry()
     {
     {
         llOwnerSay("in state \"other\"");
         llOwnerSay("Entering state \"other\"");
    }
    touch_start(integer detected)
    {
        //Do NOT trigger change state here. See NOTES (2)
     }
     }
     touch_end(integer detected)
     touch_end(integer detected)
Line 44: Line 39:
         llOwnerSay("leaving state \"other\"");
         llOwnerSay("leaving state \"other\"");
     }
     }
}</lsl>
}</source>
|helpers
|helpers
|also_header
|also_header
Line 51: Line 46:
|also_articles
|also_articles
|also_footer
|also_footer
|notes=
|notes=While the [[default]] [[state_entry]] is triggered on script reset, state_exit is not triggered prior to the reset.
* (1) While the [[default]] [[state_entry]] is triggered on script reset, state_exit is not triggered prior to the reset.
* (2) Do not change states from within the touch_start() event, since this will prevent the touch_end() event
being called even if you did not define it and from this preserve a partial solve touch event chain across
state transitions.
To perform state transitions at a "touch" make use of the touch_end() event instead!
See: [[SVC-3017]][c]
|mode
|mode
|deprecated
|deprecated

Latest revision as of 01:07, 22 January 2015

Description

Event: state_exit( ){ ; }

Triggered on a qualifying state transition.


Caveats

  • Events queued during state_exit, are dumped before the next state is entered. use state_entry to avoid this, when possible. See state for further caveats.
All Issues ~ Search JIRA for related Bugs

Examples

default
{
    state_entry()
    {
        llOwnerSay("Entering default state");
    }
    touch_end(integer detected)
    {
        // Note: NEVER do a state change from a touch_start event -
        // - this can result in a missed touch_start on re-entering this state
        // Here we do the state change safely from within touch_end
        state other;
    }
    state_exit()
    {
        llOwnerSay("leaving default state");
    }
}

state other
{
    state_entry()
    {
        llOwnerSay("Entering state \"other\"");
    }
    touch_end(integer detected)
    {
        state default;
    }
    state_exit()
    {
        llOwnerSay("leaving state \"other\"");
    }
}

Notes

While the default state_entry is triggered on script reset, state_exit is not triggered prior to the reset.

Deep Notes

Signature

event void state_exit(  );