6 septembre 2008

Cours d'initiation au langage LSL (I)

Ce cours se veut une introduction au langage de programation de SL : le LSL (Linden Script Langage).
Lorsque j'ai commencé à apprendre le LSL, il m'a été difficile de trouver des tutoriaux de base, où on vous prend par la main pour faire vos premiers pas. Les tutoriaux qui vont suivre répondent à ce besoin.

"Je veux m'y mettre, mais tout ce que je trouve suppose que je sache déjà comment faire, pffffff, c'est galère !!" Si vous êtes dans ce cas, ne bougez pas, ce qui va suivre est pour vous !!
Si vous avez les bases, ben, ça va pas vous aidez beaucoup !!!


I. Premier pas
_______________

Un script LSL est un texte écrit avec un langage spécifique et compréhensible par SL pour provoquer des actions en réaction à des évènements; Par exemple :

  • ouvrir une porte quand on clique dessus
  • dire bonjour quand on clique sur un objet
  • animer l'avatar quand il s'assoit sur une pose ball
  • déclencher un effet pyrotechnique (les zoulis effets particules que j'aime tant) lorsque j'ecris dans le chat : Hello Nounours, et qu'un flot de bulles de lumière se rue sur Nounours pour l'entourer)

Ici les evènements sont :
  • le clic sur un objet, l
  • e clic droit > sit,
  • écrire dans le chat une phrase convenue.
Les actions sont :
  • un objet se déplace (la porte),
  • un texte est écrit dans le chat,
  • une animation agit sur notre avatar,
  • des particules fusent à tout va !!

Il faut donc un objet, et dans cet objet, un script. Quand l'objet est "soumis" à un évènement particulier, il provoque l'exécution du script qu'il contient.

Si un objet est constitué de plusieurs éléments (prims, ou primitives, c'est à dire des éléments 3D de base dont l'assemblage formera un objet complet), chaque élément peut contenir un ou plusieurs scripts.

Pour débuter, nous allons donc créer un simple objet, et lui associer un script.



II. Création d'un cube
_____________________


Pour réaliser cette étape, il faut avoir le droit de créer là où on se trouve. Si ce n'est pas le cas, des sandbox (bac à sable) existent pour cela.

1) faire un clic droit sur le sol, choisir Créer. Un cube apparait sur le sol. Notre premier objet est là !! Bravo !!

2) clic droit > Edition : une fenêtre apparait qui nous permet de modifier et d'agir sur notre objet. Comme notre but n'est pas le build (la construction d'objet SL), dirigeons nous tout de suite vers l'onglet qui intéresse le scripteur fou : Content, le contenu.

3) cliquer sur new script : la fenêtre de l'editeur apparait, avec le contenu du script créé. Notons qu'il n'est pas vide. Sur cette fenêtre de l'editeur, notons la case Running qui est à cocher. Si elle ne l'est pas, le script est désactivé.

4) chercher la ligne

llSay(0, "Hello, avatar");

5) remplacer par :

llSay(0, "Bonjour O inestimable splendeur !!");


6) chercher la ligne :

llSay(0, "Touched: " (string)total_number);

7) remplacer par :

llSay(0, "Vous venez de me toucher, O inestimable splendeur !!");

6) cliquer sur enregistrer. Si tout se passe bien, un petit message vous dit que la "compilation" s'est déroulée sans problème et que votre script ne contient donc pas d'erreur de langage.

7) fermer la fenêtre de l'éditeur de script, et celle de la boite d'edition de l'objet.


Nous avons là un cube contenant un script. Faisons un clic sur le cube. il nous parle dans le chat et nous dit : Vous venez de me toucher, O inestimable splendeur !!

Vous venez de réaliser votre premier script LSL !! Bravo !! Toutes mes félicitations !!

Rééditons l'objet et réouvrons le script pour l'étudier un peu et comprendre son fonctionnement.



III. Composition d'un script
____________________

Observons le contenu de notre script :


