Introduction

LSL est le Linden Scripting Language. C’est la langue dans laquelle tous les scripts de Second Life sont écrits. La structure de LSL est largement basée sur Java et C. Un script dans Second Life est un ensemble d’instructions qui peuvent être placées à l’intérieur de n’importe quel objet primitif du simulateur. Les scripts LSL sont compilés en bytecode Mono, puis exécutés directement depuis les serveurs de la plateforme.

Dans ces deux éxemples ci-dessous, nous allons brièvement explorer les principales applications de ce langage.

Communication

integer globallistener;

integer fact(integer n)
{
    if (n>=1)
    {
        return (n*fact(n-1));
    }
    else
    {
        return 1;
    }   
}

default
{
    state_entry()
    {
        //Création de l'observable
        globallistener = llListen(0, "", llGetOwner(), "");
    }

    //Observateur
    listen(integer channel, string name, key id, string message)
    {
        llSay(0,message + " factorial = " + (string)fact((integer)message));   
    }
}

Dans cet éxemple, nous pouvons noter que la communication avec les programmes s’effectue via des observateurs/observables. Ici, nous ouvrons une communication sur le canal 0 du simulateur, et nous prendrons pour cible le joueur propriétaire de l’objet.

Une fois le programme initialisé, il ne reste plus qu’a lui donner un nombre pour qu’il nous communique la réponse via ce meme canal de communication (ici, la factorielle d’un nombre n, calculé par récursion).

Les programmes peuvent aussi communiquer entre eux, via les canaux du simulateur, des canaux interne aux instances d’objets ou via HTTP.

Interaction 3D

cnam_randomizer(vector pos)
{
    //Tout d'abord, nous allons déterminer notre magnitude négative ou positive,
    //puis appliquer une fonction pour recalculer la position au hasard sur chaque axe
    //de notre vecteur pos. Enfin nous appliquons cette nouvelle position a l'objet.
    float rand = 0.33;
    if(llFrand(1.0)<0.5) rand = rand -= (rand*2);
    
    pos.x = pos.x + llFrand(rand);
    pos.y = pos.y + llFrand(rand);
    pos.z = pos.z + llFrand(rand);
    
    llSetPos(pos);  
}

default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        //Un clic souris envoie la position locale de l'objet a notre fonction.
        cnam_randomizer(llGetLocalPos());
    }
}

Cette fois ci, nous allons nous aider d’un observateur pour changer la position de ce cube. A chaque clic effectué sur l’objet, une fonction va calculer une nouvelle position au hasard et la lui attribuer.

Grace aux nombreuses fonctions internes de LSL, il est donc possible de localiser et manipuler les objets dans l’espace.

Ces fonctions permettent aussi de changer leur attributs physique et visuels. Couplées aux fonctions de communication, cela nous permet de créer des interfaces afin d’automatiser ou de simplifier ces altérations pour l’utilisateur final.