Difference between revisions of "LlGround"

From Second Life Wiki
Jump to navigation Jump to search
Line 13: Line 13:
FindGroundOrWater()
FindGroundOrWater()
{
{
    //llSay(0, "Finding Ground.");
     float fGroundHeight = llGround( <0,0,0> );
     float fGroundHeight = llGround( <0,0,0> );
     float fWaterLevel = llWater( <0,0,0> );
     float fWaterLevel = llWater( <0,0,0> );
Line 22: Line 21:
     vector vNewPosition = vOldPosition;
     vector vNewPosition = vOldPosition;
     vNewPosition.z = fGroundHeight;
     vNewPosition.z = fGroundHeight;
    //llSay(0, "New location should be:" + (string)vNewPosition );
     while( (llAbs((integer)(vOldPosition.z - vNewPosition.z)) > 2.0 ) && (fGroundHeight>iRepeats) )
     while( (llAbs((integer)(vOldPosition.z - vNewPosition.z)) > 2.0 ) && (fGroundHeight>iRepeats) )
     {
     {
         llSetPos( vNewPosition );
         llSetPos( vNewPosition );
         vOldPosition = llGetPos();
         vOldPosition = llGetPos();
    //llSay(0, "vOldPosition=[" + (string)vOldPosition +"]" );
     iRepeats++; //iRepeats is used as a safety valve to make sure that this routine doesn't run forever.
     iRepeats++; //iRepeats is used as a safety valve to make sure that this routine doesn't repeat forever.
     }
     }
}
}

Revision as of 13:54, 2 September 2007

Summary

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

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

• vector offset

The requested position needs to be in the same sim, only the X & Y of the offset are important.

Examples

// by Konigmann Lippmann
FindGroundOrWater()
{
    float fGroundHeight = llGround( <0,0,0> );
    float fWaterLevel = llWater( <0,0,0> );
    integer iRepeats = 0;
	if( fGroundHeight < fWaterLevel )
		fGroundHeight = fWaterLevel;
    vector vOldPosition = llGetPos();
    vector vNewPosition = vOldPosition;
    vNewPosition.z = fGroundHeight;
    while( (llAbs((integer)(vOldPosition.z - vNewPosition.z)) > 2.0 ) && (fGroundHeight>iRepeats) )
    {
        llSetPos( vNewPosition );
        vOldPosition = llGetPos();
    	iRepeats++;	//iRepeats is used as a safety valve to make sure that this routine doesn't run forever.
    }
}

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

Deep Notes

Signature

function float llGround( vector offset );