GetGlow

From Second Life Wiki
Jump to navigation Jump to search

Since a lot of people have asked, me included, I decided to write a function to compensate for the missing llGetGlow(integer face) compliment to llGetAlpha(integer face).

To this effect, I have reverse engineered the llGetAlpha() process fairly accurately, and written GetGlow() to mimic it's functionality to the best of my knowledge.

-To date- I have been unable to find a post providing this function. That may be because it is deeply buried far from places where it would be relevantly visible, or, possibly because a function of this design has not been offered before. Either way, Until LSL incorporates an actual llGetGlow() function, you can use this provision to generate the same effect.

I submit for your convenience, a functional equivalent to llGetGlow().

Place the following function at the top of each script you wish to use GetGlow(integer face) within.

float GetGlow(integer i){ // This function is similar to llGetAlpha(). Usage: float GetGlow(integer face)
    if(i > llGetNumberOfSides()){ return FALSE; }
    else{
        float f;
        list l = llGetPrimitiveParams([PRIM_GLOW, i]);
        i = llGetListLength(l);
        do{f+=llList2Float(l,i);}while(i--);
        return f;    
        }
}

Function float GetGlow(integer face) by -ThumpieBunnyEve Hax

Here is the Equivalent LSL Portal page formatting for use with it.

float GetGlow(integer face)

Returns the Glow (intensity) of the given face.

If face is ALL_SIDES, the value returned is the sum of glows on all faces. To obtain the mean value, use the following:

float meanGlow = GetGlow(ALL_SIDES) / ((float)llGetNumberOfSides());



Verbosely commented Example:

//Blackbox Tech Revealed!  Usage: float GetGlow(integer face)
float GetGlow(integer i)// This function is similar in many if not all capacities to llGetAlpha();
{
    if(i > llGetNumberOfSides()) //To note: I'm not sure why llGetAlpha returns the value TRUE for non existent sides,
        {                         //but I'm going to assume that it's relevant to the way the Clients editor-
        return FALSE;             //adds sides when you alter a prims properties. 
        }                          
                                               
    else
        {
        float f; //memory space for the addition of float data derived from (l) below.
        list l = llGetPrimitiveParams([PRIM_GLOW, i]);//This list may contain floats derived from multiple sides if (i) is Negitive, 
                                                        //a single side if (i) Positive, or no sides if (i) > llGetNumberOfSides().
        i = llGetListLength(l);//To save memory space, we'll reuse integer (i), assigning it the # of Sides passed to this function.
        do{f+=llList2Float(l,i);}while(i--); //Here we loop through the # of Sides, adding each glow value to the float (f).
        return f;    //finally we return the cumulative glow total of (i)'s side(s).
        }
}

//---Below is an example of GetGlow's usage, and it's Comparison to llGetAlpha.---

default
{
state_entry(){
             llSetPrimitiveParams([PRIM_COLOR, -1, <0,0,1>, .5,PRIM_GLOW,-1,.5]);
             llOwnerSay(" \n"+
             "GetGlow(ALL_SIDES)= " +(string)GetGlow(ALL_SIDES)+"\n"+
             "llGetAlpha(ALL_SIDES)= "+(string)llGetAlpha(ALL_SIDES)+"\n"+
             "GetGlow(-1)= " +(string)GetGlow(-1) +"\n"+
             "llGetAlpha(-1)= "+(string)llGetAlpha(-1)+"\n"+
             "GetGlow(2)= "  +(string)GetGlow(2)  +"\n"+
             "llGetAlpha(2)= " +(string)llGetAlpha(2) +"\n"+
             "GetGlow(0)= "  +(string)GetGlow(0)  +"\n"+
             "llGetAlpha(0)= " +(string)llGetAlpha(0) +"\n"+
             "GetGlow(25)= " +(string)GetGlow(25) +"\n"+
             "llGetAlpha(25)= "+(string)llGetAlpha(25));
             }
}

Example of usage by -ThumpieBunnyEve Hax


Example output of the script above.
To Owner:
GetGlow(ALL_SIDES)= 3.000000
llGetAlpha(ALL_SIDES)= 3.000000
GetGlow(-1)= 3.000000
llGetAlpha(-1)= 3.000000
GetGlow(2)= 0.500000
llGetAlpha(2)= 0.500000
GetGlow(0)= 0.500000
llGetAlpha(0)= 0.500000
GetGlow(25)= 0.000000
llGetAlpha(25)= 1.000000


Sorry if the Formatting is off, I could really use some help making this page look more professional, This is my first provisionary page. Edits and corrections welcome, but especially page formatting assistance! -ThumpieBunnyEve Hax