Ohms Law Calc

From Second Life Wiki
Jump to navigation Jump to search

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)+":");
        }
    }
}