Difference between revisions of "LlWater"
Jump to navigation
Jump to 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 14:52, 2 September 2007
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: float llWater( vector offset );153 | Function ID |
0.0 | Forced Delay |
10.0 | Energy |
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.
Caveats
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(); } }