Aller au contenu


A Propos De Onactivate


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

#1 Yr d'Uab

Yr d'Uab

Posté 22 septembre 2005 - 13:30

Hello,

J'ai créé un volant qui, quand on le tourne, fait apparaître un levier. Jusqu'ici, tout va bien.

Je fais donc un test sur le OnActivate du volant pour le faire tourner.

Maintenant, ce qui est amusant, et embêtant, c'est que je veux associer une action au levier qui est apparu. Je dois donc faire un test sur le OnActivate pour ce levier.

Et que croyez-vous qu'il arrive ?

Le OnActivate du volant est pris en compte pour le volant ET le levier à la fois ! Surprenant, non ?

Donc, dès que je touche le volant, tout se passe comme si je touchais le levier qui vient d'apparaître ailleurs dans la cellule... C'est normal, docteur ?

Cela signifierait que OnActivate reste à 1 tant que l'animation du volant est en cours ?

Je ne vois pas comment m'en sortir pour éviter cela, sauf à retarder l'apparition du levier pour qu'il apparaisse après que le volant a fini de tourner.

Une idée ?

Merci.

Yr

Modifié par Yr d'Uab, 22 septembre 2005 - 13:44.

Je n'ai rien à voir avec votons.info, mais je le conseille à tous les électeurs potentiels.
---
"Se sent obligé de répondre par des mp en 4 points et 2 conclusions,
le tout engoncé dans un style académique des plus barbants."

#2 a3jv

a3jv

    ... à 4 je reviens.


Posté 22 septembre 2005 - 14:18

Yr d'Uab, le 22.09.2005 à 14:30, dit :

Cela signifierait que OnActivate reste à 1 tant que l'animation du volant est en cours ?
Je ne pense pas !
Peut-être vérifier que tu n'as qu'un activate correctement placé dans ton 1er script... En fait, il faudrait les scripts.

Modifié par a3jv, 22 septembre 2005 - 14:19.

Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#3 Yr d'Uab

Yr d'Uab

Posté 22 septembre 2005 - 14:37

Voici les scripts :

Begin yr_script_volant

float timer
short sens
short start

if ( volantstate == 0 )

   if ( OnActivate == 1 )
    set sens to 1
    set volantstate to 1
    set start to 1
   endif

elseif (volantstate == 1 )

   if ( OnActivate == 1 )
    set sens to -1
    set volantstate to 0
    set start to 1
   endif

endif

; mouvement du volant ensuite, que je ne décris pas, çà marche comme je veux...

End

Ce script marche impec, avec la variable globale volantstate pour connaître l'état du volant (tourné ou pas).

Begin yr_script_levier

if ( volantstate == 1 )
   enable
   if ( OnActivate == 1 )
     MessageBox "Levier activé."
   endif
else
   disable
endif

End

Dans ce cas, j'ai le MessageBox quand je tourne le volant !

Au fait, je n'ai aucun Activate dans ces scripts. Le volant, je le fait tourner moi-même par une rotation pendant 3 secondes. Quant au levier, je veux juste qu'il affiche un message quand on appuie dessus.

En gros, ce que je veux :
1. je tourne le volant
2. mon levier (interrupteur en fait) apparaît
3. quand je touche l'interrupteur, un message apparaît

Hors contexte, çà peut paraître inutile (je pourrais mettre le message sur le volant...), mais j'aimerais que çà fonctionne comme çà  :dwarf:

