[aide]encore une histoire de rotation

Répondre
Partager Rechercher
voila mon problème,
j'ai une barrière qui s ouvre, elle bascule de 90 degrés vers le haut comme une barrière de péage, jusque la tout va bien, mais malheureusement si je rez cette barrière avec un angle diffèrent, la barrière s'obstine a s ouvrir comme si elle était dans l angle original
apparemment ce n est pas simple

AU SECOUUUUUUUUUUR

Code PHP:

// Valeur relevées
vector vOuverture = <270.0,0.0,180.0>;
vector vFermeture = <0.0,0.0,180.0>;
rotation convert_rotation(vector v)
{
    return 
llEuler2Rot(DEG_TO_RAD);
}
default
{
    
state_entry()
    {
        
llListen(-101""NULL_KEY"");
    }
    
listen(integer astring nkey idstring m)
    {
        if (
== "ouvre la porte")
        {
            
llSetLocalRot(convert_rotation(vOuverture));
        }
        if (
== "ferme la porte")
        {
            
llSetLocalRot(convert_rotation(vFermeture));
        }
    }

si tu applique une rotation à ton objet, ton script doit prendre en compte la rotation de l'objet.
Pour ca tu mulplies par la rotation de l'objet

grosso modo ca donne ca
llSetLocalRot(convert_rotation(vOuverture)*llGetRot())

Fais gaffe parcontre que ta barrière soit pas le prim maitre.
[aide]Ca ne marche pas vraiment
a la base la barriere est une seule prime rectangulare reliée a rien
elle est raisée dans une boite rezz et donc peut etre deraisée n importe ou
Comment faire pour qu elle s ouvre toujour de la meme maniere ou que ce soit ?
voila le script qui marche
voila le script qui marche, j'ai passé les set en local mais il doit être réinitialisé a chaque rez, en effet la variable pos_bas capture la rotation actuel et sert a remettre la barriere en position bas
que dois je utiliser comme fonction en cas de déplacement
en effet une fois que la boite rez a fait apparaître la maison, on peut réajuster la position, avec quel fonction, le scripte peut faire un reset ?

Code PHP:

// Valeur relevées
vector vOuverture = <-270.0,0.0,0.0>;//decalage en degrer demander
rotation pos_Fermer;//definition de la variable pos_fermer, 
rotation convert_rotation(vector v)//definition de la fonction convert_rotation
{
    return 
llEuler2Rot(DEG_TO_RAD);
}
default
{
    
state_entry()
    {   
pos_Fermer=llGetLocalRot();//memorisation de la rotation au rez
        
llListen(-101""NULL_KEY"");mise en route d une "ecoute"
    
}
    
listen(integer astring nkey idstring m)
    {
        if (
== "ouvre la porte")
        {
            
llSetLocalRot(convert_rotation(vOuverture)*llGetLocalRot());
 
        }
        if (
== "ferme la porte")
        {
            
llSetLocalRot(pos_Fermer);//remet en place, la rotation originale
 
        
}
    }

Comme ça, pas besoin de reset, et en plus, après le rez tu as le temps de positionner ta barrière comme tu veux.

Code:
// Valeur relevées
vector vOuverture = <-270.0,0.0,0.0>;//decalage en degrer demander
rotation pos_Fermer;//definition de la variable pos_fermer, 

rotation convert_rotation(vector v)//definition de la fonction convert_rotation
{
    return llEuler2Rot(v * DEG_TO_RAD);
}

default
{
    state_entry()
    {
         llListen(-101, "", NULL_KEY, "");mise en route d une "ecoute"
    }

    listen(integer a, string n, key id, string m)
    {
        if (m == "ouvre la porte")
        {
             pos_Fermer=llGetLocalRot();//memorisation de la rotation au rez
             llSetLocalRot(convert_rotation(vOuverture)*llGetLocalRot());
        }
        else if (m == "ferme la porte")
        {
            llSetLocalRot(pos_Fermer);//remet en place, la rotation originale
 
        }
    }
}  
Citation :
Publié par Dave1000 winkler
quand a toi magic, merci aussi même si la pédagogie, ce n'est pas ton fort:
ah ouais

Tu te feras sans doute confirmer ca par le bon millier d'élève que j'ai eu à mes cours de script

Sinon y a un encore un petit soucis dans le script, pas pour rien que je choisis llGetRot() et pas llGetlocalRot()

/me part en sifflotant
Citation :
Publié par Magic Cat
Sinon y a un encore un petit soucis dans le script, pas pour rien que je choisis llGetRot() et pas llGetlocalRot()

/me part en sifflotant
Etant donné ce qui a été dit précédemment :
Citation :
Publié par Dave1000 winkler
a la base la barriere est une seule prime rectangulare reliée a rien
Dans ce cas, llGetLocalRot() renvoie la même chose que llGetRot()
Citation :
If this is called on the root (parent) object, or an unlinked object, this returns llGetRot() instead.
Répondre

Connectés sur ce fil

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