[Recherche] Prim coulissante

Répondre
Partager Rechercher
Bonjour à tous,

Je n'arrive pas à mettre la main sur ce script qui doit être très commun, je pense qui consiste à déplacer une prim en hauteur, un peu comme un rideau de devanture de magasin.

En fait il suffirait d'un clic pour passer de la situation suivante :

Z = n ==> Z = n+1

Et un second clic pour revenir en arrière...

Merci, si vous avez cela en magasin de le partager avec moi, ce serait super sympa !
Un truc simple comme ça (non compilé) ?

Code:
integer on;

default
{
   state_entry()
  {
      on = FALSE;
  }

  touch_start(integer p)
  {
       on != on;
       if (on) Situation1();
       else Situation2();
  }
}
Script très commun mais pas forcément précisément adapté à ton cas. Je m'explique : le code sera différent si ta porte est liée au reste ou pas. D'autre part il y a un petit problème avec ces objets à deux positions sur SL : en cas de réinitialisation du script tu n'es pas sûre que ta porte ne sera pas décalée en confondant les positions, ce dont tu te rendras compte au bout d'un certain temps en te demandant ce qu'il s'est passé. Autrement dit il faut un repère fiable pour caractériser la position de base du script. Le plus simple est évidemment de le coder "en dur" au niveau du script, il suffit alors de tester la position de la porte et ainsi la faire bouger sans se tromper dans la position opposée. Donc tu vois ce qui est commun n'est pas forcément évident.
Bigre...

Il s'agit bien d'une prim destinée à être intégrée dans un ensemble plus gros que je reze ponctuellement en plus.
Donc ça risque de pas bien se passer ?

As-tu une suggestion ?
C'est mon jour de bonté, voici un script qui couvre tous les cas, tant qu'à faire que ça serve à d'autres :

Code:
// Paramètres
float zHaut = 44.0;
float zBas = 42.25;
// Routines
vector Global2Local(vector position)
{
    return (position - llGetRootPosition()) / llGetRootRotation();
}
// Etat unique
default
{
    touch_start(integer total_number)
    {
        vector v = llGetPos();
        if(llGetLinkNumber() > 1)
        {
            if(v.z == zBas)
                llSetPos(Global2Local(<v.x, v.y, zHaut>));
            else
                llSetPos(Global2Local(<v.x, v.y, zBas>));
        }
        else
        {
            if(v.z == zBas)
                llSetPos(<v.x, v.y, zHaut>);
            else
                llSetPos(<v.x, v.y, zBas>);
        }
    }
}
Il nécessite une phase de paramétrage au niveau des variables zHaut et zBas. Il suffit de positionner la porte en position basse et de récupérer la valeur de Z dans la fenêtre d'édition et de la reporter à la place de la valeur 42.25 que j'ai entrée. Il faut faire la même chose avec la position haute et la variable zHaut.

Le script fonctionne que la porte soit liée ou pas, enfant ou parent. Evidemment pour une prim parent c'est tout l'ensemble qui va bouger .

Ensuite, comme les valeurs sont entrée "en dur" dans le code pas de souci, sauf si la prim est bougée par la suite en coordonnées globales, auquel cas il faut reprendre le paramétrage.

Il existe pas mal de possibilités pour réaliser la même chose, j'ai essayé de rester simple et didactique.
Citation :
Publié par Tasia
Bigre...
... ensemble plus gros que je reze ponctuellement en plus.
Bon évidemment tu me trouves un cas où ça va pas marcher parce que chaque fois que tu rezzes ton ensemble les coordonnées globales vont être différentes.

Tu vas procéder en 2 étapes. Au départ tu mets ce script dans ta porte :

Code:
default
{
    touch_start(integer total_number)
    {
        vector v = llGetLocalPos();
        llOwnerSay((string)v.z);
    }
}
Tu positionnes ta porte en haut et tu cliques dessus. Tu notes la valeur donnée dans le Chat.

Tu positionnes ta porte en bas et tu cliques dessus. Tu notes la valeur donnée dans le Chat.

Tu supprimes le premier script et tu entres celui-là :

Code:
// Paramètres
float zHaut = 1.64;
float zBas = .393188;
// Etat unique
default
{
    touch_start(integer total_number)
    {
        vector v = llGetLocalPos();
        if(v.z == zBas)
            llSetPos(<v.x, v.y, zHaut>);
        else
            llSetPos(<v.x, v.y, zBas>);
    }
}
Tu changes les paramètres zHaut et zBas avec les valeurs que tu as notées juste avant. Ta porte est prête et fonctionnera où que tu mettes ton ensemble.
Momo tu es le best

merci pour la peine que tu t'es donné. Je n'ai pas le temps ce soir, mais j'essaierai demain de faire fonctionner le script et je te tiendrai au courant....

Vraiment sympa de ta part ! merci encore !

Génial ça marche ! ! ! !

Mille mercis...

J'avais eu peur à un moment parce que c'est un élément d'une skybox et si les coordonnées "Z" sont à trop hautes altitudes cela ne marche pas...

mais j'ai réussi finalement !

Merci encore, Momo !
Bonsoir,

Je ressuscite ce vieux post, mais j'avais voulu réutiliser le dernier script de Momo, et rien à faire ! impossible de faire fonctionner la porte, alors qu'avant tout allait bien. Est-ce que la grammaire des scripts a changé depuis cette époque ?

En fait je peux faire bouger la prim comme prévu, mais le script cesse de fonctionner dès lors que je lie la prim coulissante au reste de l'objet...

Merci de votre aide, je suis complètement désemparée là
Citation :
Publié par bestmomo
Est-ce que tu lies la porte avant ou après la mise en place du script ?
Alors le problème, c'est que si je lie la prim avant, en mettant le premier script qui me donne la valeur Z, j'obtient systématiquement un résultat farfelu : -1,87....

Si la prim n'est pas liée, j'obtiens en revanche la bonne valeur, mais une fois le script programmé et la prim liée, ça ne marche plus.
Citation :
Publié par Tasia
Alors le problème, c'est que si je lie la prim avant, en
mettant le premier script qui me donne la valeur Z, j'obtiens systématiquement un résultat farfelu : -1,87....
La valeur obtenue dans le cas ou la prim est liée est la position relative. Donc le genre de valeur -1.87 n'a rien de farfelu. Le deuxième script positionne correctement la prim liée. Tu dois faire une manipulation erronée mais laquelle?
Bon, alors j'ai résolu une partie du problème.

J'ai constaté que j'arrivais à activer le script (ouvrir/fermer) si mes valeurs Z sont inférieures à 10 (pourquoi ). Donc en buildant sous l'eau ça va mieux...

Ainsi, j'arrive à avoir ma porte liée mobile.

Le problème, c'est qu'elle remonte systématiquement bien au dessus de l'emplacement que je lui ai déterminé (4 mètres environ), et coulisse de la sorte entre "hauteur porte fermé +4" et "hauteur porte ouverte +4".

Je n'y comprends rien !

D'après toi, il faut utiliser le premier script porte liée ou pas liée ?
Répondre

Connectés sur ce fil

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