LlGetEnergy

From Second Life Wiki

Jump to: navigation, search

Contents

Description

Function: float llGetEnergy( );
149 Function ID
0.0 Delay
10.0 Energy

Returns a float that is how much energy is in the object as a percentage of maximum


Examples

 
// This script tests the energy use of most of the physics functions
// 18 March 2008 by Karzita Zabaleta
 
vector homePos;
integer timerCount = 0;
integer testCount = 0; 
 
// move more than 10m
moveTo(vector origin, vector destination) {
    float dist = llVecDist(origin, destination);
    integer passes = llCeil( llLog(dist/10.0) / llLog(2.0) );
    integer i;
    list params = [PRIM_POSITION, destination];
    for (i=0; i<passes; i++) {
        params = (params=[]) + params + params;
    }
    // actually move the prim, now
    llSetPrimitiveParams(params);
}
 
returnHome()
{
    llSetStatus(STATUS_PHYSICS, FALSE);
    llSleep(0.2);
    moveTo(llGetPos(),homePos);
    llSetTimerEvent(0);
    llSetRot(ZERO_ROTATION);
}
 
default
{
    state_entry() {
        homePos = llGetPos();
        llOwnerSay("Mass is "+(string)llGetMass());
    }
    on_rez(integer _n) {
        llResetScript();
    }
    touch_start(integer n) {
        do {
          llSleep(0.5);
        } while (llGetEnergy() < 0.998);
        llSetPos( llGetPos()+<0,0,5>);
        llSetStatus(STATUS_PHYSICS,TRUE);
        llSetTimerEvent(1.0);
 
        vector impulse = <0,0,5>*llGetMass();
        if (testCount == 0) {
            llOwnerSay("ApplyImpulse");
            llApplyImpulse( impulse, TRUE ); 
        } else if (testCount == 1) {
            llOwnerSay("ApplyRotImpulse");
            llApplyRotationalImpulse( impulse, TRUE);
        } else if (testCount == 2) {
            llOwnerSay("PushObject");
            llPushObject(llGetKey(), impulse, ZERO_VECTOR, TRUE); 
        } else if (testCount == 3) {
            llSetForceAndTorque( ZERO_VECTOR, ZERO_VECTOR, TRUE ); 
            llOwnerSay("Force");
            llSetForce( impulse, TRUE ); 
        } else if (testCount == 4) {
            llSetForceAndTorque( ZERO_VECTOR, ZERO_VECTOR, TRUE ); 
            llOwnerSay("Torque");
            llSetTorque( impulse, TRUE ); 
        } else if (testCount == 5) {
            llSetForceAndTorque( ZERO_VECTOR, ZERO_VECTOR, TRUE ); 
            llOwnerSay("Force and Torque");
            llSetForceAndTorque( impulse, impulse, TRUE ); 
        } else if (testCount == 6) {
            llSetForceAndTorque( ZERO_VECTOR, ZERO_VECTOR, TRUE ); 
            llOwnerSay("MoveToTarget");
            llMoveToTarget( impulse, 0.4 ); 
        } else if (testCount == 7) {
            llStopMoveToTarget ( ); 
            llOwnerSay("RotLookAt");
            llRotLookAt( llEuler2Rot(impulse*DEG_TO_RAD), 0.4, 0.4 ); 
        } else if (testCount == 8) {
            llStopLookAt ( ); 
            llOwnerSay("LookAt");
            llLookAt( impulse, 0.4, 0.4 ); 
        } else if (testCount == 9) {
            llStopLookAt ( ); 
            llOwnerSay("Hover Height");
            llSetHoverHeight( 5.0, TRUE, 0.5);
        } else if (testCount == 10) {
            llSetHoverHeight( 0, TRUE, 0.5);
            llOwnerSay("Ground Repel");
            llGroundRepel( 5, TRUE, 0.5);
        } else if (testCount == 11) {
            llGroundRepel( 0, TRUE, 0.5);
            llOwnerSay("Buoyancy");
            llSetBuoyancy( 0.997 );
        } else {
            llSetBuoyancy( 0.0 );
            llOwnerSay("Done");
            testCount=(-1);
        }
        llOwnerSay((string)timerCount+". energy    :"+(string)llGetEnergy());
        timerCount = 0;
        testCount++;
    }
    timer() {
        llOwnerSay((string)timerCount+". energy    :"+(string)llGetEnergy());
        timerCount++;
        if (timerCount>10) { // just in case floating
            returnHome();
        }
    }
    collision(integer n) {
        llOwnerSay((string)timerCount+". energy    :"+(string)llGetEnergy());
        returnHome();
    }
}
 
 
Personal tools