Aller au contenu


Porte Des Etoiles Qui "tourne"


  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 gray wolf

gray wolf

Posté 10 octobre 2005 - 19:18

ben justement voila le truc qui coince : je dispose ici d'une porte des etoiles toutes neuves que j'ai déballée tout sourire de sa boite en carton,après avoir soudoyé le vendeur de ne pas me vendre l'e2pz qui va avec.... euh non je me gourre de texte là.... :?:

je dispose donc d'une Porte,d'un DHD(le clavier pour ceux qui savent pas  :shock:  ),et de l'environnement qui va avec.... donc je désire créer une planète sans DHD...
et qu'on fasse fonctionner la Porte sans DHD,en faisant tourner l'anneau... donc j'ai imaginé un script :

une fois qu'on a poussé le levier de démarage,l'anneau commence à tourner,et en permanence.... or sur le coté on dispose de 39 touches(petites sinon ca cera galère...) qui dira au script de l'anneau à quelle valeur s'arrêter,et ce chronométré pil poil,: imaginons que l'on veut composer une adresse de porte qui comportera le symbole 12,on appuie donc sur la touche 12.... donc une variable A vaut 12...or une variable B  indique le numéro du symbole qui passe sous le 7e chevron en temps réel pendant qu'il tourne....

mais dès que A sera égale a B,il faut faire stopper l'anneau,incrémenter de 1 le nombre de chevrons en cours, et incrémenter la variable qui indique la destination ,de la valeur de A(car en fait les valeurs des 7 chevrons choisis sont ajoutés dans cet ordre... ex: 12+24+1+3+9+4+100(origine) )

et c'est cà qui me coince... comment faire tourner l'anneau en pile syncrhonisation avec la variable qui indique en temps réel le numéro du symbole sous le 7e chevron???

a la base,c'est le numéro 0(le symbole d'origine) qui est sous le 7e chevron donc créer une variable a 0 sera pas un problème.... et il y a donc,en partant de 0,38 symboles différents... alors

EN GROS:

EXEMPLE:dès que le symbole 4(le symbole voulu) passe sous le 7e chevron, et dès qu'une variable globale qui incrémente au fer et a mesure de la rotation de l'anneau vaut 4 aussi,ALORS faire stopper l'anneau,jouer un zouli son d'enclenchement et allumer un chevron en plus(conformément a la série),et faire repartir l'anneau... une fois ce moment arrivé,le PJ doit appuyer sur une nouvelle touche afin de "dire" au script a quel symbole s'arreter et enclencher...

voila j'espere avoir été assez clair????? (les modérateurs peuvent me pendre.... )
*a décidé de ne plus mettre de signature pointant vers Rochmédia.*

#2 Fatalis

Fatalis

Posté 11 octobre 2005 - 17:00

elle ressemble à quoi ta porte? :beat:

#3 gray wolf

gray wolf

Posté 11 octobre 2005 - 18:20

physiquement ou techniquement?????

physiquement,c'est la même que celle du mod stargate Nueronuh....

techniquement,elle fonctionne de cette manière là: on va se mettre devant le DHD,on enclenche les 6 symboles voulus,et le 7e propre a la planète....
en fait,la variable qui indique la destination est incrémentée du numéro de la touche sur laquelle on appuie...
ca fait donc (exemple) 2-4-6-38-36-34-100(l'origine est toujours à 100)

mais comment,et surtout: COMMENNT se sert on des rotate ou rotateworld??? peut on faire pivoter l'anneau et en même temps incrémenter une variable qui doit être en parfaite synchronisation avec le numéro du symbole qui passe sous le 7e chevron?????

il faut tatonner?

PS: ma Porte est celle du mod SG-Nueronuh,alors pas de blague! c'est juste un mod perso après tout...

Posted Image
voila le principe de la variable et de l'anneau(vive Dialsimulator!!!)

et la porte,physiquement,est la même que sur mon avatar...
*a décidé de ne plus mettre de signature pointant vers Rochmédia.*

#4 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 11 octobre 2005 - 19:22

Si j'ai bien compris, c'est uniquement un problème d'angle... :)

Il y a 38 symboles : l'angle entre chaque symbole vaut donc 360°/38 symboles = à peu près 9.5° entre deux symboles.

Mettons que le septième chevron soit à l'angle 225°.

Tu incrémenteras ton compteur de tour à chaque fois que le symbole 4 passera au delà de 225°, c'est à dire à chaque fois que "Angle de la roue - 4*9,5" deviendra supérieur à 225.

Un exemple d'algorithme : ici, j'utilise un script global qui sera appelé quand le joueur appuie sur un symbole. De plus, une variable globale de type short nommée "symbole" doit être mise à la valeur du symbole dès que le joueur appuie dessus (avant l'appel du script).

Quote

Begin TestArretRoue

short tours
float Angle
short test
short init

Set Angle to GetAngle "ID de la roue" "axe de rotation"
Set Angle to ( Angle - symbole*9.5 )

if ( Angle < 0 )                                   ; On peut avoir un angle négatif avec le " - symbole*9.5" : on utilise la périodicité du cercle (0° = 360°) pour passer outre
    Set Angle to ( Angle + 360 )
endif

if ( init != 0 )
    if ( Angle > 225 ) ; Au moment ou l'angle dépasse 225°, on incrémente le nombre de tours
        if ( test == 0 )
            Set test to 1
            Set tours to ( tours + 1 )
        endif
    else
        Set test to 0
    endif
else  ; Si init vaut 0, on ne tient pas compte de la première fin de tour
    if ( Angle < 225 )
        Set init to 0
    endif
endif

if ( tours >= 4 )
    Set ArretTours to 1 ; ArretTours est une variable globale de type short qui fait arrêter la rotation de la roue
    StopScript TestArretRoue
endif

End

Pour le script faisant tourner ta roue, Rotate me semble en effet tout indiqué ! :) Cf par ici pour voir sa syntaxe. ;)
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#5 gray wolf