default
{
  state_entry()
   {
     llSay(0, "Bonjour O inestimable splendeur !!");
   }

   touch_start(integer total_number)
   {
     llSay(0, "Vous venez de me toucher, O inestimable splendeur !!");
   }
}


Ce script est composé d'un état nommé default, et il contient 2 évènements : state_entry et touch_start.


1) Qu'est-ce donc qu'un état M'dame ??

Je vous remercie de me poser la question. Un état est la situation dans lequel se trouve le script. Par exemple, une porte peut avoir deux états : ouverte ou fermée, un feu de circulation trois états : rouge, vert, orange.

Un script peut contenir plusieurs états, mais un seul état est actif à la fois. De même, il doit contenir un état default, qui est l'état dans lequel se trouve le script lorsqu'on le lance (la petite case running).

Si un script contient d'autres états, chacun devra avoir un nom distinct et devra commencer par le mot clé state, suivi du nom de l'état.


2) Et les évènements ?? Dites, hein M'dame ??

Un évènement est quelque chose qui va déclencher une action. Ici nous avons deux évènements.

state_entry est l'évènement qui est appelé lorsque l'on entre dans l'etat. A chaque fois que l'on entrera dans l'état, cet évènement sera appelé. Son action est : llSay(0, "Bonjour O inestimable splendeur !!"); ce qui provoque l'affichage du message : "Bonjour O inestimable splendeur !!" dans le chat.

L'évènement touch_start est appelé lorsque quelqu'un touche le cube, et cela à chaque fois qu'on le fera. Son action fera apparaitre dans le chat la petite phrase : "Vous venez de me toucher, O inestimable splendeur !!".

Un état doit toujours contenir au moins un évènement, sinon il ne sert à rien. De même qu'un script doit toujours contenir au moins un état.


3) llSay ???? C'est quoi ce truc ??

Un évènement doit toujours contenir l'appel à une fonction, sinon, one more time, il ne sert à rien, ne fait rien.
Bien sur, il peut contenir des appels à plusieurs fonctions, nous verrons ca plus tard.

Une fonction possède un nom, et des paramètres, c'est à dire des informations qu'on lui donne pour qu'elle travaille dessus.
Il existe deux types de fonctions : celles que l'on écrit soi même avec ses tites mains, et celles du langage LSL. On reconnait ces dernières car elles commencent toujours par ll.

Ici, la fonction appelée est llSay. On doit lui donner deux paramètres.

  • 0 : correspond au canal sur lequel doit être diffusé le message. Le canal 0 est celui du chat.
  • "Bonjour O inestimable splendeur !!" : le texte qui doit être écrit sur le canal 0. On remarque qu'il est ecrit entre "...". On appelle cela une chaine de caractères, ou encore une string (sans aucun rapport avec la ficelle coupe-crotte très à la mode).
L'appel à la fonction se termine par ; pour indiquer qu'on a terminé notre instruction.
Les paramètres sont écrit entre parenthèses.

Remarquons aussi que notre fonction est mise entre accolades : elles servent a définir le bloc d'instructions de l'évènement.
De manière général, les accolades serviront à délimiter un bloc.

Pour résumer, voici le squelette général d'un script :



state etat1 {

   evenement1(){
     fonction1();
     fonction2();
   }

   evenement2(){
     fonction3();
     fonction4();
   }

}


Et il peut y avoir, bien sur, plusieurs états........
Faire très attention à la ponctuation (; à la fin d'une instruction), aux majuscules : llsay et llSay sont deux choses différentes, le compilateur y est sensible. De même, si on ouvre une parenthèse, il ne faut pas oublier de la fermer.


Voila, c'est tout pour aujourd'hui. Cette première introduction au LSL est finie. Elle se veut simple, pour poser les bases du scripting.
Ah que n'ais-je eu cela lorsque j'ai commencé !!!

1 commentaire:

Anonyme a dit…

Merci !!
ça aide bien ton tuto !