Le script que tu avais cité fonctionne comme un interrupteur :
tu touches , cela active une lumière , tu retouches , cela l éteint , et ainsi de suite
A ce que je comprend , tu désires plutôt un changement de couleur à chaque toucher sur la prim :
Renseigne la liste listeLumieres ci dessous avec les paramètres désirés.
Éventuellement , si tu veux changer de lumière tant que l utilisateur reste avec le bouton de la souris appuyé , change le touch_end par touch
integer lumiereActuelle = -1;
// notre liste de lumieres
// A remplir ( que ce soit manuellement ou par notecard ou par flux HTTP )
// Dans notre script , une lumiere est definie par 5 champs
// Champ 1 : vecteur représentant la couleur de la lumiere , qui est reprise aussi pour la couleur de la prim
// Champ 2 : intensite
// Champ 3 : rayon
// Champ 4 : falloff
// Champ 5 : glow
list listeLumieres =
[
<1,1,1>, 1.0, 10.0, 0.75, 0.2,
<1,0,0>, 1.0, 10.0, 0.75, 0.12,
<0,1,0>, 1.0, 10.0, 0.75, 0.05,
<0,0,1>, 1.0, 10.0, 0.75, 0.02
];
// dans l exemple ci dessus , on a 4 lumières successivement blanche , rouge , vert , bleu
// choisit une lumiere aleatoirement parmi notre liste de lumiere [ listeLumieres ]
// Si la lumiere choisie est la meme que celle actuellement sur la prim , on en rechoisit une autre
choisirLumiere()
{
integer nombreLumieres = llGetListLength(listeLumieres) / 5;
integer numeroLumiereAleatoire ;
do
{
numeroLumiereAleatoire = (integer)llFrand((float)nombreLumieres );
} while ( lumiereActuelle == numeroLumiereAleatoire );
lumiereActuelle = numeroLumiereAleatoire;
changeLumiere( llList2List(listeLumieres, 5 * numeroLumiereAleatoire , 5 * numeroLumiereAleatoire + 4) );
}
// test de validite des parametres de la lumiere
// retourne vrai si le parametre [ valeur ] est compris entre le parametre [ min ] et [ max ]
// retourne faux avec un message au owner sinon
integer controle( string nom_du_champ, float valeur , float min , float max )
{
if ( ( valeur < min ) || ( valeur > max ) )
{
llOwnerSay("Le champ " + nom_du_champ + " a une valeur en dehors du domaine de valeurs autorisé : valeur " + (string)valeur + " domaine autorise " + (string)min + " , " + (string) max );
return FALSE;
}
return TRUE;
}
// En parametre : [ lumiere ]
// Verifie si les parametres pour la lumiere sont corrects
// Si ils sont corrects applique la lumiere sur la prim
changeLumiere(list lumiere)
{
vector couleur = llList2Vector(lumiere, 0);
float intensite = llList2Float(lumiere, 1);
float rayon = llList2Float(lumiere, 2);
float falloff = llList2Float(lumiere, 3);
float glow = llList2Float(lumiere, 4);
if (
controle( "intensite", intensite , 0.0, 1.0) &&
controle( "rayon", rayon , 0.0, 20.0) &&
controle( "falloff", falloff , 0.0, 2.0) &&
controle( "glow", glow , 0.0, 1.0)
)
{
list parametresLumiere =
[
PRIM_POINT_LIGHT, TRUE, couleur, intensite, rayon, falloff,
PRIM_FULLBRIGHT, ALL_SIDES, TRUE,
PRIM_GLOW, ALL_SIDES, glow,
PRIM_COLOR, ALL_SIDES, couleur, 1.0
];
llSetLinkPrimitiveParamsFast ( LINK_THIS, parametresLumiere );
}
}
default
{ state_entry()
{
llSetText("Toucher pour changer de lumiere",<1,1,1>,1);
}
touch_end(integer total_number)
{
choisirLumiere() ;
}
}