llNavigateTo
Revision as of 13:53, 14 February 2012 by Jeremy Linden (talk | contribs)
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llNavigateTo( vector pos, list options );Directs an object to travel to a defined position in the region or adjacent regions.
• vector | pos | – | Region coordinates for the character to navigate to. | |
• list | options | – | List of parameters to control the type of pathfinding used. |
Adjacent regions can be reached by extending the position vector into the nearby region.
Option | Value | Parameters | Default | Description |
---|---|---|---|---|
FORCE_DIRECT_PATH | 1 | [ integer boolean ] | [ FALSE ] | Makes character navigate in a straight line toward pos. May be set to TRUE or FALSE. |
Caveats
- Must use llCreateCharacter or script won't compile.
- Vertical positions specified for any vectors should be chosen to be as close as possible to the actual height of the terrain requested. Large difference between the provided vertical position and the actual terrain/object will result in failure of the behavior.
- If you want to chase an agent or object as per the example below, it's much more elegant and less sim resource intensive to use llPursue instead.
Examples
<lsl> vector last_touched_pos; key last_touched_key;
default {
state_entry() { llCreateCharacter([CHARACTER_DESIRED_SPEED, 50.0]); }
touch_start(integer total_number) { last_touched_key = llDetectedKey(0); last_touched_pos = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0); llNavigateTo(last_touched_pos, []); llSetTimerEvent(0.2); }
timer() { vector last_touched_pos_now = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0); if ( llVecDist(last_touched_pos_now, last_touched_pos) > 1 ) { last_touched_pos = last_touched_pos_now; llNavigateTo(last_touched_pos, []); } }
}
</lsl>Notes
- FORCE_DIRECT_PATH can be used to rescue characters that have somehow fallen off the navigable zone as it doesn't use the navmesh.
(Needs verification.)
- The position vector can be set outside the current region by using extended range region coordinates: e.g., to go to the SE corner of the region to the East of the current one, you could llNavigateTo(<0.0, 512.0, 0.0>, []);