19 janvier 2011

LSL : cadre diaporama (1)

Je vais commencer un petit tuto de build / script...
Enfin surtout du script mais comme toujours, un script nécessite toujours une prim pour fonctionner.

Le but : créer un cadre photo et faire défiler les photos.... La version SL du cadre numérique.
Une fois le travail de base effectué, nous ferons évoluer le script : d'une version simple et efficace à une version plus complexe mais offrant d'autres possibilités


Plan de travail :

Réaliser le cadre (avec une petite bordure pour faire plus joli)
  • 1er script : on affiche les images contenues dans le cadre
  • 2e script : on ajoute un menu pour changer le timer du défilement des photos
  • 3e script : on ne met plus les photos dans le cadre mais une notecard avec les UUID des textures (histoire de faire joujou avec le dataserver)


En avant !

On commence par la partie build. Tout sera détaillé fortement pour permettre a tous de réussir le travail. Le script est perfectible mais se veut simple, pour une meilleure compréhension, et pour donner la possibilité de l'adapter comme on le souhaite.

On commence par rezzer un cube. Je lui donne pour dimension :
  • X = 1.5
  • Y = 1.5
  • Z = 0.1


On va ensuite faire un petit biseau sur le bord du cube pour donner une profondeur à notre cadre. Pour cela on définit les valeurs :
  • Biseautage X = 0.1
  • Biseautage Y = 0.1


On fait une petite rotation au tout pour que la partie du cube qui servira à l'affichage soit verticale.
  • Rotation X = 90.0




Sur l'onglet contenu, je définis un nouveau script que je renomme en : Diaporama (clic droit et renommer)
Je glisse enfin quelques images dans le cadre, pour qu'il y ait un peu à afficher.



A présent : le script....


On ouvre la fenêtre de script et on commence....
Je vais définir plusieurs variables qui seront utilisées dans le script :
  • delay : intervalle de temps entre chaque photo. De cette manière, si je souhaite la changer, pas besoin de passer mon temps a rechercher dans le code, je change juste cette valeur.
  • idx : l'index de lecture de l'image. Nous allons lire les images une à une. Les images seront indexées de 0 à N-1, si on a N images. idx correspond à l'index de l'image en cours d'affichage
  • nbre_image : le nombre total d'images dans le cadre.


Principe du script :

Au départ, on lit le nombre total d'image, on initialise idx à 0. on affiche l'image d'indice 0.
Puis on lance le timer.

Lorsque l'évènement timer se déclenche, on avance idx de un cran.
Au lieu de vérifier si idx n'est pas trop grand, on utilise l'opérateur modulo %.
On affiche l'image.


Fonctions utilisées :


Le script :


float delay = 30.0;
integer idx;
integer nbre_image;


default
{

state_entry()
{
idx = 0;
nbre_image = llGetInventoryNumber(INVENTORY_TEXTURE);
llSetTexture(llGetInventoryName(INVENTORY_TEXTURE,idx), 0);
llSetTimerEvent(delay);
}

timer(){
idx++;
idx = idx % nbre_image ;
llSetTexture(llGetInventoryName(INVENTORY_TEXTURE,idx), 0);
}

}


Et voilà, l'étape une est terminée. Le script est perfectible : par exemple, je ne fais pas de test pour vérifier si il y a des images ou non dans le cadre. Ça serait une bonne chose de rajouter cette étape, c'est plus propre niveau développement.
Notons aussi que si on ajoute des images dans le cadre, elles ne seront pas affichées car le script a été initialisé sur un nombre max d'images qui n'est plus bon. Donc à chauqe fois que des images sont ajoutées, il faut réinitialiser le script. Le prochain tuto viendra modifier cela avec l'ajout d'un menu.


Aucun commentaire: