Library Air Sea Altimeter

Written by: Headmaster
default
{
    state_entry()
    {
        llSetTimerEvent(.01); // How often your timer() event updates
    }

    timer()
    {
        vector pos = llGetPos(); // Gets your current position
        vector size = llGetAgentSize(llGetOwner()); // Get the dimensions of your agent
        size.z = size.z / 2.0; // Halve the height element of your agent, get altitude from feet
        float aboveground = ((float)pos.z - llGround(<0.0,0.0,0.0>) - size.z); // Distance above ground 
        if (aboveground < 0.0) // If it thinks your feet are below ground 
        {
            aboveground = llSqrt(aboveground * aboveground); // - flip it
        }
        if (aboveground < 0.09) // Check the margin of error for zeroing - you can redefine this
        {
            aboveground = 0.0; // Zero it out
        }
        vector Speed = llGetVel(); // LSL function that should be fixed in next release.
        float RealSpeed = llVecMag(Speed); // Convert it to velocity you can use.
        float abovewater = llWater(<0.0,0.0,0.0>) - pos.z; // difference between yourwater height
        if (pos.z >= llWater(<0.0,0.0,0.0>)) // If at or above water
        {
            abovewater = llSqrt(abovewater * abovewater);             
        }        
        if (pos.z < llWater(<0.0,0.0,0.0>)) // If underwater
        {
            abovewater = abovewater - (abovewater * 2.0); // Push the number into the negative range      
        }
        llSetText("Sea Lvl ALT: " + (string)abovewater + "\n" + "Grnd Lvl ALT: " + (string)(aboveground) + "\nSpeed: " + (string)RealSpeed, <1.0,0.0,0.0>, 1.0); // Emit string          
    }
}

 

Category: