Difference between revisions of "LlFleeFrom"

From Second Life Wiki
Jump to navigation Jump to search
m
(14 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Pathfinding alpha}}
{{LSL_Function
{{LSL_Function|
|inject-2={{LSL Function/position|position|region=*}}
func=llFleeFrom|
|func=llFleeFrom
func_desc=Directs an object to keep away from a defined position in the region or adjacent regions.|
|func_desc=Directs a character to keep a specific {{LSLP|distance}} from a specific {{LSLP|position}} in the region or adjacent regions.
p1_type=vector|
|p1_type=vector
p1_name=source|
|p1_name=position
p1_desc=Global coordinate from which to flee.|
|p1_desc= from which to flee.
p2_type=float|
|p1_hover= from which to flee.
p2_name=distance|
|p2_type=float
p2_desc=Distance in meters to flee from the source.|
|p2_name=distance
p3_type=list|
|p2_desc=Distance in meters to flee from {{LSLP|position}}.
p3_name=options|
|p2_hover=Distance in meters to flee from 'position'.
p3_desc=No options available at this time.|
|p3_type=list
caveats=
|p3_subtype=instructions
|p3_name=options
|p3_desc=No options available at this time.
|caveats=
* Must use llCreateCharacter or script won't compile.
* 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.
* The {{LSLP|position}} to flee from must be near the nav mesh; otherwise, this behavior will fail and trigger [[path update]] with {{LSL Const|PU_FAILURE_INVALID_GOAL|ihex=3|hex=0x03|nolink=*}}.
* If you want to avoid an agent or object as per the example below, it's much more elegant and less sim resource intensive to use [[llEvade]] instead.|
* If you want to avoid an agent or object as per the example below, it's much more elegant and less sim resource intensive to use [[llEvade]] instead.
examples=
|examples=
<lsl>
<source lang="lsl2">
vector last_touched_pos;
vector last_touched_pos;
key last_touched_key;
key last_touched_key;
Line 23: Line 26:
default
default
{
{
state_entry()
    state_entry()
{
    {
        llCreateCharacter([CHARACTER_DESIRED_SPEED, 50.0]);
}
    }


touch_start(integer total_number)
    touch_start(integer total_number)
{
    {
last_touched_key = llDetectedKey(0);
last_touched_key = llDetectedKey(0);
last_touched_pos = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0);
last_touched_pos = llDetectedPos(0);
llFleeFrom(last_touched_pos, 10, []);
llFleeFrom(last_touched_pos, 10, []);
llSetTimerEvent(0.2);
llSetTimerEvent(0.2);
}
    }
timer()
    timer()
    {
vector last_touched_pos_now = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0);
if ( llVecDist(last_touched_pos, last_touched_pos_now) > 1 )
{
{
vector last_touched_pos_now = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0);
    last_touched_pos = last_touched_pos_now;
if ( llVecDist(owner_pos, last_owner_pos) > 1 )
    llFleeFrom(last_touched_pos, 10, []);
{
last_touched_pos = last_touched_pos_now;
llFleeFrom(last_touched_pos, 10, []);
}
}
}
    }
}
}
</lsl> |
</source>  
notes= The position vector can be set outside the current region by using extended range region coordinates: e.g., to avoid the SE corner of the region to the East of the current one, you could llFleeFrom(<0.0, 512.0, 0.0>, []); |
|notes= The position vector can be set outside the current region by using extended range region coordinates: e.g., to avoid the SE corner of the region to the East of the current one, you could <source lang="lsl2">llFleeFrom(<0.0, 512.0, 0.0>, 20.0, []);</source>
also_functions=
|also_functions=
* [[llCreateCharacter]]
* [[llCreateCharacter]]
* [[llDeleteCharacter]]
* [[llDeleteCharacter]]
Line 59: 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
}}
}}

Revision as of 01:24, 22 January 2015

Summary

Function: llFleeFrom( vector position, float distance, list options );

Directs a character to keep a specific distance from a specific position in the region or adjacent regions.

• vector position position in region coordinates from which to flee.
• float distance Distance in meters to flee from position.
• list options No options available at this time.

Caveats

  • Must use llCreateCharacter or script won't compile.
  • The position to flee from must be near the nav mesh; otherwise, this behavior will fail and trigger path update with PU_FAILURE_INVALID_GOAL.
  • If you want to avoid an agent or object as per the example below, it's much more elegant and less sim resource intensive to use llEvade instead.
All Issues ~ Search JIRA for related Bugs

Examples

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 = llDetectedPos(0);
	llFleeFrom(last_touched_pos, 10, []);
	llSetTimerEvent(0.2);
    }
	
    timer()
    {
	vector last_touched_pos_now = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0);
	if ( llVecDist(last_touched_pos, last_touched_pos_now) > 1 )
	{
	    last_touched_pos = last_touched_pos_now;
	    llFleeFrom(last_touched_pos, 10, []);
	}
    }
}

Notes

The position vector can be set outside the current region by using extended range region coordinates: e.g., to avoid the SE corner of the region to the East of the current one, you could
llFleeFrom(<0.0, 512.0, 0.0>, 20.0, []);

Deep Notes

History

Date of Release 31/07/2012

Search JIRA for related Issues

Signature

function void llFleeFrom( vector position, float distance, list options );