Rotation = omg... !

Répondre
Partager Rechercher
Bonjour à tous,
Il y a longtemps que je ne me suis plus promenée ici !!!
J'ai repris SL depuis quelques mois et abandonnée wow :-p
Enfin, voilà mon problème...

Je cherche à créer un HUD, évidement j'ai acheté une version (Full Perm) qui au final est juste "no modify" à 5k Ls et au final qui ne pourra pas agrémenter mon propre HUD vu que je ne peu pas le modifier !

Enfin, c'est peu être tout bête, mais je souhaite lancer une rotation par clic sur un prim lié au rootprim qui a pour effet la simple rotation de l'ensemble du HUD.

Par exemple, j'ai ce script qui est vraiment très chouette et je pourrait en faire quelque chose... Mais le problème c'est que je doit le mettre dans le rootprim, enfin c'est par un réel problème en sois mais partout ou je touche (cad les autres prims liés) me font tourner l’ensemble, hors je voudrais que l'on ne peu cliquer que sur un seul endroit (ici le rootprim):
On sait jamais qu'une âme charitable, aimant le défit souhaiterais m'aider:
Bien sur il s'agit ici qu'une simplicité dans le fait que le prim est le rootprim et non un prim lié au rootprim comme je l’espérait à la base... Mais si vous trouvez mieux, je suis preneuse !

Code PHP:

rotation rot_xyzq;
default
{
    
state_entry()
    {
        
vector xyz_angles = <0,0,180>; // This is to define a 1 degree change
        
vector angles_in_radians xyz_angles*DEG_TO_RAD// Change to Radians
        
rot_xyzq llEuler2Rot(angles_in_radians); // Change to a Rotation
    
}
 
    
touch_start(integer start_param)
    {
        
llSetLocalRot(llGetLocalRot()*rot_xyzq); //Do the Rotation...
 
    
}


Dernière modification par **Nyxia** ; 28/03/2015 à 18h33.
Bonsoir, remplace ton "touch_start, par
Code PHP:

touch_start(integer start_param)
    {
        if(
llDetectedLinkNumber(0) == 1)
        
llSetLocalRot(llGetLocalRot()*rot_xyzq); //Do the Rotation... 
    

ha bah oui, en fait j’étais en train de tester ce paramètre mais vu mon manque d’expérience et ma fainéantise de lire l’intégralité des fonctionnalités LL, il manquait toujours un petit quelque chose ! Merci Menthal
Si j'ai bien compris, tu veux faire tourner le hud dans son ensemble, quand on appuie sur un bouton. Mais tu ne veux pas que le bouton qui déclenche la rotation soit la prim racine.

Contraintes techniques :
- pour faire tourner un ensemble, c'est la prim racine qu'il faut faire tourner
- la fonction llSetLocalRot agit sur la prim qui contient le script
- si le script contenu dans une prim (par exemple la prim numero 5) doit faire tourner une autre prim (par exemple la numéro 1, c'est à dire la prim racine), il faut utiliser llSetLinkPrimitiveParamsFast(num,
[liste de parametres]). Le paramètre num permet alors de spécifier sur quelle prim on veut agir.

Au niveau de la sélection de l'action à accomplir :

- solution 1 :
l'ensemble (le hud) comporte plusieurs boutons, contenant un script avec un événement touch_start, c'est le script de la prim touchée qui reçoit l'événement.
Dans ce cas, chacun des scripts contient les instructions à accomplir quand on touche le bouton correspondant.
Je suppose que c'est ce que tu fais.
Dans ce cas là, pour faire tourner la racine (prim numéro 1), avec un script situé par exemple dans la prim numéro 5, il faut utiliser :
Code PHP:

    touch_start(integer start_param)
    {
    
llSetLinkPrimitiveParamsFast(1, [PRIM_ROT_LOCALllGetLocalRot()*rot_xyzq] );
   } 
- solution 2
Tu utilises un script unique pour tout le hud, que tu places dans la prim racine.
Dans ce cas, quelle que soit la prim touchée, le script reçoit l'information.
Pour choisir ce qu'il faut faire, il suffit de détecter le numéro de la prim touchée par
Code PHP:

llDetectedLinkNumber(0
comme le fait MentalOh dans le script qu'il a donné plus haut.

@MentalOh
Il y a plusieurs petits problèmes dans ton script. Entre autres :
- pour effectuer la rotation, tu vérifies si la prim touchée est la prim numéro 1 (c'est à dire la racine). Or, on veut justement déclencher en touchant une autre prim que la racine. Il faudrait donc remplacer la valeur "1" par celle du bouton.
- tu utilises llSetLocalRot , ce qui suppose que le script est dans la racine. Or, si Nyxia utilise effectivement d'autres scripts avec un touch_start dans les prims bouton, la seule solution pour déclencher le touch_start de ton script, est de cliquer sur la prim racine, qu'on veut éviter.


Ce que je te conseillerais, c'est d'opter pour la solution 2, un script unique dans la racine, plutôt que de trimballer un hud avec autant de scripts que de boutons.
Ca ressemblerait à ça :
Code PHP:

tourner()
{
    
vector xyz_angles = <0,0,180>; // This is to define a 1 degree change
    
vector angles_in_radians xyz_angles*DEG_TO_RAD// Change to Radians
    
rotation rot_xyzq llEuler2Rot(angles_in_radians); // Change to a Rotation
    
llSetLinkPrimitiveParamsFast(1, [PRIM_ROT_LOCALllGetLocalRot()*rot_xyzq] );
}


default
{
    
touch_start(integer n)
    {
    
integer linknum llDetectedLinkNumber(0);  // numero de la prim touchee
    
    
if (linknum == 2)
        
tourner();
    else if (
linknum == 3)
        {
        
//effectuer les actions associees au bouton numero 3
        
        
}
    else if (
linknum == 4)
        {
        
//effectuer les actions associees au bouton numero 4
        
        
}
    }

Après, il y a aussi la solution, à mon sens plus élégante, qui consiste à faire un hud avec une seule primitive, et une texture adéquate (les boutons étant dessinés sur la texture) et à détecter non pas le numéro de la prim touchée, mais à quel endroit on a touché le hud. Mais on s'éloigne du sujet.
Et bha dis donc, merci bcp pour votre aide les amis Finalement je me suis contentée de la première solution qui m'aller très bien ^^ c'est vraiment très gentil à vous !
Je vais aller essayer ton script Cats, merci pour ton temps et ta générosité
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés