LightPole

De DigiWiki.

Two scripts to produce a LightPole that goes on or off when touched, and will go automatically on when dark.

LightPoleLight script, to be placed in the Prim(s) that are the source of emitting light.

// LightPoleLight.lsl
// 28 august 2007
// Author: Hans541 Tomsen
 
// PRODUCED BY:
// (c) 2007 Logic
// Logic Scripted Products and Script Services
// Owner: Flennan Roffo
 
// VERSION:
// Version: 1.0
 
// LICENCE:
// 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 (at your option) 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// (Also available at http://www.gnu.org/copyleft/gpl.html) 
 
// DESCRIPTION:
// Sets the light of a light pole ON or OFF. 
// Touching the light pole will toggle between ON and OFF.
// Takes into account the SunDirection and will go ON at night and OFF when day.
// Additionally you can tweak the values for SunFullValue and SunDarkValue (the Z coordinate of Sun direction)
// to create a DIM period, during which the light pole is less bright/dimmed.
// LightColor and LightIntensity are changeable values. 
 
// INSTALLION:
// Place this script in the prim that emits the light. You can have several light emitting prims within the
// same linkset. Each light emitting prim needs this script.
// Place the LightPoleTouch script in the ROOT prim of the linkset.
// (in case there is only one prim, place both scripts in the same prim).
// Note: if the light emitting prim and the prim in which the touch script is put are not in the
// same linkset, this will not work.
 
// FUTURE ENHANCEMENTS:
// 1) The 'tweakable' parameters (LigthColor, LightIntensity, LightRadius and LightFalloff
//    and also SunFullValue and SunDarkValue) can be read from a notecard.
// 2) A slow instead of abrubt intensity change for the light when the sun goes down.
// 3) Particle effects?
 
///////////////////// EDITABLE VALUES (can be changed) \\\\\\\\\\\\\\\\\\\\\\\
 
float SunFullValue         = 0.0;                 // Above this value DayLight is DAYLIGHT_FULL 
float SunDarkValue         = -0.2;                // Below this value DayLight is DAYLIGHT_DARK
                                                  // Between SunDarkValue and SunFullValue DayLight is DAYLIGHT_DIM
 
float CheckDayLightInterval = 300.0;        // Time interval to check for Daylight in seconds
vector LightColor     = <1.0,1.0,1.0>;      // Color of the light (RGB - each value between 0.0 and 1.0)
float  LightIntensity = 1.0;                // Intensity of the light (values from 0.0 .. 1.0)
float  LightRadius    = 10.0;               // Radius of light cone
float  LightFalloff   = 0.75;               // Fall off (distance/intensity decrease) values from 0.0 ..1.0
 
////////////////// NON EDITABLE VALUES  (Don't touch) \\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
integer LIGHT_ON               = TRUE;
integer LIGHT_OFF           = FALSE;
integer LightStatus         = LIGHT_OFF;
 
integer DAYLIGHT_DARK       = 0;
integer DAYLIGHT_DIM        = 1;
integer DAYLIGHT_FULL       = 2;
 
integer DayLight            = DAYLIGHT_FULL;
float   DimFactor           = 0.5;
integer LM_TOUCH            = 193356;
////////////////////////////////////////// DayLight() ////////////////////////////////
 
integer GetDayLight()
{
    vector SunDirection = llGetSunDirection();
 
    if (SunDirection.z > SunFullValue)
        return DAYLIGHT_FULL;
    else if (SunDirection.z < SunDarkValue)
        return DAYLIGHT_DARK;
    else
        return DAYLIGHT_DIM;
}
 
/////////////////////////////////// LightOn() /////////////////////////////////////////
 
LightOn(float dimfactor)
{
    // code for light on
 
    llSetPrimitiveParams( 
    [ PRIM_POINT_LIGHT, TRUE, LightColor, dimfactor * LightIntensity, LightRadius, LightFalloff ] 
    );
 
    LightStatus = LIGHT_ON;
}
 
///////////////////////////////////// LightOff() /////////////////////////////////////////
 
LightOff()
{
    // code for light off
 
    llSetPrimitiveParams( 
    [ PRIM_POINT_LIGHT, FALSE, <0.0,0.0,0.0>, 0.0, 0.0, 0.0 ] 
    );
 
    LightStatus = LIGHT_OFF;
}
 
//////////////////////////////////////// ToggleLight() //////////////////////////////////
 
ToggleLight()
{
    if (LightStatus == LIGHT_ON)
    {
        LightOff();
    }
    else
    {
        LightOn(1.0);
    }
}
 
//////////////////////////// CheckDayLight() /////////////////////////////////
 
CheckDayLight()
{
    integer daylight = GetDayLight();
 
    if (daylight != DayLight)
    {
        if (daylight == DAYLIGHT_FULL)
        {
            DayLight = DAYLIGHT_FULL;
            LightOff();
        }
        else if (daylight == DAYLIGHT_DARK)
        {
            DayLight = DAYLIGHT_DARK;
            LightOn(1.0);
        }
        else // Dim
        {
            DayLight = DAYLIGHT_DIM;
            LightOn(DimFactor);
        }
    }
}
//////////////////////////////////////////////////////////////////////////////
// state default
//////////////////////////////////////////////////////////////////////////////
 
default
{
    //////////////////////////////////////////////////////////////////////////
 
    state_entry()
    {
        CheckDayLight();
        llSetTimerEvent(CheckDayLightInterval);
    }
 
    //////////////////////////////////////////////////////////////////////////
 
    timer()
    {
        CheckDayLight();
    }
 
    //////////////////////////////////////////////////////////////////////////
 
    link_message(integer sender, integer msgid, string message, key id)
    {
        if (msgid == LM_TOUCH)
        {
            ToggleLight();
        }
    }
}

LightPoleTouch script, to be placed in the rootprim of the lightpole.

// LightPoleTouch.lsl
 
// 28 august 2007
// Author: Hans541 Tomsen
 
// PRODUCED BY:
// (c) 2007 Logic
// Logic Scripted Products and Script Services
// Owner: Flennan Roffo
 
// VERSION:
// Version: 1.0
 
// LICENCE:
// 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 (at your option) 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// (Also available at http://www.gnu.org/copyleft/gpl.html) 
 
// DESCRIPTION:
// Sets the light of a light pole ON or OFF. 
// Touching the light pole will toggle between ON and OFF.
// Takes into account the SunDirection and will go ON at night and OFF when day.
// Additionally you can tweak the values for SunFullValue and SunDarkValue (the Z coordinate of Sun direction)
// to create a DIM period, during which the light pole is less bright/dimmed.
// LightColor and LightIntensity are changeable values. 
 
// INSTALLION:
// Place this script in the ROOT prim of the linkset.
// (in case there is only one prim, place both scripts in the same prim).
// Note: if the light emitting prim and the prim in which the touch script is put are not in the
// same linkset, this will not work.
 
/////////////////////////// NON EDITABLE VALES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
integer LM_TOUCH    = 193356;
 
//////////////////////////// default ///////////////////////////////////////
 
default
{
    touch_start(integer total_number)
    {
        llMessageLinked(LINK_SET, LM_TOUCH, "", NULL_KEY);
    }
}
Outils personnels
  • Cette page a été consultée 560 fois.
donate
Google Ads