// Dans cet exemple le siège est le cube de base de 0.5 de côté // On va assoir l'avatar dans la position du motard heureux
// Coordonnées de l'assise de l'avatar ; correspondrait à // l'emplacement précis des fesses de l'avatar ; // les valeurs sont en mètres et fractions de mètres // les nombres négatifs sont admis float fHauteur = 0.50; // à modifier si l'avatar lévite au-dessus du cube ou à le derrière à l'intérieur du cube float fLateral = 0.0; // à modifier si l'avatar est trop à droite ou à gauche float fProfondeur = 0.4; // à modifier si l'avatar est trop en avant ou en arrière // Toujours les coordonnées, mais maintenant l'orientation ; // les valeurs sont en degrès et fraction de degrès (on pourrait utiliser // les minutes et secondes, mais c'est plus compliqué) ; une astuce permet de // convertir les degrès en radian, voir l'instruction qui utilisent ces variables float fAxeX = 0.0; // Axe passant par la taille d'un avatar debout d'avant en arrière float fAxeY = 0.0; // Axe passant par la taille d'un avatar debout de droite à gauche float fAxeZ = 0.0; // Axe passant verticalement à travers le corps d'un avatar debout
key kAgentAssis; //mémosise la clé unique de l'avatar qui s'est assis vector vDebout = <0.0, 0.5, 1.0>; // pour que l'avatar, une fois debout, ne reste pas sur le cube default { state_entry() { // C'est cette instruction qui change le mot Sit dans le camembert qui apparaît lorsque // on clique avec le bouton droit sur l'objet llSetSitText("Assis!"); // C'est cette instruction qui indique à l'objet comment assoir l'avatar // DEG_TO_RAD permet de convertir les degrès en radian ; le fait que * * DEG_TO_RAD est // à l'extérieur du vecteur veut dire qu'il s'applique à chaque valeur du vecteur ; on // aurait aussi pu écrire : // llSitTarget(<Profondeur, fLateral, fHauteur>, llEuler2Rot(<fAxeZ * DEG_TO_RAD, fAxeY * DEG_TO_RAD, fAxeX * DEG_TO_RAD>)); llSitTarget(<fProfondeur, fLateral, fHauteur>, llEuler2Rot(<fAxeZ, fAxeY, fAxeX> * DEG_TO_RAD)); }
// Evènement "changed" : est déclenché lorsque l'avatar s'assoit ou se lève changed(integer iChange) { if (iChange & CHANGED_LINK) { // Quelqu'un s'est assis ou levé, on relève sa clé unique key kAgent = llAvatarOnSitTarget(); // * Si cette clé existe c'est qu'un avatar s'est assis if (kAgent) { //**Permissions : C'est la base du système de sécurité Linden // On ne peut appliquer une animation sans l'accord de l'avatar // Si l'avatar est le propriétaire du script, on ne demande pas la permission // Il existe d'autres permissions dont l'une concerne l'argent llRequestPermissions(kAgent, PERMISSION_TRIGGER_ANIMATION); // demande de la permission // On mémorise la clé unique de l'agent pour s'en servir lorsqu'il se lève kAgentAssis = kAgent; } // * Si cette clé n'existe pas c'est que personne n'est assis // on en coclut que l'avatar s'est levé else { // On arrête l'animation pour que l'avatar se redresse // On ne demande pas la permission, c'est censé avoir été fait en l'asseyant llStopAnimation("motorcycle_sit"); // Voilà une instruction intéressante // On arrête l'exécution du script pendant un temps en seconde(s) // Cela permet à l'animation de se terminer avant d'appliquer l'instruction suivante llSleep(1.0); // On pousse (déplace) l'avatar pour qu'il ne reste pas // planté sur le cube ; ceci ne fonctionne pas toujours, dans ou le Push // peut être interdit sur le terrain où est posé le cube llPushObject(kAgentAssis, vDebout, <0,0,0>, TRUE); // et on attend que le déplacement ait eu lieu avant de passer à la suite llSleep(1.0); } }
} // ** Permission (suite) : cet évènement est déclenché quand la demande // de permission a reçu une réponse run_time_permissions(integer iPerm) { // On assoit l'avatar si la demande est acceptée ; // si elle a été refusée, forcer l'animation donne lieu à une erreur if (iPerm) { // Voici comment appliquer une animation ) l'avatar // "motorcycle_sit" est une animation connue par Linden // Si vous voulez y mettre votre propre animation, changer le nom // dans les 2 endroits du script ; ET N'OUBLIEZ PAS DE RECOPIER // L'ANIMATION DANS LE CUBE (au même endroit que ce script) llStartAnimation("motorcycle_sit"); } } }
|