Difference between revisions of "LlDetectedPos"

From Second Life Wiki
Jump to navigation Jump to search
 
(Start with a simple focussed example)
 
(16 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{LSLFunctionAll|func_id=35|func_sleep=0.0|func_energy=10.0|func=llDetectedPos|return_type=vector|p1_type=integer|p1_name=number|func_footnote=returns the position of detected object number (returns <0,0,0> if number is not valid sensed object)|return_text|spec|caveats|examples|helpers|related|also|notes}}[[Category:LSL_Functions]][[Category:LSL_Stub]]
{{LSL_Function
|inject-2={{LSL_Function/detected|number|pos|error=[[ZERO_VECTOR|<0.0, 0.0, 0.0>]]}}
|func_id=35|func_sleep=0.0|func_energy=10.0
|sort=DetectedPos|func=llDetectedPos
|return_type=vector
|p1_type=integer|p1_name=number
|func_footnote=Returns {{LSLG|ZERO_VECTOR|<0.0, 0.0, 0.0>}} if number is not valid sensed object.
|func_desc
|return_text=that is the position (in [[Viewer_coordinate_frames#Region|region coordinates]]) of {{LSLGC|Detected|detected}} object number.
|spec
|caveats
|constants
|examples=
 
<source lang="lsl2">// Get position and distance of toucher
 
default
{
    touch_start(integer total_number)
    {
// get the position of the avatar touching this prim
vector pos = llDetectedPos(0);
// compute how far away they are
float dist = llVecDist(pos, llGetPos() );
llSay(0, "You are " + (string) dist + " metres from me, at coordinates " + (string) pos);
    }
}</source>
 
<source lang="lsl2">// get name and sim position of Avatars within "say" range
 
default
{
    state_entry()
    {
        llOwnerSay( "Touch me to get the positions of avatars in 'Say' range" );
    }
 
    touch_start( integer vIntTouchCount )
    {
        // Do a one-off sensor sweep over a 20m radius sphere for avatars
        llSensor( "", "", AGENT, 20, PI );
    }
 
    sensor( integer vIntFound )
    {
        integer vIntCounter = 0;
        //-- loop through all avatars found
        do
        {
            llOwnerSay( llDetectedName( vIntCounter )
                // get the position of this detected avatar
                + (string) llDetectedPos( vIntCounter ) );
        } while (++vIntCounter < vIntFound);
    }
 
    // sensor does not detect owner if it's attached
    no_sensor()
    {
        llOwnerSay( "I couldn't find anybody" );
    }
}</source>
|helpers
|also_functions
|also_events
|also_articles
|notes
|permission
|cat1
|cat2
|cat3
|cat4
}}

Latest revision as of 15:50, 17 January 2016

Summary

Function: vector llDetectedPos( integer number );

Returns a vector that is the position (in region coordinates) of detected object number.

• integer number Index of detection information

number does not support negative indexes. Returns <0.0, 0.0, 0.0> if number is not valid sensed object.

Specification

llDetected* functions only work if called from within Detection events (collision, collision_start, collision_end, sensor, touch, touch_start, touch_end) or in functions called by Detection events. They will fail silently and return unusable values if called during other events.

Caveats

  • If number is out of bounds this function returns <0.0, 0.0, 0.0> and the script continues to execute without an error message.
  • Events that enable the llDetected* functions always return at least one detected item.
    • Detection events are not raised if there is nothing detected.[1]
    • The detection event's items detected parameter is initially never less than 1.[2]
All Issues ~ Search JIRA for related Bugs

Examples

// Get position and distance of toucher

default
{
    touch_start(integer total_number)
    {
	// get the position of the avatar touching this prim
	vector pos = llDetectedPos(0);
		
	// compute how far away they are
	float dist = llVecDist(pos, llGetPos() );
		
	llSay(0, "You are " + (string) dist + " metres from me, at coordinates " + (string) pos);
    }
}
// get name and sim position of Avatars within "say" range

default
{
    state_entry()
    {
        llOwnerSay( "Touch me to get the positions of avatars in 'Say' range" );
    }

    touch_start( integer vIntTouchCount )
    {
        // Do a one-off sensor sweep over a 20m radius sphere for avatars
        llSensor( "", "", AGENT, 20, PI );
    }

    sensor( integer vIntFound )
    {
        integer vIntCounter = 0;
        //-- loop through all avatars found
        do
        {
            llOwnerSay( llDetectedName( vIntCounter )
                // get the position of this detected avatar
                + (string) llDetectedPos( vIntCounter ) );
        } while (++vIntCounter < vIntFound); 
    }

    // sensor does not detect owner if it's attached
    no_sensor()
    {
        llOwnerSay( "I couldn't find anybody" );
    }
}

See Also

Articles

•  Detected

Deep Notes

Search JIRA for related Issues

Footnotes

  1. ^ The exception is no_sensor but it doesn't enable llDetected* functions.
  2. ^ Like all event parameters, the user can overwrite the initial value.

Signature

function vector llDetectedPos( integer number );