gray wolf

Posté 11 octobre 2005 - 21:32

bon j'ai A PEU PRES compris ce script a force de le re-lire.... et le septième chevron est à 0°... tout en haut... a vrai dire c'est toujours celui la qui "aligne" le symbole à charger.

mais je ne comprends toujours pas...entièrement.
mais néamoins, je pense que il faut faire pivoter l'anneau de 1 symbole(9.5) par seconde... mais Angle relève en fait l'angle en cours de l'anneau,et si le test : Angle=9.5Xsymbole a charger(4),alors dire GW_NSG_catourne(variable globale qui indique si l'anneau doit tourner) VAUT 0

donc à 0,l'anneau ne peut plus tourner,et de même,dire: GW_NSG_global_numchevrons  =  GW_NSG_global_numchevrons+1(on a chargé un nouveau chevron non?)...

et ajouter a gw_nsg_destination_code la valeur du symbole chargé....

mais comment synthéthiser çà...?
*a décidé de ne plus mettre de signature pointant vers Rochmédia.*

#6 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 13 octobre 2005 - 13:30

En fait, la vitesse de rotation de la roue est sans importance : seule sa position l'est... :woot En effet, on n'a besoin que détecter sa position pour savoir si elle est au niveau du septième chevron ou non, il suffit ensuite de faire suivre l'affichage ! ;)

Je réannote un peu plus mon script en espérant que ce sera plus clair :lol: , et je l'adapte à un septième chevron à 0° ! :shock:



Quote

Begin TestArretRoue

short tours  ; tours sert à compter le nombre de tours qu'a fait la roue
float Angle  ; Angle sert à connaitre l'angle de la roue
float Angle2  ; Angle2 est l'angle de la roue à l'execution précédente
short init   ; init sert pour le premier tour seulement

Set Angle2 to Angle ; On met Angle2 à la valeur de Angle à l'execution précédente
Set Angle to GetAngle "ID de la roue" "axe de rotation" ; On met "Angle" à la valeur de l'angle de la roue
Set Angle to ( Angle - symbole*9.5 ) ; On y retire 9,5 fois symbole pour corriger (pour avoir directement l'angle auquel la roue doit s'arrêter)

if ( Angle < 0 ) ; On peut avoir un angle négatif avec le " - symbole*9.5" : on utilise la périodicité du cercle (0° = 360°) pour passer outre
Set Angle to ( Angle + 360 )
endif

if ( init != 0 ) ; Si on n'en est pas au premier tour...
if ( Angle < Angle2 ) ; ...et que l'angle passe sous l'angle à l'execution précédente (donc qu'on change de tour)...
Set tours to ( tours + 1 ) ; ...et on incrémente le nombre de tours
endif
else ; Si init vaut 0, on ne tient pas compte de la première execution du script (pour que "Angle" soit initialisé), mais on met init à jour pour qu'à la prochaine execution, le test de passage de tour ait lieu.
Set init to 1
endif

if ( tours >= symbole ) ; Dès qu'on a atteint le nombre "symbole" de tours...
Set ArretTours to 1 ; ...on met à jour ArretTours, qui est une variable globale de type short qui faisant arrêter la rotation de la roue
StopScript TestArretRoue ; ...et on arrête le script.
endif

End

Quelques pitites explications sur Angle et Angle2 : comme la roue ne cesse de tourner, son angle devrait continuellement augmenter, donc on devrait toujours avoir l'angle actuel (variable "Angle") supérieur à l'angle précédent (variable "Angle2"). MAIS, quand Angle passe 360°, il est remis à environ 0° (exactement à sa valeur moins 360°). A cette frame (et à cette frame seulement !), on aura donc Angle légèrement supérieur à 0° et Angle2 légèrement inférieur à 360° : on a bien Angle < Angle2 qui signale le changement de tour... :o

Voili voilà, si ça reste obscur, n'hésite pas ! :oops:
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)