Difference between revisions of "LlGround"

From Second Life Wiki
Jump to navigation Jump to search
m (<lsl> tag to <source>)
 
(13 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{LSL_Function
{{LSL_Function
|inject-2={{LSL Function/offset|offset|noZ=*|sim=*}}
|func_id=42|func_sleep=0.0|func_energy=10.0
|func_id=42|func_sleep=0.0|func_energy=10.0
|sort=Ground
|func=llGround|sort=Ground
|func=llGround|sort=Ground
|return_type=float|p1_type=vector|p1_name=offset
|return_type=float|p1_type=vector|p1_name=offset
|func_footnote=The requested position needs to be in the same sim, only the X & Y of the '''offset''' are important.
|func_desc
|func_desc
|return_text=that is the ground height below the object [[llGetPos|position]] + '''offset'''
|return_text=that is the ground height directly below the [[llGetPos|prim position]] + {{LSLP|offset}}
|spec
|spec
|caveats
|caveats
|constants
|constants
|examples=<pre>
|examples=
// by Konigmann Lippmann
<source lang="lsl2">// Makes the object land on ground or on water
FindGroundOrWater()
FindGroundOrWater()
{
{
     //llSay(0, "Finding Ground.");
     vector vTarget = llGetPos();
     float fGroundHeight = llGround( <0,0,0> );
     vTarget.z = llGround( ZERO_VECTOR );
     float fWaterLevel = llWater( <0,0,0> );
     float fWaterLevel = llWater( ZERO_VECTOR );
     integer iRepeats = 0;
     if( vTarget.z < fWaterLevel )
if( fGroundHeight < fWaterLevel )
        vTarget.z = fWaterLevel;
fGroundHeight = fWaterLevel;
     llSetRegionPos(vTarget);
    vector vOldPosition = llGetPos();
    vector vNewPosition = vOldPosition;
    vNewPosition.z = fGroundHeight;
     //llSay(0, "New location should be:" + (string)vNewPosition );
    while( (llAbs((integer)(vOldPosition.z - vNewPosition.z)) > 2.0 ) && (fGroundHeight>iRepeats) )
    {
        llSetPos( vNewPosition );
        vOldPosition = llGetPos();
    //llSay(0, "vOldPosition=[" + (string)vOldPosition +"]" );
    iRepeats++; //iRepeats is used as a safety valve to make sure that this routine doesn't repeat forever.
    }
}
}


Line 35: Line 26:
{
{
     touch_start(integer total_number)
     touch_start(integer total_number)
    {
         FindGroundOrWater();
         FindGroundOrWater();
}
    }
</pre>
}</source>
|helpers
|helpers
|also_functions=
|also_functions=
Line 43: Line 35:
{{LSL DefineRow||[[llGroundNormal]]|Gets the ground normal}}
{{LSL DefineRow||[[llGroundNormal]]|Gets the ground normal}}
{{LSL DefineRow||[[llGroundSlope]]|Gets the ground slope}}
{{LSL DefineRow||[[llGroundSlope]]|Gets the ground slope}}
{{LSL DefineRow||[[llEdgeOfWorld]]|Returns existence of neighboring sims}}
|also_tests
|also_tests
|also_events
|also_events

Latest revision as of 10:22, 22 January 2015

Summary

Function: float llGround( vector offset );
0.0 Forced Delay
10.0 Energy

Returns a float that is the ground height directly below the prim position + offset

• vector offset offset relative to the prim's position and expressed in local coordinates

The requested position needs to be in the same region. Only the x and y coordinates in offset are important, the z component is ignored.

Examples

// Makes the object land on ground or on water
 
FindGroundOrWater()
{
    vector vTarget = llGetPos();
    vTarget.z = llGround( ZERO_VECTOR );
    float fWaterLevel = llWater( ZERO_VECTOR );
    if( vTarget.z < fWaterLevel )
        vTarget.z = fWaterLevel;
    llSetRegionPos(vTarget);
}

default
{
    touch_start(integer total_number)
    {
        FindGroundOrWater();
    }
}

See Also

Functions

•  llGroundContour Gets the ground contour
•  llGroundNormal Gets the ground normal
•  llGroundSlope Gets the ground slope
•  llEdgeOfWorld Returns existence of neighboring sims

Deep Notes

Signature

function float llGround( vector offset );