[EDIT pour a3jv] Je mettrai les scripts complets en ligne ce soir. Mais a priori, je ne vois pas pourquoi il y aurait un problème avec le mouvement. Je fais seulement un rotate X 120 ou -120 (selon valeur de sens) pendant 3 secondes sur start à 1 (mon modèle est la manivelle de la porte d'arknangt).
En fait, tout se passe comme si OnActivate était à 1 pour les 2 leviers en même temps  :D  



A+
Yr

Modifié par Yr d'Uab, 22 septembre 2005 - 15:25.

Je n'ai rien à voir avec votons.info, mais je le conseille à tous les électeurs potentiels.
---
"Se sent obligé de répondre par des mp en 4 points et 2 conclusions,
le tout engoncé dans un style académique des plus barbants."

#4 a3jv

a3jv

    ... à 4 je reviens.


Posté 22 septembre 2005 - 15:46

Essai peut-être comme ça :

Citation

Begin yr_script_volant

float timer
short sens
short start

if ( OnActivate == 1 )
     if ( volantstate == 0 )
          set sens to 1
          set state to 1
          set start to 1
     endif
     if (volantstate == 1 )
         set sens to -1
         set state to 0
         set start to 1
     endif
endif

; mouvement du volant ensuite, que je ne décris pas, çà marche comme je veux...

End

Citation

; mouvement du volant ensuite, que je ne décris pas, çà marche comme je veux...
Ca marche peut-être bien pour le mouvement mais il peut y avoir une instruction ou une ligne qui perturbe le OnActivate, donc c'est toujours mieux de donner le sript complet. :rolleyes:

Edit :

Citation

EDIT pour a3jv] Je mettrai les scripts complets en ligne ce soir. Mais a priori, je ne vois pas pourquoi il y aurait un problème avec le mouvement. Je fais seulement un rotate X 120 ou -120 (selon valeur de sens) pendant 3 secondes sur start à 1 (mon modèle est la manivelle de la porte d'arknangt).
En fait c'est surtout pour savoir comment ta globale volantstate passe à 1.
D'ailleurs le problème vient peut-être aussi de là donc si le script que je donne ne résout rien essai de passer cette globale à 2 en fin du 1er script et dans le 2ème :

Citation

if ( volantstate == 2 )
.....

Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#5 Yr d'Uab

Yr d'Uab

Posté 22 septembre 2005 - 16:00

a3jv, le 22.09.2005 à 17:46, dit :

En fait c'est surtout pour savoir comment ta globale volantstate passe à 1.

Ben, elle passe à 1 ici, dans le script du volant :

Citation

if ( volantstate == 0 )

  if ( OnActivate == 1 )
   set sens to 1
   set volantstate to 1
   set start to 1
  endif

Je ny touche plus après...

Citation

D'ailleurs le problème vient peut-être aussi de là donc si le script que je donne ne résout rien essai de passer cette globale à 2 en fin du 1er script et dans le 2ème :

Citation

if ( volantstate == 2 )
.....

<{POST_SNAPBACK}>


Cà je n'y avais pas pensé... Mais le problème, c'est que si je fais çà, je ne peux plus tourner mon volant dans l'autre sens, puisque c'est sur volantstate à 0 que le sens est mis à 1.

Je vais réfléchir à une façon d'utiliser çà. Avec une autre variable pour déclencher le OnActivate du levier, peut-être ? A méditer...
Je n'ai rien à voir avec votons.info, mais je le conseille à tous les électeurs potentiels.
---
"Se sent obligé de répondre par des mp en 4 points et 2 conclusions,
le tout engoncé dans un style académique des plus barbants."

#6 a3jv

a3jv

    ... à 4 je reviens.


Posté 22 septembre 2005 - 16:19

OK, oublie donc le script rectifié que j'ai proposé car quand j'ai copié ton script j'avais state et pas volantstate donc il n'est pas bon.
Il faudrait donc une autre globale ce qui fait beaucoup pour si peu !
A toi de voir.

Edit : Je repasse un coup car le but était d'éviter d'avoir 2 OnActivate dans le même script donc tu peux, si tu veux, essayer de tourner le 1er script comme ça :

Citation

Begin yr_script_volant

float timer
short sens
short start

if ( OnActivate == 1 )
   if ( volantstate == 0 )
      set sens to 1
      set volantstate to 1
      set start to 1
   endif
   elseif (volantstate == 1 )
      set sens to -1
      set volantstate to 0
      set start to 1
endif

; mouvement du volant ensuite, que je ne décris pas, çà marche comme je veux...

End
Re édit : J'ai viré un endif de trop puisque après un elseif il n'y en a pas.

Modifié par a3jv, 22 septembre 2005 - 16:51.

Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#7 Yr d'Uab

Yr d'Uab

Posté 22 septembre 2005 - 20:40

a3jv, le 22.09.2005 à 18:19, dit :

Begin yr_script_volant

float timer
short sens
short start

if ( OnActivate == 1 )
   if ( volantstate == 0 )
      set sens to 1
      set volantstate to 1
      set start to 1
   endif
   elseif (volantstate == 1 )
      set sens to -1
      set volantstate to 0
      set start to 1
endif

; mouvement du volant ensuite, que je ne décris pas, çà marche comme je veux...

End

<{POST_SNAPBACK}>


Cà ne marchera pas car volantstate passe de 0 à 1 tout le temps. Le volant tournera toujours dans le sens -1 !  :)

