Difference between revisions of "LlWater"

From Second Life Wiki
Jump to: navigation, search
Line 10: Line 10:
 
|caveats
 
|caveats
 
|constants
 
|constants
|examples
+
|examples=<pre>
 +
FindGroundOrWater()
 +
{
 +
    //llSay(0, "Finding Ground.");
 +
    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;
 +
    //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.
 +
    }
 +
}
 +
 
 +
default
 +
{
 +
    state_entry()
 +
    {
 +
        //llSay(0, "default:state_entry");
 +
    }
 +
 
 +
    touch_start(integer total_number)
 +
    {
 +
        FindGroundOrWater();
 +
    }
 +
}
 +
</pre>
 
|helpers
 
|helpers
 
|also_functions={{LSL DefineRow||[[llGround]]|Gets the ground height}}
 
|also_functions={{LSL DefineRow||[[llGround]]|Gets the ground height}}

Revision as of 13:52, 2 September 2007

Summary

Function: float llWater( vector offset );

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

• vector offset

The requested position needs to be in the same sim.

Examples

FindGroundOrWater()
{
    //llSay(0, "Finding Ground.");
    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;
    //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.
    }
}

default
{
    state_entry()
    {
        //llSay(0, "default:state_entry");
    }

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

See Also

Functions

•  llGround Gets the ground height
•  llWind Gets the wind velocity
•  llCloud Gets the cloud density

Deep Notes

Search JIRA for related Issues

Signature

function float llWater( vector offset );