Ohms Law Calc

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Ohm's Law Calculator

///////////////////////////////////////////////////////////////////////
// Sprott-Shaw Degree College //// Ohm's Law Calculator Script ////////
///////////////// Copyright (C) 2007  Fox Diller //////////////////////
///////////////////////////////////////////////////////////////////////
//                                                                   //
// This program is free software; you can redistribute it and/or     //
// modify it under the terms of the GNU General Public License       //
// as published by the Free Software Foundation; either version 2    //
// of the License, or any later version.                             //
//                                                                   //
// This program is distributed in the hope that it will be useful,   //
// but WITHOUT ANY WARRANTY; without even the implied warranty of    // 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     //
// GNU General Public License for more details.                      //
//                                                                   //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the                     //
// Free Software Foundation, Inc.,                                   //
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.     //
//                                                                   //
//// Released under the GPL //////////////////// March 24th, 2007 /////
///////////////////////////////////////////////////////////////////////
////////////////////////////// Coded by: Fox Diller ///////////////////
///////////////////////////////////////////////////////////////////////

// [GLOBAL VARIABLES] // CHANGEABLE--
integer  dialog_chan                        = 42;
integer  input_chan                         = 0;
integer input_level                         = 0;
list    inputs;

// [CONSTANTS] // PLZ DO NO CHANGE...
string  CALC_NAME                           = "Ohm's Law Calculator";
string  CALC_DESC                           = "Sprott-Shaw Degree College - Magrathean Technologies";

string  SELECTION;

list    MENU_INITIAL                        = [ "Watts", "Ohms", "Volts", "Amps" ];

list    LIST_WATTS                          = [ "Volts", "Amps", "Ohms" ];
list    LIST_AMPS                           = [ "Volts", "Ohms", "Watts" ];
list    LIST_OHMS                           = [ "Volts", "Amps", "Watts" ];
list    LIST_VOLTS                          = [ "Amps", "Ohms", "Watts" ];

list    LIST_IN_USE;

// [LISTEN KEYS] //
integer DIALOG_LISTEN_KEY;
integer INPUT_LISTEN_KEY;

// [RUNTIME VARIABLES] //
key     OBJECT_KEY;
string  OBJECT_NAME;
key     OBJECT_OWNER_KEY;
string  OBJECT_OWNER_NAME;

  

// [CUSTOM FUNCTIONS] //
// + [MAIN MATH FUNCTIONS] //
float getWatts(float volts, float amps, float ohms)
{
    // llOwnerSay("V:" + (string)volts + " - A:" + (string)amps + " - R:" + (string)ohms); - DEBUG
    
    float result;
    
    if (volts == 0)
        result = llPow(amps, 2.0) * ohms;
    else if (amps == 0)
        result = llPow(volts, 2.0) / ohms;
    else if (ohms == 0)
        result = volts * amps;
    
    return result;
}

float getAmps(float volts, float ohms, float watts)
{
    float result;
    
    if (volts == 0)
        result = llSqrt((watts / ohms));
    else if (ohms == 0)
        result = watts / volts;
    else if (watts == 0)
        result =  volts / ohms;
    
    return result;
}

float getOhms(float volts, float amps, float watts)
{
    float result;
    
    if (volts == 0)
        result = watts / llPow(amps, 2.0);
    else if (amps == 0)
        result = llPow(volts, 2.0) / watts;
    else if (watts == 0)
        result = volts / amps;
    
    return result;
}

float getVolts(float amps, float ohms, float watts)
{
    float result;
    
    if (watts == 0)
        result = amps * ohms;
    else if (amps == 0)
        result = llSqrt((watts * ohms));
    else if (ohms == 0)
        result = watts / amps;
    
    return result;
}

// + [RUNTIME FUNCTIONS] //
initRunTimeVars()
{
    OBJECT_NAME         = CALC_NAME;
    OBJECT_KEY          = llGetKey();
    OBJECT_OWNER_KEY    = llGetOwner();
    OBJECT_OWNER_NAME   = llKey2Name(OBJECT_OWNER_KEY);   
}

// [DEFAULT BEGIN STATE] //
default
{
    state_entry()
    {
        // [Build Runtime Variables.] //
        initRunTimeVars();
        
        llSetObjectName(CALC_NAME);
        llSetObjectDesc(CALC_DESC);
        
        DIALOG_LISTEN_KEY = llListen(dialog_chan, OBJECT_OWNER_NAME, OBJECT_OWNER_KEY, "");
        
        // llSay(0, "Calculator Online!");
    }

    touch_start(integer total_number)
    {
        llDialog(llDetectedKey(0), "What value would you like to find out?", MENU_INITIAL, dialog_chan);        
    }
    
    listen(integer channel, string name, key id, string message)
    {
        if (channel == dialog_chan)
        {
            INPUT_LISTEN_KEY = llListen(input_chan, OBJECT_OWNER_NAME, OBJECT_OWNER_KEY, "");
            llSay(0, "Please enter the values to find the [ "+message+" ], type 0 for null value.");
           
            if (message == "Watts")
                LIST_IN_USE = LIST_WATTS;
            else if (message == "Volts")
                LIST_IN_USE = LIST_VOLTS;
            else if (message == "Amps")
                LIST_IN_USE = LIST_AMPS;
            else if (message == "Ohms")
                LIST_IN_USE = LIST_OHMS;
                
            SELECTION = message;
                
            llSay(0, llList2String(LIST_IN_USE, input_level)+":");
        } 
        else
        {
            input_level++;
            
            inputs += message;
            
            if (input_level == 3)
            {
                // llOwnerSay(llList2CSV(inputs)); - DEBUG
                
                if (SELECTION == "Watts")
                    llSay(0, SELECTION + ": " + (string)getWatts(llList2Float(inputs, 0), llList2Float(inputs, 1), llList2Float(inputs, 2)));
                else if (SELECTION == "Volts")
                    llSay(0, SELECTION + ": " + (string)getVolts(llList2Float(inputs, 0), llList2Float(inputs, 1), llList2Float(inputs, 2)));
                else if (SELECTION == "Amps")
                    llSay(0, SELECTION + ": " + (string)getAmps(llList2Float(inputs, 0), llList2Float(inputs, 1), llList2Float(inputs, 2)));
                else if (SELECTION == "Ohms")
                    llSay(0, SELECTION + ": " + (string)getOhms(llList2Float(inputs, 0), llList2Float(inputs, 1), llList2Float(inputs, 2)));
                    
                llResetScript();
            }
            
            llSay(0, llList2String(LIST_IN_USE, input_level)+":");
        }
    }
}