Par contre, ceci fonctionne pour le levier, avec le script pour le volant donné plus haut (avec OnActivate après le test sur volantstate) :

Begin yr_script_levier

short button
short state

if ( MenuMode == 1 )
   return
endif

if ( volantstate == 1 ) 
   enable
   set state to 0
elseif ( volantstate == 0 ) 
   disable
endif

if ( state == 0 )
   if ( OnActivate == 1 )
      messageBox "Bla bla bla... "
      Set state to 1
   endif
endif

End

Comme quoi...
Merci pour le coup de main. Je poursuis.

[EDIT] sauf que state repasse à 0 à chaque frame tant que volantstate est à 1  :cry: ... [/EDIT]

A+
Yr

Modifié par Yr d'Uab, 22 septembre 2005 - 20:50.

Je n'ai rien à voir avec votons.info, mais je le conseille à tous les électeurs potentiels.
---
"Se sent obligé de répondre par des mp en 4 points et 2 conclusions,
le tout engoncé dans un style académique des plus barbants."

#8 Yr d'Uab

Yr d'Uab

Posté 23 septembre 2005 - 08:26

Hello,

Bon, j'ai fini par y arriver, assez tard hier soir...

De mémoire, car je n'ai pas le script sous les yeux, j'ai fait qqchose comme çà :

Begin yr_script_levier

short button
short state
short UneFois

if ( MenuMode == 1 )
  return
endif

if ( volantstate == 1 )
  enable
  if ( UneFois == 0 )
     set state to 0
     set UneFois to 1
  endif
elseif ( volantstate == 0 )
  disable
endif

if ( state == 0 )
  if ( OnActivate == 1 )
     messageBox "Bla bla bla... "
     set state to 1
  endif
endif

End

Ce qui fait apparaître le texte quand j'appuie sur l'interrupteur seulement la première fois.

Voilà. Sujet clos. Merci à tous !

A+
Yr
Je n'ai rien à voir avec votons.info, mais je le conseille à tous les électeurs potentiels.
---
"Se sent obligé de répondre par des mp en 4 points et 2 conclusions,
le tout engoncé dans un style académique des plus barbants."

#9 MysticalShadow

MysticalShadow

Posté 05 octobre 2005 - 08:11

Est-il nécessaire de déclencher le "Enable" et le "Disable" à chaque lecture du script?

#10 lnari

lnari

    Chocapic Cortexicus


Posté 05 octobre 2005 - 09:38

Non, il serait infiniment plus sage de remplacer disable par

if ( GetDisabled = 0 )
disable
endif

et enable par


if ( GetDisabled = 1 )
enable
endif

Beaucoup beaucoup plus sage... J'en ai fait les frais... Le jour ou tu fais ça en extérieur, un disable ou enable par frame, c'est freeze complet assuré.

#11 Yr d'Uab

Yr d'Uab

Posté 05 octobre 2005 - 09:55

Citation

Beaucoup beaucoup plus sage... J'en ai fait les frais... Le jour ou tu fais ça en extérieur, un disable ou enable par frame, c'est freeze complet assuré.

Je le note.

Parce que j'ai prévu des enable et des disable en extérieur aussi...

A+
Yr
Je n'ai rien à voir avec votons.info, mais je le conseille à tous les électeurs potentiels.
---
"Se sent obligé de répondre par des mp en 4 points et 2 conclusions,
le tout engoncé dans un style académique des plus barbants."




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

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