LlGetClosestNavPoint: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Corrected example script which gave syntax error on compiling. Not tested.
mNo edit summary
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Pathfinding alpha}}
{{LSL_Function
{{LSL_Function|
|inject-2={{LSL_Function/position|point|region=*}}
inject-2={{LSL_Function/position|point|region=*}}|
|func=llGetClosestNavPoint
func=llGetClosestNavPoint|
|func_desc=Used to get a point on the navmesh that is the closest point to {{LSLP|point}}.
func_desc=Used to get a point on the navmesh that is the closest point to {{LSLP|point}}.|
|func_sleep_frame=1
func_sleep_frame=1|
|return_type=list
return_type=list|
|return_text=containing a single vector which is the closest point on the navmesh to the point provided or an empty list.
return_text=containing a single vector which is the closest point on the navmesh to the point provided or an empty list.|
|func_footer=If an option is not explicitly set, the default value for that option is used.
func_footer=If an option is not explicitly set, the default value for that option is used.|
|p1_type=vector|p1_name=point
p1_type=vector|
|p2_type=list|p2_subtype=instructions|p2_name=options
p1_name=point|
|p2_desc=GCNP_* and other flags with their parameters. See [[#Options|options]] table
p1_desc=.|
|constants={{LSL Constants/llGetClosestNavPoint}}
p1_hover=.|
|caveats=
p2_type=list|
* There is no guarantee that a path exists from your current location to the returned point.
p2_name=options|
|examples=
p2_desc=GCNP_* and other flags with their parameters. See [[#Options|options]] table|
<source lang="lsl2">
constants={{LSL Constants/llGetClosestNavPoint}}|
caveats=
* There is no guarantee that a path exists from your current location to the returned point.|
examples=
<lsl>
create_character()
create_character()
{
{
Line 54: Line 49:
     }
     }
}
}
</lsl>|
</source>
notes=Using the method incurs a one frame script sleep and the call can be extremely expensive. It is intended to be used in response to a path_update message indicating an inability to reach a requested destination (e.g., because the character or the destination is off the mesh).|
|notes=Using the method incurs a one frame script sleep and the call can be extremely expensive. It is intended to be used in response to a path_update message indicating an inability to reach a requested destination (e.g., because the character or the destination is off the mesh).
also_functions=
|also_functions=
* [[llCreateCharacter]]
* [[llCreateCharacter]]
* [[llDeleteCharacter]]
* [[llDeleteCharacter]]
Line 67: Line 62:
* [[llPursue]]
* [[llPursue]]
* [[llUpdateCharacter]]
* [[llUpdateCharacter]]
* [[llWanderWithin]]|
* [[llWanderWithin]]
also_events=
|also_events=
* [[path_update]]
* [[path_update]]
|history = Date of Release  [[ Release_Notes/Second_Life_Server/12#12.07.31.262785 | 31/07/2012 ]]
|cat1=Pathfinding
}}
}}

Latest revision as of 01:45, 22 January 2015

Summary

Function: list llGetClosestNavPoint( vector point, list options );

Used to get a point on the navmesh that is the closest point to point.
Returns a list containing a single vector which is the closest point on the navmesh to the point provided or an empty list.

• vector point A point in region-local space
• list options GCNP_* and other flags with their parameters. See options table

If an option is not explicitly set, the default value for that option is used.

Options V Parameters Default Description
GCNP_RADIUS ] 0 float distance ] 20.0 ] Limits how far out to search for a navigation point.
GCNP_STATIC ] 1 integer use_static_mesh ] FALSE ] Specifies whether the test should use the static or dynamic nav mesh. In the static case, all dynamic obstacles are ignored.
CHARACTER_TYPE ] 6 integer type ] CHARACTER_TYPE_NONE ] Filters nav points by eliminating nav mesh faces which are 0% walkable for the specified character type. In the default CHARACTER_TYPE_NONE case, all nav mesh faces are included.

Caveats

  • This function causes the script to sleep for 1 frame.
  • There is no guarantee that a path exists from your current location to the returned point.

Examples

create_character()
{
//  Clear any previous character behaviors
    llDeleteCharacter();

//  default speed is 20
    llCreateCharacter([CHARACTER_DESIRED_SPEED, 10.0]);
    llWanderWithin(llGetPos(), <64.0, 64.0, 2.0>, []);
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    state_entry()
    {
        create_character();
    }
 
    touch_start(integer num_detected)
    {
        vector currentPos = llGetPos();
        list points = llGetClosestNavPoint(currentPos, [GCNP_RADIUS, 10.0] );

        if (!llGetListLength(points))
            return;

        llSay(0, "current position " + (string)currentPos
            + " and closest nav point " + (string)llList2Vector(points, 0) );
    }
}

Notes

Using the method incurs a one frame script sleep and the call can be extremely expensive. It is intended to be used in response to a path_update message indicating an inability to reach a requested destination (e.g., because the character or the destination is off the mesh).

Deep Notes

History

Date of Release 31/07/2012

Signature

function list llGetClosestNavPoint( vector point, list options );