vendredi 28 décembre 2007

llGetRot

La notion d'aujourd'hui est très compliqué, c'est pourquoi nous ne ferons que la survolée pour le revoir plus en profondeur plus tard.
llGetRot nous donne la rotation d'un objet sous forme d'un vecteur. Vous avez pu le constater que lorsque l'on change la position d'un prim, ca n'a pas le même effet si on a changé la rotation.
En effet le déplacement reste le même mais plus dans le sens de la rotation. Pour ceux qui ont des notions de trigonométrie, cela sera plus facile à comprendre.

tout le secret réside ici:
offset*=llGetRot();

ca pourrait déja s'ecrire offset=offset*llGetRot() mais on utilise généralement se raccourci d'ecriture
En faisant le produit entre la rotation(ou angle) et le vecteur de position on modifie la position en fonction de la rotation.
Intuitivement on peut se douter que la rotation doit rentrer en ligne de compte.
Pour l'instant admettez juste pos*rot prise compte de la rotation.


Notre script de porte a aussi une amélioration notable, on utilise un seul script pour les deux portes, il suffit juste de mettre -1 ou 1 dans la description

// defini un vecteur pour la position de l'objet
vector pos;
integer sens;
default
{
state_entry()
{
// fonction que l'on a déja vu qui recupère la description de l'objet
// la valeur de la description de l'objet sera -1 ou 1
// cette valeur permetra à le porte de s'ouvrir vers la gauche ou la droite
// en fonction de si il s'agit d'une porte de gauche ou de droite
// (integer) permet de transformer en entier le string en provenance de la description
sens=(integer)llGetObjectDesc();
}

touch_start(integer total_number)
{
vector size;
// float est un nombre décimal(a virgule)
float largeur;

// sauvegarde la position initiale
pos=llGetPos();

// recupère les dimension de l'objet
size=llGetScale();
largeur=size.y;

// on appelle un offset la différence de distance entre deux point
// en multipliant par le sens notre porte ira vers la gauche ou la droite
vector offset=<0,sens*largeur,0>;

// la fonction du jour
offset*=llGetRot();

// on ajoute l'offset à la porte pour la déplacer
llSetPos(pos+offset);


// delenchera l'evenement timer dans 20 secondes
llSetTimerEvent(20);
}
timer()
{
//remet en place l'objet
llSetPos(pos);

//empêche le déclenchement de l'evenement timer
llSetTimerEvent(0);
}
}

Aucun commentaire: