LlSitTarget/fr

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Description

Fonction: llSitTarget( vector offset, rotation rot );

Permet de définir un point d'assise sur une prim (l'endroit ou va s'assoir l'avatar).

• vector offset Décalage du point d'assise dans le repére local de la prim
• rotation rot Rotation du point d'assise dans le repére local de la prim

Utiliser offset = <0.0, 0.0, 0.0> pour supprimer le point d'assise.

Avertissements

  • Si le point d'assise n'existe pas ou a été supprimé llAvatarOnSitTarget renvera toujours NULL_KEY.
  • Il n'est pas possible de s'assoir sur un attachement.
  • llSitTarget ne met pas a jour la position d'un avatar déjà assis.
    • La fonction UpdateSitTarget présentée dans les extraits de code utile permet de contourner ce problème car un agent assis apparaît comme étant lié a l'objet. Sa position peut donc être mise à jour en utilisant llSetLinkPrimitiveParams.

Exemples

<lsl>default {

   state_entry()
   {
       llSitTarget(<0.0, 0.0, 1.0>, ZERO_ROTATION); // Tous les composants du vecteur ne doivent pas être mis à 0 pour être pris en compte.
   }

}</lsl>

Codes utiles

Mise à jour de la position assise

<lsl>// Règle et met à jour l'emplacement de la position assise (en déplaçant l'avatar si nécessaire). UpdateSitTarget(vector pos, rotation rot) {

   llSitTarget(pos, rot); // Configure la position
   key user = llAvatarOnSitTarget();
   if(user) // Vrai si un avatar est assis sur l'objet.
   {
       vector size = llGetAgentSize(user);
       if(size) // Cet élément réalise un test pour s'assurer que l'avatar existe.
       {
           // Nous avons besoin de la position et de la rotation locale de la prim.
           rotation localrot = ZERO_ROTATION;
           vector localpos = ZERO_VECTOR;
           if(llGetLinkNumber() > 1) // On a besoin de la rotation locale si la prim n'est pas la racine.
           {
               localrot = llGetLocalRot();
               localpos = llGetLocalPos();
           }
           pos.z += 0.4;
           integer linkNum = llGetNumberOfPrims();
           do{
               if(user == llGetLinkKey( linkNum )) // On vérifie que l'index est valide.
               {
                   llSetLinkPrimitiveParams(linkNum,
                                           [PRIM_POSITION, ((pos - (llRot2Up(rot) * size.z * 0.02638)) * localrot) + localpos,
                                            PRIM_ROTATION, rot * localrot / llGetRootRotation()]);
                   jump end; // Simple, mais plus lent qu'un return
               }
           }while( --linkNum );
       }
       else
       { // Il est rare que ce cas se présente, mais ce bloc permet éventuellement de le corriger.
           llUnSit(user);
       }
   }
   @end;

} // Écrit par Strife Onizuka, l'ajustement relatif à la taille a été proposé par Escort DeFarge</lsl>

Obtenir les donnnées de la position assise

<lsl>list GetSitTarget(integer prim, key av) {// ATTENTION : llGetObjectDetails() peut générer une erreur à partir de la 5ème décimale :

// il est peu probable que cela soit jamais remarqué, sauf si l'erreur se cumule au fil du temps.
// Ne pas utiliser en mouvement, pas exemple dans un véhicule qui se déplace.
   vector tp = llGetAgentSize(av);
   if(tp)
   {
       if(prim == LINK_THIS) // La fonction llGetLinkKey n'apprécie pas la donnée LINK_THIS
           prim = llGetLinkNumber();
       
       list details = [OBJECT_POS, OBJECT_ROT];
       rotation f = llList2Rot(details = (llGetObjectDetails(llGetLinkKey(prim), details) + llGetObjectDetails(av, details)), 1);
       rotation r = llList2Rot(details, 3) / f;
       return [((llList2Vector(details, 2) - llList2Vector(details, 0)) / f) + (llRot2Up(r) * tp.z * 0.02638) - <0.0, 0.0, 0.4>, r];
   }
   return [];

}// Écrit by Strife Onizuka</lsl>

Voir également

Évènement

•  changed

Fonctions

•  llSetSitText
•  llAvatarOnSitTarget
•  llUnSit
Vous cherchez encore des informations ? Peut-être cette page du LSLwiki pourra vous renseigner.