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); } }


