Difference between revisions of "LlDetectedRot/fr"

From Second Life Wiki
Jump to navigation Jump to search
(proofread)
(Remove reference to blanked page)
 
(6 intermediate revisions by one other user not shown)
Line 12: Line 12:
|examples=
|examples=
<lsl>
<lsl>
//--// renvoie la direction de l'avatar touchant l'objet (comme un compas)//--//
// Renvoie la direction de l'avatar touchant l'objet (comme une boussole)


//-- @@ = avec des optimisations du code, cf page suivante:
// liste des points cardinaux démarrant à l'Ouest et allant dans le sens inverse des aiguilles d'une montre
//-- wiki.secondlife.com/wiki/User:Void_Singer/Optimizations
list pointsCardinaux = [ "à l'Ouest", "au Sud-Ouest", "au Sud", "au Sud-Est", "à l'Est", "au Nord-Est", "au Nord", "au Nord-Ouest" ];


  //-- list des points cardinaux démarrant aprés l'ouest et allant dans le sens inverse des aiguilles d'une montre
  // convertit la rotation selon selon l'axe des z
list gLstCompassPoints = ["Sud Ouest","Sud","Sud Est","Est","Nord Est","Nord","Nord ouest"];
string directionBoussole( rotation rotationDepart )
{
  // convertit la rotation en degrés
  vector vecteurRotation = llRot2Euler( rotationDepart ) * RAD_TO_DEG;
 
  // ramène dans l'intervalle [0, 360]
  integer direction = ((integer) (vecteurRotation.z + 202.5)) % 360;


//-- converti la rotation selon selon l'axe z
  // convertit en texte
string vfCompassDirection( rotation vRotBase )
   return llList2String( pointsCardinaux, direction / 45 );
{
  //-- converti la rotation en dégrés
  vector vVecBase = llRot2Euler( vRotBase ) * RAD_TO_DEG;
  //-- converti dans le périmètre [0, 360)
  vVecBase.z += 180;
  if ( vVecBase.z < 22.5 || vVecBase.z > 337.5)
  {
    return "Ouest";
   }
  else
  {
    //--décalage
    vVecBase.z -= 22.5;
    //-- divisé par l'écart (45 deg) et arrondi pour obtenir l'index de la direction
    return llList2String( gLstCompassPoints, llRound( vVecBase.z - 11.25 ) / 45 );
  }
}
}


default{
default
{
   state_entry()
   state_entry()
   {
   {
     llSay( 0, "Touchez moi pour obtenir votre direction" );
     llSay( 0, "Touchez-moi pour obtenir votre direction" );
   }
   }


   touch_start( integer vIntTouchCount )
   touch_start( integer nombreTouche )
   {
   {
     integer vIntCounter = 0;
     integer numeroTouche = 0;
     do
     do
     {
     {
       llSay( 0,
       llSay( 0,
             llDetectedName( vIntCounter )
             llDetectedName( numeroTouche )
             + " fait face "
             + " fait face "
               //-- la ligne suivante récupère la rotation de l'avatar et la converti en point cardinal
               // la ligne suivante récupère la rotation de l'avatar et la convertit en point cardinal
             + vfCompassDirection( llDetectedRot( vIntCounter ) ) );
             + directionBoussole( llDetectedRot( numeroTouche) ) );
     }while ( ++vIntCounter < vIntTouchCount ); //-- @@
     } while ( ++numeroTouche < nombreTouche );  
   }
   }
}
}

Latest revision as of 05:14, 24 January 2013

Description

Fonction: rotation llDetectedRot( integer numéro );

Renvoie un rotation correspondant à la rotation de l'objet ou de l'avatar détecté identifié par son numéro.

• integer numéro Index des informations de détection

numéro n'accepte pas les index négatifs.
Renvoie <0.0, 0.0, 0.0, 1.0> si le numéro n'est pas un avatar ou un objet détecté valide.

Spécifications

Les fonctions llDetected* peuvent être appellées depuis n'importe quel évènement, mais elles ne renverront de valeurs différentes de leur valeur standard que lorsqu'elles sont appellées depuis un évènement de Détection.

Avertissements

  • Les évènement activant les fonctions llDetected* renvoyent toujours au moins un élément détecté.
    • Les évènements de Détection ne sont pas déclenchés s'il n'y a rien à détecter (sauf pour no_sensor mais il n'active pas les fonctions llDetected*).
    • Le compteur de l'évènement de Détection n'est jamais, initialement, en dessous de 1.

Exemples

<lsl> // Renvoie la direction de l'avatar touchant l'objet (comme une boussole)

// liste des points cardinaux démarrant à l'Ouest et allant dans le sens inverse des aiguilles d'une montre

list pointsCardinaux = [ "à l'Ouest", "au Sud-Ouest", "au Sud", "au Sud-Est", "à l'Est", "au Nord-Est", "au Nord", "au Nord-Ouest" ];

// convertit la rotation selon selon l'axe des z

string directionBoussole( rotation rotationDepart ) {

 // convertit la rotation en degrés
 vector vecteurRotation = llRot2Euler( rotationDepart ) * RAD_TO_DEG;
 
 // ramène dans l'intervalle [0, 360]
 integer direction = ((integer) (vecteurRotation.z + 202.5)) % 360;
 // convertit en texte
 return llList2String( pointsCardinaux, direction / 45 );

}

default {

 state_entry()
 {
   llSay( 0, "Touchez-moi pour obtenir votre direction" );
 }
 touch_start( integer nombreTouche )
 {
   integer numeroTouche = 0;
   do
   {
     llSay( 0,
            llDetectedName( numeroTouche )
            + " fait face "
             // la ligne suivante récupère la rotation de l'avatar et la convertit en point cardinal
            + directionBoussole( llDetectedRot( numeroTouche) ) );
   } while ( ++numeroTouche < nombreTouche ); 
 }

} </lsl>

Voir également

Articles

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