Difference between revisions of "Moving end"

From Second Life Wiki
Jump to navigation Jump to search
m (Replaced old <LSL> block with <source lang="lsl2">)
 
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{LSL_Event|event_id=26|event_delay|event=moving_end
{{LSL_Event|event_id=26|event_delay|event=moving_end
|inject-2={{Issues/SVC-1004}}
|event_desc=Triggered when task stops moving
|event_desc=Triggered when task stops moving
|constants
|constants
|spec
|spec
|caveats=*The [[moving_start]] and [[moving_end]] events require special handling when scripting attachments.
|caveats=*The [[moving_start]] and [[moving_end]] events require special handling when scripting attachments.
**After adding or editing a script you must:
**After adding or editing a script you must take off the attachment and then wear the attachment again.
***Take off the attachment and then wear the attachment again.
*This event's behavior is undefined for non-physical movement ([[llSetPos]], movement via [[Building_Tools|build tool]], etc.) although these movements will often trigger it.
|examples
*This event is triggered when an object finishes its [[LlSetKeyframedMotion|keyframed motion]], or when motion ceases via KFM_CMD_PAUSE or KFM_CMD_STOP.
*This event is also triggered when an object is rezzed (unless, presumably, you happen to rez it in precisely the same spot it was before.)
|examples=<source lang="lsl2">
//Physical Prim Movement Script
//By Nika Rugani
//With spam work around
 
vector pos;
float move_time = 5; //Move every 5 seconds
float increment = 5;
 
float power = 0.5; //The TAU
 
integer trigger_multiple = FALSE; // This bad boy will prevent spam of moving start event
integer trigger_slave = 1;
 
setPhysical(integer status_physics)
{
    llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_PHYSICS, status_physics]);
}
 
default
{
    touch_start(integer num_detected)
    {
        if(llGetStatus(STATUS_PHYSICS) == FALSE)
        {
            pos = llGetPos(); //Set the objects default position
            setPhysical(TRUE);
            llSetTimerEvent(move_time);
        }
        else
        {
            setPhysical(FALSE);
            llSetPos(pos);
        }
    }
    moving_start()
    {
        if(trigger_slave == 0)
        {
            llOwnerSay("YEY!! I'm Moving!");
            if(trigger_multiple == FALSE)
            {
                trigger_slave = 1;
            }
        }
    }
    moving_end()
    {
        llSetTimerEvent(move_time);
    }
    timer()
    {
        llSetTimerEvent(0);
        if(llVecDist(pos, llGetPos()) > (increment-2))
        {
            llMoveToTarget(pos, power);
        }
        else
        {
            llMoveToTarget(pos+<0.0,0.0,increment>, power);
        }
        trigger_slave = 0;
    }
}</source>
|helpers
|helpers
|also_header
|also_header
|also_events={{LSL DefineRow||[[moving_start]]|}}
|also_events={{LSL DefineRow||[[moving_start]]|}}
|also_functions
|also_functions={{LSL DefineRow||[[llTarget]]|}}
{{LSL DefineRow||[[llRotTarget]]|}}
|also_articles
|also_articles
|also_footer
|also_footer

Latest revision as of 00:19, 22 January 2015

Description

! Event: moving_end( ){ ; }

Triggered when task stops moving


Caveats

  • The moving_start and moving_end events require special handling when scripting attachments.
    • After adding or editing a script you must take off the attachment and then wear the attachment again.
  • This event's behavior is undefined for non-physical movement (llSetPos, movement via build tool, etc.) although these movements will often trigger it.
  • This event is triggered when an object finishes its keyframed motion, or when motion ceases via KFM_CMD_PAUSE or KFM_CMD_STOP.
  • This event is also triggered when an object is rezzed (unless, presumably, you happen to rez it in precisely the same spot it was before.)


Examples

//Physical Prim Movement Script
//By Nika Rugani
//With spam work around

vector pos;
float move_time = 5; //Move every 5 seconds
float increment = 5;

float power = 0.5; //The TAU

integer trigger_multiple = FALSE; // This bad boy will prevent spam of moving start event
integer trigger_slave = 1;

setPhysical(integer status_physics)
{
    llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_PHYSICS, status_physics]);
}

default
{
    touch_start(integer num_detected)
    {
        if(llGetStatus(STATUS_PHYSICS) == FALSE)
        {
            pos = llGetPos(); //Set the objects default position
            setPhysical(TRUE);
            llSetTimerEvent(move_time);
        }
        else
        {
            setPhysical(FALSE);
            llSetPos(pos);
        }
    }
    moving_start()
    {
        if(trigger_slave == 0)
        {
            llOwnerSay("YEY!! I'm Moving!");
            if(trigger_multiple == FALSE)
            {
                trigger_slave = 1;
            }
        }
    }
    moving_end()
    {
        llSetTimerEvent(move_time);
    }
    timer()
    {
        llSetTimerEvent(0);
        if(llVecDist(pos, llGetPos()) > (increment-2))
        {
            llMoveToTarget(pos, power);
        }
        else
        {
            llMoveToTarget(pos+<0.0,0.0,increment>, power);
        }
        trigger_slave = 0;
    }
}

See Also

Events

•  moving_start

Functions

•  llTarget
•  llRotTarget

Deep Notes

Issues

All Issues

~ Search JIRA for related Issues
   Behavior of moving_start() and moving_end() is inconsistent.

Signature

event void moving_end(  );