Plusieurs animations ordonnées en VRML

N'en posez pas trop, spas ? C'est chez web3d-fr, la technique. Ici, c'est juste dépannage.

Plusieurs animations ordonnées en VRML

Messagepar Taranis » Jeu 10 Déc 2009 14:55

Voici un ultime problème :)

Ma scène VRML comporte 2 animations (animation1 et animation2) enclenchées chacune par un TouchSensor (respectivement TouchSensor1 et TouchSensor2)

J'aimerais que l'animation2 ne puisse être jouée que si l'animation1 a déjà été jouée.

Autrement dit, j'aimerais que le TouchSensor2 ne soit actif que si l'animation1 et le TouchSensor1 ont été joués/cliqués.

Attention ces animations sont en SharedEvent (je ne sais pas si cela change quelque chose, mais je le précise toutefois).
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Jeu 10 Déc 2009 16:02

Taranis a écrit:Voici un ultime problème :)

Ma scène VRML comporte 2 animations (animation1 et animation2) enclenchées chacune par un TouchSensor (respectivement TouchSensor1 et TouchSensor2)

J'aimerais que l'animation2 ne puisse être jouée que si l'animation1 a déjà été jouée.

Autrement dit, j'aimerais que le TouchSensor2 ne soit actif que si l'animation1 et le TouchSensor1 ont été joué/cliqué.

Attention ces animations sont en SharedEvent (je ne sais pas si cela change quelque chose, mais je le précise toutefois).

Peu importe que ce soit shared ou pas, il faut un petit Script très semblable au OneShot qui au lieu de filtrer "si et seulement si cet event n'est jamais passé par là : communique l'event" va filtrer "si et seulement si tel autre event est déjà passé par là : communique l'event"
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Jeu 10 Déc 2009 16:46

Oui, c'est ce qu'il me semblait, que ça tenait du Oneshoot. Je vais tâcher de bidouiller de la façon indiquée :) . Merci.
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Ven 11 Déc 2009 10:26

C'est pas évident du tout, même si je commence à comprendre un peu ... Le problème, c'est la grammaire.
Est-ce qu'il faut ajouter des eventIn et des eventOut également ?
Code: Tout sélectionner
DEF OneShot Script {
eventIn SFTime touchTime_in
eventIn SFTime set_time
eventOut SFTime touchTime_out
eventOut SFTime time_changed
field SFBool touched FALSE
field SFBool done FALSE
url "javascript:
function touchTime_in(value, time) {
if (!done) {
done = touched = true; // ? bloque le touchTime
touchTime_out = time;
}
}
function set_time(value, time) {
if (!done) {
done = touched = true; // bloque le touchTime et le shared event
time_changed = time;
}
}
"
}
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Ven 11 Déc 2009 11:00

Taranis a écrit:C'est pas évident du tout, même si je commence à comprendre un peu ... Le problème, c'est la grammaire.
Est-ce qu'il faut ajouter des eventIn et des eventOut également ?
Code: Tout sélectionner
DEF OneShot Script {
eventIn SFTime touchTime_in
eventIn SFTime set_time
eventOut SFTime touchTime_out
eventOut SFTime time_changed
field SFBool touched FALSE
field SFBool done FALSE
url "javascript:
function touchTime_in(value, time) {
if (!done) {
done = touched = true; // ? bloque le touchTime
touchTime_out = time;
}
}
function set_time(value, time) {
if (!done) {
done = touched = true; // bloque le touchTime et le shared event
time_changed = time;
}
}
"
}

Que si tu veux combiner OneShot et OnlyAfter. :)

Tu en as même moins parce que tu as une entrée pour le startTime de l'anim1, une pour le startTime de l'anim2 et la sortie filtrée du startTime de l'anim2 : le startTime de l'anim 1 n'a pas besoin d'être en sortie s'il sert juste à filtrer l'autre.

Il faut un seul field, enfin, tout dépend..., si tu veux que l'anim 2 ne soit autorisée qu'une seule fois, tu dois avoir un 2ème field pour mémoriser que c'est déjà arrivé.

Le principe général c'est qu'un eventIn du Script quand il arrive, lance une function du même nom qui a deux paramètres, sa valeur et le time d'arrivée ; tu peux envoyer un eventOut en faisant "nom_du_eventOut = ....;" ; tu peux mémoriser une variable du type que tu souhaites, dans ce cas un SFBool en la définissant dans un field (ça pourrait être un SFRotation, un MFFloat, un SFNode, tout ce qui est possible dans un field VRML).

Un SFBool ne peut avoir que deux valeurs TRUE ou FALSE, en VRML, en Javascript tu auras true ou false.
J'aurais pu mettre "if (done == true) {...}" sauf que "if (done) {...}" veut dire exactement pareil et est plus parlant, selon moi.
De la même façon au lieu de "if (done == false) {...}" j'ai mis "if (!done) {...}" qui veut dire "if not done".
Le corps d'un "if (condition) {... corps ...}", entre accolades, n'est executé que si la condition est vérifiée, sinon, il passe à la ligne suivant le bloc délimité par des accolades (dans ce cas, il termine la fonction).
Ensuite, comme je ne veux que ce soit transmis que la 1ère fois, j'ai "done = true;" pour que la fois suivante le corps du "if not done" ne soit plus executé.

C'est mieux représenté avec indentations :
Code: Tout sélectionner
function touchTime_in(value, time) {
    if (!done) {
        done = touched = true; // ? bloque le touchTime
        touchTime_out = time;
    }
}
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Ven 11 Déc 2009 11:01

Ce n'est pas bien sorcier comme logique : si ce n'est pas fait, tu mémorises que ça a été fait et tu le fais transmets le event.

Dans ce cas, comme value est aussi un time, tu pourrais transmettre value à la place de time ; mais, pour un SharedEvent, je préfère transmettre le time auquel ça arrive au script plutôt que le startTime d'origine qui peut être dans le futur selon l'horloge interne de l'ordi où l'event a été envoyé à l'origine.
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Ven 11 Déc 2009 12:06

Arsène a écrit:si tu veux que l'anim 2 ne soit autorisée qu'une seule fois


Elle n'est autorisée qu'une seule fois (pour ceux qui sont déjà dans la scène) grâce à :
Code: Tout sélectionner
ROUTE TouchSensor01-SENSOR.isActive TO TouchSensor01-SENSOR.enabled


Une fois cliqué, on ne peut plus cliquer.

Bon, il me faut être pragmatique, malgré mes grands talents, j'avoue que je suis un peu largué, je n'ai pas les bases ni le caractère mathématique qui convient.
Tu me le fais à combien le script ? :)
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Ven 11 Déc 2009 12:15

Taranis a écrit:Tu me le fais à combien le script ? :)

Même tarif que la dernière fois ? :)
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Ven 11 Déc 2009 12:20

Ça roule ! :)
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Ven 11 Déc 2009 12:28

Taranis a écrit:Ça roule ! :)

Tu me montres ton tien d'abord, alors. :)
Simple, hein, le minimum pour que je puisse intercaler mon mien et que ça serve d'exemple à tout le monde.
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Ven 11 Déc 2009 15:50

J'ai repris la scène des deux cubes (mieux ordonnée) :

- un ensemble cube rouge (noms avec suffixes 01) : box01, dummy01, touchSensor01, OneShot
C'est un cube qui bouge (rotation) en boucle. Quand on le clique, il effectue une translation, puis s'arrête. On ne peut ensuite plus le cliquer.

- un ensemble cube vert (noms avec suffixes 02) : box02, touchSensor02, OneShot2
Ce cube vert immobile effectue une translation quand on le clique, puis s'arrête. On ne peut ensuite plus le cliquer.

Ces deux animations sont partagées.

Problématique : ne pouvoir jouer l'animation cube vert (cliquer le cube vert) que si l'on a joué (cliqué) le cube rouge ( et qu'il a terminé son animation, m'enfin ça c'est pas obligé non plus :) ).

Le tout en Oneshot, puisqu'un nouvel arrivant sur la scène doit toujours trouver une scène ou les animations n'ont pas été encore jouées.

La scène de test et le code
Code: Tout sélectionner
 #VRML V2.0 utf8



PROTO BlaxxunZone [
 eventIn         MFNode   addEvents
 eventIn         MFNode   removeEvents
 exposedField    MFNode   events []
 exposedField    MFNode   avatars []
 eventOut        MFNode   events_added
 eventOut        MFNode   events_removed

 eventIn         SFInt32  set_myAvatarGesture
 eventIn         SFInt32  myAvatarGestureFromServer
 eventOut        SFInt32  myAvatarGesture_changed
 eventOut        SFInt32  myAvatarGestureToServer
 

 exposedField    MFString sendToChat ""
 exposedField    SFFloat  beamToDistance 3
 exposedField    MFString groupChatName ""
 exposedField    MFString groupChat ""
 exposedField    SFString myAvatarName ""
 exposedField    MFNode   avatarLOD []
 exposedField    MFFloat  avatarRange []
 eventIn         MFNode   addAvatars
 eventOut  MFNode   avatars_added
 eventIn   MFNode   removeAvatars
 eventOut  MFNode   avatars_removed
]

{
 DEF S Script {
  eventOut MFNode avatars_added IS avatars_added
  eventOut MFNode avatars_removed IS avatars_removed
  eventIn SFInt32  set_myAvatarGesture IS set_myAvatarGesture
  eventIn SFInt32  myAvatarGestureFromServer IS myAvatarGestureFromServer
  eventOut SFInt32  myAvatarGesture_changed IS myAvatarGesture_changed
  eventOut SFInt32  myAvatarGestureToServer IS myAvatarGestureToServer
  eventIn MFNode addAvatars IS addAvatars
  eventIn MFNode removeAvatars IS removeAvatars

  url "vrmlscript:
  function addAvatars(value, time) { avatars_added = value; }
  function removeAvatars(value, time) { avatars_removed = value; }
  function set_myAvatarGesture(value, time) { myAvatarGestureToServer = value; }
  function myAvatarGestureFromServer(value, time) { myAvatarGesture_changed = value; }

  "
 }
}

PROTO SharedEvent [
 exposedField SFString    name "event"
 exposedField SFString    type      "SFTime"
 exposedField SFString    toNickname     ""
 exposedField SFString    toGroup   ""
 eventIn   SFBool    boolFromServer
 eventIn   SFColor   colorFromServer
 eventIn   SFFloat   floatFromServer
 eventIn   SFInt32   int32FromServer
 eventIn   SFRotation     rotationFromServer
 eventIn   SFString  stringFromServer
 eventIn   SFTime    timeFromServer
 eventIn   SFVec2f   vec2fFromServer
 eventIn   SFVec3f   vec3fFromServer
 eventOut  SFBool    boolToServer
 eventOut  SFColor   colorToServer
 eventOut  SFFloat   floatToServer
 eventOut  SFInt32   int32ToServer
 eventOut  SFRotation     rotationToServer
 eventOut  SFString  stringToServer
 eventOut  SFTime    timeToServer
 eventOut  SFVec2f   vec2fToServer
 eventOut  SFVec3f   vec3fToServer
 eventIn   SFBool    set_bool
 eventIn   SFColor   set_color
 eventIn   SFFloat   set_float
 eventIn   SFInt32   set_int32
 eventIn   SFRotation     set_rotation
 eventIn   SFString  set_string
 eventIn   SFTime    set_time
 eventIn   SFVec2f   set_vec2f
 eventIn   SFVec3f   set_vec3f
 eventOut  SFBool    bool_changed
 eventOut  SFColor   color_changed
 eventOut  SFFloat   float_changed
 eventOut  SFInt32   int32_changed
 eventOut  SFRotation     rotation_changed
 eventOut  SFString  string_changed
 eventOut  SFTime    time_changed
 eventOut  SFVec2f   vec2f_changed
 eventOut  SFVec3f   vec3f_changed
 eventOut  SFBool    initialized
]
{
 Script {
  eventIn   SFBool    boolFromServer IS   boolFromServer
  eventIn   SFColor   colorFromServer     IS   colorFromServer
  eventIn   SFFloat   floatFromServer     IS   floatFromServer
  eventIn   SFInt32   int32FromServer     IS   int32FromServer
  eventIn   SFRotation     rotationFromServer  IS   rotationFromServer
  eventIn   SFString  stringFromServer    IS   stringFromServer
  eventIn   SFTime    timeFromServer      IS   timeFromServer
  eventIn   SFVec2f   vec2fFromServer     IS   vec2fFromServer
  eventIn   SFVec3f   vec3fFromServer     IS   vec3fFromServer
  eventOut  SFBool    boolToServer   IS   boolToServer
  eventOut  SFColor   colorToServer  IS   colorToServer
  eventOut  SFFloat   floatToServer  IS   floatToServer
  eventOut  SFInt32   int32ToServer  IS   int32ToServer
  eventOut  SFRotation     rotationToServer    IS   rotationToServer
  eventOut  SFString  stringToServer      IS   stringToServer
  eventOut  SFTime    timeToServer   IS   timeToServer
  eventOut  SFVec2f   vec2fToServer  IS   vec2fToServer
  eventOut  SFVec3f   vec3fToServer  IS   vec3fToServer
  eventIn   SFBool    set_bool  IS   set_bool
  eventIn   SFColor   set_color      IS   set_color
  eventIn   SFFloat   set_float      IS   set_float
  eventIn   SFInt32   set_int32      IS   set_int32
  eventIn   SFRotation     set_rotation   IS   set_rotation
  eventIn   SFString  set_string     IS   set_string
  eventIn   SFTime    set_time  IS   set_time
  eventIn   SFVec2f   set_vec2f      IS   set_vec2f
  eventIn   SFVec3f   set_vec3f      IS   set_vec3f
  eventOut  SFBool    bool_changed   IS   bool_changed
  eventOut  SFColor   color_changed  IS   color_changed
  eventOut  SFFloat   float_changed  IS   float_changed
  eventOut  SFInt32   int32_changed  IS   int32_changed
  eventOut  SFRotation     rotation_changed    IS   rotation_changed
  eventOut  SFString  string_changed      IS   string_changed
  eventOut  SFTime    time_changed   IS   time_changed
  eventOut  SFVec2f   vec2f_changed  IS   vec2f_changed
  eventOut  SFVec3f   vec3f_changed  IS   vec3f_changed
  eventOut  SFBool    initialized    IS   initialized
  url "vrmlscript:
  function initialize( time ) { initialized = TRUE;}
  function boolFromServer (value, time) { bool_changed = value; }
  function colorFromServer (value, time) { color_changed = value; }
  function floatFromServer (value, time) { float_changed = value; }
  function int32FromServer (value, time) { int32_changed = value; }
  function rotationFromServer (value, time) {rotation_changed = value; }
  function stringFromServer (value, time) { string_changed = value; }
  function timeFromServer (value, time) { time_changed = time; }
  function vec2fFromServer (value, time) { vec2f_changed = value; }
  function vec3fFromServer (value, time) { vec3f_changed = value; }
  function set_bool (value, time) { boolToServer = value; }
  function set_color (value, time) { colorToServer = value; }
  function set_float (value, time) { floatToServer = value; }
  function set_int32 (value, time) { int32ToServer = value; }
  function set_rotation (value, time) { rotationToServer = value; }
  function set_string (value, time) { stringToServer = value; }
  function set_time (value, time) { timeToServer = value; }
  function set_vec2f (value, time) { vec2fToServer = value; }
  function set_vec3f (value, time) { vec3fToServer = value; }
  "
 }
}

DEF SharedZone BlaxxunZone {
    events [
        DEF sharedAnim1 SharedEvent{ name "sanim1" }
      DEF sharedAnim2 SharedEvent{ name "sanim2" }
    ]
}




DEF OneShot Script {
eventIn SFTime touchTime_in
eventIn SFTime set_time
eventOut SFTime touchTime_out
eventOut SFTime time_changed
field SFBool touched FALSE
field SFBool done FALSE
url "javascript:
function touchTime_in(value, time) {
if (!touched) {
touched = true; // bloque le touchTime
touchTime_out = time;
}
}
function set_time(value, time) {
if (!done) {
done = touched = true; // bloque le touchTime et le shared event
time_changed = time;
}
}
"
}


DEF OneShot2 Script {
eventIn SFTime touchTime_in
eventIn SFTime set_time
eventOut SFTime touchTime_out
eventOut SFTime time_changed
field SFBool touched FALSE
field SFBool done FALSE
url "javascript:
function touchTime_in(value, time) {
if (!touched) {
touched = true; // bloque le touchTime
touchTime_out = time;
}
}
function set_time(value, time) {
if (!done) {
done = touched = true; // bloque le touchTime et le shared event
time_changed = time;
}
}
"
}


DEF Camera01 Viewpoint {
  position -251.5 144.7 253.6
  orientation 0.3109 0.9399 0.1413 -0.9006
  fieldOfView 0.6024
  description "Camera01"
}
DEF Dummy01 Transform {
  translation 44.16 0 96.08
  children [
  DEF Dummy01-TIMER TimeSensor { loop FALSE cycleInterval 3.333 },
  DEF Dummy01-POS-INTERP PositionInterpolator {
    key [0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27, 0.3,
        0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.51, 0.54, 0.57, 0.6,
        0.63, 0.66, 0.69, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87, 0.9,
        0.93, 0.96, 0.99, 1, ]
    keyValue [44.16 0 96.08, 44.88 0 95.17, 46.97 0 92.52, 50.34 0 88.24,
      54.92 0 82.43, 60.6 0 75.22, 67.31 0 66.71, 74.96 0 57.01,
      83.45 0 46.24, 92.7 0 34.5, 102.6 0 21.91, 113.1 0 8.576,
      124.1 0 -5.387, 135.6 0 -19.87, 147.3 0 -34.76, 159.3 0 -49.95,
      171.4 0 -65.32, 183.6 0 -80.76, 195.7 0 -96.17, 207.7 0 -111.4,
      219.6 0 -126.4, 231.1 0 -141.1, 242.3 0 -155.2, 252.9 0 -168.8,
      263.1 0 -181.6, 272.6 0 -193.7, 281.3 0 -204.8, 289.3 0 -214.8,
      296.3 0 -223.8, 302.3 0 -231.4, 307.3 0 -237.7, 311.1 0 -242.5,
      313.6 0 -245.7, 314.8 0 -247.2, 314.9 0 -247.3, ] },
    DEF Box01 Transform {
      translation -9.954 0 -78.99
      children [
  DEF Box01-TIMER TimeSensor { loop TRUE cycleInterval 3.333 },
      DEF Box01-POS-INTERP PositionInterpolator {
        key [0, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87, 0.93, 0.96, 0.99,
            ]
        keyValue [-9.954 0 -78.99, -9.954 0 -78.99, -9.954 0 -78.99,
          -9.954 0 -78.99, -9.954 0 -78.99, -9.954 0 -78.99,
          -9.954 0 -78.99, -9.954 0 -78.99, -9.954 0 -78.99,
          -9.954 0 -78.99, ] },
      DEF Box01-ROT-INTERP OrientationInterpolator {
        key [0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27,
            0.3, 0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.51, 0.54, 0.57,
            0.6, 0.63, 0.66, 0.69, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87,
            0.9, 0.93, 0.96, 0.99, 1, ]
        keyValue [1 0 0 0, 0 0 1 -0.05789, 0 0 1 -0.1238, 0 0 1 -0.1933,
          0 0 1 -0.2617, 0 0 1 -0.3246, 0 0 1 -0.3775,
          0 0 1 -0.4158, 0 0 1 -0.435, 0 0 1 -0.431, 0 0 1 -0.4049,
          0 0 1 -0.3613, 0 0 1 -0.3046, 0 0 1 -0.2393,
          0 0 1 -0.17, 0 0 1 -0.1012, 0 0 1 -0.03748, 0 0 -1 -0.01812,
          0 0 -1 -0.0792, 0 0 -1 -0.1468, 0 0 -1 -0.2164,
          0 0 -1 -0.2835, 0 0 -1 -0.3436, 0 0 -1 -0.3921,
          0 0 -1 -0.4245, 0 0 -1 -0.4363, 0 0 -1 -0.4245,
          0 0 -1 -0.3921, 0 0 -1 -0.3436, 0 0 -1 -0.2835,
          0 0 -1 -0.2164, 0 0 -1 -0.1468, 0 0 -1 -0.0792,
          0 0 -1 -0.01812, 1 0 0 0, ] },
          Transform {
            translation 0 21.29 0
            children [
              Shape {
                appearance Appearance {
                  material Material {
                    diffuseColor 0.8784 0.3373 0.3373
                  }
                }
                geometry Box { size 38.25 42.58 40.84 }
              }
        ] }
    DEF TouchSensor01-SENSOR TouchSensor { enabled TRUE }
      ]
    }
  ]
ROUTE Dummy01-TIMER.fraction_changed TO Dummy01-POS-INTERP.set_fraction
ROUTE Dummy01-POS-INTERP.value_changed TO Dummy01.set_translation
ROUTE Dummy01-TIMER.fraction_changed TO Box01-POS-INTERP.set_fraction
ROUTE Box01-POS-INTERP.value_changed TO Box01.set_translation
ROUTE Dummy01-TIMER.fraction_changed TO Box01-ROT-INTERP.set_fraction


#add
ROUTE Box01-TIMER.fraction_changed TO Box01-ROT-INTERP.set_fraction
ROUTE Box01-ROT-INTERP.value_changed TO Box01.set_rotation
#/



}
DEF Box02 Transform {
  translation -23.87 0 -14.92
  children [
  DEF Box02-TIMER TimeSensor { loop FALSE cycleInterval 3.333 },
  DEF Box02-POS-INTERP PositionInterpolator {
    key [0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27, 0.3,
        0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.51, 0.54, 0.57, 0.6,
        0.63, 0.66, 0.69, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87, 0.9,
        0.93, 0.96, 0.99, 1, ]
    keyValue [-23.87 0 -14.92, -23.87 3.237 -14.92, -23.87 11.51 -14.92,
      -23.87 22.66 -14.92, -23.87 34.52 -14.92, -23.87 44.95 -14.92,
      -23.87 51.79 -14.92, -23.87 52.6 -14.92, -23.87 43.53 -14.92,
      -23.87 26.88 -14.92, -23.87 6.435 -14.92, -23.87 -14.01 -14.92,
      -23.87 -30.66 -14.92, -23.87 -39.73 -14.92, -23.87 -37.29 -14.92,
      -23.87 -23.01 -14.92, -23.87 -1.221 -14.92, -23.87 23.58 -14.92,
      -23.87 46.87 -14.92, -23.87 64.15 -14.92, -23.87 70.92 -14.92,
      -23.87 63.96 -14.92, -23.87 46.19 -14.92, -23.87 22.23 -14.92,
      -23.87 -3.266 -14.92, -23.87 -25.68 -14.92, -23.87 -40.36 -14.92,
      -23.87 -43.25 -14.92, -23.87 -39.03 -14.92, -23.87 -31.29 -14.92,
      -23.87 -21.78 -14.92, -23.87 -12.27 -14.92, -23.87 -4.531 -14.92,
      -23.87 -0.3158 -14.92, -23.87 0 -14.92, ] },
      Transform {
        translation 0 12.41 0
        children [
          Shape {
            appearance Appearance {
              material Material {
                diffuseColor 0.3451 0.6941 0.102
              }
            }
            geometry Box { size 19.67 24.81 21.58 }
          }
    ] }
DEF TouchSensor02-SENSOR TouchSensor { enabled TRUE }
  ]

# ROUTE modifiées

  ROUTE TouchSensor02-SENSOR.touchTime TO OneShot2.touchTime_in
  ROUTE OneShot2.touchTime_out TO sharedAnim2.set_time
  ROUTE sharedAnim2.time_changed TO OneShot2.set_time
  ROUTE OneShot2.time_changed TO Box02-TIMER.startTime
  ROUTE Box02-TIMER.fraction_changed TO Box02-POS-INTERP.set_fraction
  ROUTE Box02-POS-INTERP.value_changed TO Box02.set_translation


# ROUTE originales

#ROUTE TouchSensor02-SENSOR.touchTime   TO sharedAnim2.set_time
#ROUTE sharedAnim2.time_changed TO Box02-TIMER.startTime
#ROUTE Box02-TIMER.fraction_changed TO Box02-POS-INTERP.set_fraction
#ROUTE Box02-POS-INTERP.value_changed TO Box02.set_translation
}


############
#ROUTE d'origine
#ROUTE TouchSensor01-SENSOR.touchTime TO Dummy01-TIMER.startTime
#ROUTE TouchSensor01-SENSOR.touchTime TO Box01-TIMER.stopTime
#ROUTE TouchSensor01-SENSOR.isActive TO TouchSensor01-SENSOR.enabled

#ROUTE modifiées pour SharedEvent
 
# bloque le touchTime vers le serveur l'anim a été jouée
ROUTE TouchSensor01-SENSOR.touchTime TO OneShot.touchTime_in
ROUTE OneShot.touchTime_out TO sharedAnim1.set_time

# bloque la réponse du serveur et le touchTime si l'anim a été jouée
ROUTE sharedAnim1.time_changed TO OneShot.set_time
ROUTE OneShot.time_changed TO Dummy01-TIMER.startTime
ROUTE OneShot.time_changed TO Box01-TIMER.stopTime

ROUTE TouchSensor01-SENSOR.isActive TO TouchSensor01-SENSOR.enabled
ROUTE TouchSensor02-SENSOR.isActive TO TouchSensor02-SENSOR.enabled
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Ven 11 Déc 2009 16:02

Voilà , maintenant c'est tout bon, c'est tout partagé, tout en oneshot :)
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Ven 11 Déc 2009 16:49

Taranis a écrit:Voilà , maintenant c'est tout bon, c'est tout partagé, tout en oneshot :)

Ah, je ne sais pas si j'ai pris le code avant ou après ce message.

Je pense que ça devrait le faire :

Code: Tout sélectionner
#VRML V2.0 utf8



PROTO BlaxxunZone [
eventIn         MFNode   addEvents
eventIn         MFNode   removeEvents
exposedField    MFNode   events []
exposedField    MFNode   avatars []
eventOut        MFNode   events_added
eventOut        MFNode   events_removed

eventIn         SFInt32  set_myAvatarGesture
eventIn         SFInt32  myAvatarGestureFromServer
eventOut        SFInt32  myAvatarGesture_changed
eventOut        SFInt32  myAvatarGestureToServer


exposedField    MFString sendToChat ""
exposedField    SFFloat  beamToDistance 3
exposedField    MFString groupChatName ""
exposedField    MFString groupChat ""
exposedField    SFString myAvatarName ""
exposedField    MFNode   avatarLOD []
exposedField    MFFloat  avatarRange []
eventIn         MFNode   addAvatars
eventOut  MFNode   avatars_added
eventIn   MFNode   removeAvatars
eventOut  MFNode   avatars_removed
]

{
DEF S Script {
eventOut MFNode avatars_added IS avatars_added
eventOut MFNode avatars_removed IS avatars_removed
eventIn SFInt32  set_myAvatarGesture IS set_myAvatarGesture
eventIn SFInt32  myAvatarGestureFromServer IS myAvatarGestureFromServer
eventOut SFInt32  myAvatarGesture_changed IS myAvatarGesture_changed
eventOut SFInt32  myAvatarGestureToServer IS myAvatarGestureToServer
eventIn MFNode addAvatars IS addAvatars
eventIn MFNode removeAvatars IS removeAvatars

url "vrmlscript:
function addAvatars(value, time) { avatars_added = value; }
function removeAvatars(value, time) { avatars_removed = value; }
function set_myAvatarGesture(value, time) { myAvatarGestureToServer = value; }
function myAvatarGestureFromServer(value, time) { myAvatarGesture_changed = value; }

"
}
}

PROTO SharedEvent [
exposedField SFString    name "event"
exposedField SFString    type      "SFTime"
exposedField SFString    toNickname     ""
exposedField SFString    toGroup   ""
eventIn   SFBool    boolFromServer
eventIn   SFColor   colorFromServer
eventIn   SFFloat   floatFromServer
eventIn   SFInt32   int32FromServer
eventIn   SFRotation     rotationFromServer
eventIn   SFString  stringFromServer
eventIn   SFTime    timeFromServer
eventIn   SFVec2f   vec2fFromServer
eventIn   SFVec3f   vec3fFromServer
eventOut  SFBool    boolToServer
eventOut  SFColor   colorToServer
eventOut  SFFloat   floatToServer
eventOut  SFInt32   int32ToServer
eventOut  SFRotation     rotationToServer
eventOut  SFString  stringToServer
eventOut  SFTime    timeToServer
eventOut  SFVec2f   vec2fToServer
eventOut  SFVec3f   vec3fToServer
eventIn   SFBool    set_bool
eventIn   SFColor   set_color
eventIn   SFFloat   set_float
eventIn   SFInt32   set_int32
eventIn   SFRotation     set_rotation
eventIn   SFString  set_string
eventIn   SFTime    set_time
eventIn   SFVec2f   set_vec2f
eventIn   SFVec3f   set_vec3f
eventOut  SFBool    bool_changed
eventOut  SFColor   color_changed
eventOut  SFFloat   float_changed
eventOut  SFInt32   int32_changed
eventOut  SFRotation     rotation_changed
eventOut  SFString  string_changed
eventOut  SFTime    time_changed
eventOut  SFVec2f   vec2f_changed
eventOut  SFVec3f   vec3f_changed
eventOut  SFBool    initialized
]
{
Script {
eventIn   SFBool    boolFromServer IS   boolFromServer
eventIn   SFColor   colorFromServer     IS   colorFromServer
eventIn   SFFloat   floatFromServer     IS   floatFromServer
eventIn   SFInt32   int32FromServer     IS   int32FromServer
eventIn   SFRotation     rotationFromServer  IS   rotationFromServer
eventIn   SFString  stringFromServer    IS   stringFromServer
eventIn   SFTime    timeFromServer      IS   timeFromServer
eventIn   SFVec2f   vec2fFromServer     IS   vec2fFromServer
eventIn   SFVec3f   vec3fFromServer     IS   vec3fFromServer
eventOut  SFBool    boolToServer   IS   boolToServer
eventOut  SFColor   colorToServer  IS   colorToServer
eventOut  SFFloat   floatToServer  IS   floatToServer
eventOut  SFInt32   int32ToServer  IS   int32ToServer
eventOut  SFRotation     rotationToServer    IS   rotationToServer
eventOut  SFString  stringToServer      IS   stringToServer
eventOut  SFTime    timeToServer   IS   timeToServer
eventOut  SFVec2f   vec2fToServer  IS   vec2fToServer
eventOut  SFVec3f   vec3fToServer  IS   vec3fToServer
eventIn   SFBool    set_bool  IS   set_bool
eventIn   SFColor   set_color      IS   set_color
eventIn   SFFloat   set_float      IS   set_float
eventIn   SFInt32   set_int32      IS   set_int32
eventIn   SFRotation     set_rotation   IS   set_rotation
eventIn   SFString  set_string     IS   set_string
eventIn   SFTime    set_time  IS   set_time
eventIn   SFVec2f   set_vec2f      IS   set_vec2f
eventIn   SFVec3f   set_vec3f      IS   set_vec3f
eventOut  SFBool    bool_changed   IS   bool_changed
eventOut  SFColor   color_changed  IS   color_changed
eventOut  SFFloat   float_changed  IS   float_changed
eventOut  SFInt32   int32_changed  IS   int32_changed
eventOut  SFRotation     rotation_changed    IS   rotation_changed
eventOut  SFString  string_changed      IS   string_changed
eventOut  SFTime    time_changed   IS   time_changed
eventOut  SFVec2f   vec2f_changed  IS   vec2f_changed
eventOut  SFVec3f   vec3f_changed  IS   vec3f_changed
eventOut  SFBool    initialized    IS   initialized
url "vrmlscript:
function initialize( time ) { initialized = TRUE;}
function boolFromServer (value, time) { bool_changed = value; }
function colorFromServer (value, time) { color_changed = value; }
function floatFromServer (value, time) { float_changed = value; }
function int32FromServer (value, time) { int32_changed = value; }
function rotationFromServer (value, time) {rotation_changed = value; }
function stringFromServer (value, time) { string_changed = value; }
function timeFromServer (value, time) { time_changed = time; }
function vec2fFromServer (value, time) { vec2f_changed = value; }
function vec3fFromServer (value, time) { vec3f_changed = value; }
function set_bool (value, time) { boolToServer = value; }
function set_color (value, time) { colorToServer = value; }
function set_float (value, time) { floatToServer = value; }
function set_int32 (value, time) { int32ToServer = value; }
function set_rotation (value, time) { rotationToServer = value; }
function set_string (value, time) { stringToServer = value; }
function set_time (value, time) { timeToServer = value; }
function set_vec2f (value, time) { vec2fToServer = value; }
function set_vec3f (value, time) { vec3fToServer = value; }
"
}
}

DEF SharedZone BlaxxunZone {
events [
    DEF sharedAnim1 SharedEvent{ name "sanim1" }
  DEF sharedAnim2 SharedEvent{ name "sanim2" }
]
}




DEF OneShot Script {
eventIn SFTime touchTime_in
eventIn SFTime set_time
eventOut SFTime touchTime_out
eventOut SFTime time_changed
field SFBool touched FALSE
field SFBool done FALSE
url "javascript:
function touchTime_in(value, time) {
if (!touched) {
touched = true; // bloque le touchTime
touchTime_out = time;
}
}
function set_time(value, time) {
if (!done) {
done = touched = true; // bloque le touchTime et le shared event
time_changed = time;
}
}
"
}


DEF OneShot2 Script {
eventIn SFBool active_in                #### 2009-12-11
eventIn SFTime touchTime_in
eventIn SFTime set_time
eventOut SFBool active_out                #### 2009-12-11
eventOut SFTime touchTime_out
eventOut SFTime time_changed
field SFBool touched FALSE
field SFBool done FALSE
url "javascript:
function active_in(value) {               //// 2009-12-11
active_out = !value;                  //// 2009-12-11
}                        //// 2009-12-11
function touchTime_in(value, time) {
if (!touched) {
    touched = true; // bloque le touchTime
    touchTime_out = time;
}
}
function set_time(value, time) {
if (!done) {
    done = touched = true; // bloque le touchTime et le shared event
    time_changed = time;
}
}
"
}


DEF Camera01 Viewpoint {
position -251.5 144.7 253.6
orientation 0.3109 0.9399 0.1413 -0.9006
fieldOfView 0.6024
description "Camera01"
}
DEF Dummy01 Transform {
translation 44.16 0 96.08
children [
DEF Dummy01-TIMER TimeSensor { loop FALSE cycleInterval 3.333 },
DEF Dummy01-POS-INTERP PositionInterpolator {
key [0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27, 0.3,
    0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.51, 0.54, 0.57, 0.6,
    0.63, 0.66, 0.69, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87, 0.9,
    0.93, 0.96, 0.99, 1, ]
keyValue [44.16 0 96.08, 44.88 0 95.17, 46.97 0 92.52, 50.34 0 88.24,
  54.92 0 82.43, 60.6 0 75.22, 67.31 0 66.71, 74.96 0 57.01,
  83.45 0 46.24, 92.7 0 34.5, 102.6 0 21.91, 113.1 0 8.576,
  124.1 0 -5.387, 135.6 0 -19.87, 147.3 0 -34.76, 159.3 0 -49.95,
  171.4 0 -65.32, 183.6 0 -80.76, 195.7 0 -96.17, 207.7 0 -111.4,
  219.6 0 -126.4, 231.1 0 -141.1, 242.3 0 -155.2, 252.9 0 -168.8,
  263.1 0 -181.6, 272.6 0 -193.7, 281.3 0 -204.8, 289.3 0 -214.8,
  296.3 0 -223.8, 302.3 0 -231.4, 307.3 0 -237.7, 311.1 0 -242.5,
  313.6 0 -245.7, 314.8 0 -247.2, 314.9 0 -247.3, ] },
DEF Box01 Transform {
  translation -9.954 0 -78.99
  children [
DEF Box01-TIMER TimeSensor { loop TRUE cycleInterval 3.333 },
  DEF Box01-POS-INTERP PositionInterpolator {
    key [0, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87, 0.93, 0.96, 0.99,
        ]
    keyValue [-9.954 0 -78.99, -9.954 0 -78.99, -9.954 0 -78.99,
      -9.954 0 -78.99, -9.954 0 -78.99, -9.954 0 -78.99,
      -9.954 0 -78.99, -9.954 0 -78.99, -9.954 0 -78.99,
      -9.954 0 -78.99, ] },
  DEF Box01-ROT-INTERP OrientationInterpolator {
    key [0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27,
        0.3, 0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.51, 0.54, 0.57,
        0.6, 0.63, 0.66, 0.69, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87,
        0.9, 0.93, 0.96, 0.99, 1, ]
    keyValue [1 0 0 0, 0 0 1 -0.05789, 0 0 1 -0.1238, 0 0 1 -0.1933,
      0 0 1 -0.2617, 0 0 1 -0.3246, 0 0 1 -0.3775,
      0 0 1 -0.4158, 0 0 1 -0.435, 0 0 1 -0.431, 0 0 1 -0.4049,
      0 0 1 -0.3613, 0 0 1 -0.3046, 0 0 1 -0.2393,
      0 0 1 -0.17, 0 0 1 -0.1012, 0 0 1 -0.03748, 0 0 -1 -0.01812,
      0 0 -1 -0.0792, 0 0 -1 -0.1468, 0 0 -1 -0.2164,
      0 0 -1 -0.2835, 0 0 -1 -0.3436, 0 0 -1 -0.3921,
      0 0 -1 -0.4245, 0 0 -1 -0.4363, 0 0 -1 -0.4245,
      0 0 -1 -0.3921, 0 0 -1 -0.3436, 0 0 -1 -0.2835,
      0 0 -1 -0.2164, 0 0 -1 -0.1468, 0 0 -1 -0.0792,
      0 0 -1 -0.01812, 1 0 0 0, ] },
      Transform {
        translation 0 21.29 0
        children [
          Shape {
            appearance Appearance {
              material Material {
                diffuseColor 0.8784 0.3373 0.3373
              }
            }
            geometry Box { size 38.25 42.58 40.84 }
          }
    ] }
DEF TouchSensor01-SENSOR TouchSensor { enabled TRUE }
  ]
}
]
ROUTE Dummy01-TIMER.fraction_changed TO Dummy01-POS-INTERP.set_fraction
ROUTE Dummy01-POS-INTERP.value_changed TO Dummy01.set_translation
ROUTE Dummy01-TIMER.fraction_changed TO Box01-POS-INTERP.set_fraction
ROUTE Box01-POS-INTERP.value_changed TO Box01.set_translation
ROUTE Dummy01-TIMER.fraction_changed TO Box01-ROT-INTERP.set_fraction


#add
ROUTE Box01-TIMER.fraction_changed TO Box01-ROT-INTERP.set_fraction
ROUTE Box01-ROT-INTERP.value_changed TO Box01.set_rotation
#/



}
DEF Box02 Transform {
translation -23.87 0 -14.92
children [
DEF Box02-TIMER TimeSensor { loop FALSE cycleInterval 3.333 },
DEF Box02-POS-INTERP PositionInterpolator {
key [0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27, 0.3,
    0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.51, 0.54, 0.57, 0.6,
    0.63, 0.66, 0.69, 0.72, 0.75, 0.78, 0.81, 0.84, 0.87, 0.9,
    0.93, 0.96, 0.99, 1, ]
keyValue [-23.87 0 -14.92, -23.87 3.237 -14.92, -23.87 11.51 -14.92,
  -23.87 22.66 -14.92, -23.87 34.52 -14.92, -23.87 44.95 -14.92,
  -23.87 51.79 -14.92, -23.87 52.6 -14.92, -23.87 43.53 -14.92,
  -23.87 26.88 -14.92, -23.87 6.435 -14.92, -23.87 -14.01 -14.92,
  -23.87 -30.66 -14.92, -23.87 -39.73 -14.92, -23.87 -37.29 -14.92,
  -23.87 -23.01 -14.92, -23.87 -1.221 -14.92, -23.87 23.58 -14.92,
  -23.87 46.87 -14.92, -23.87 64.15 -14.92, -23.87 70.92 -14.92,
  -23.87 63.96 -14.92, -23.87 46.19 -14.92, -23.87 22.23 -14.92,
  -23.87 -3.266 -14.92, -23.87 -25.68 -14.92, -23.87 -40.36 -14.92,
  -23.87 -43.25 -14.92, -23.87 -39.03 -14.92, -23.87 -31.29 -14.92,
  -23.87 -21.78 -14.92, -23.87 -12.27 -14.92, -23.87 -4.531 -14.92,
  -23.87 -0.3158 -14.92, -23.87 0 -14.92, ] },
  Transform {
    translation 0 12.41 0
    children [
      Shape {
        appearance Appearance {
          material Material {
            diffuseColor 0.3451 0.6941 0.102
          }
        }
        geometry Box { size 19.67 24.81 21.58 }
      }
] }
DEF TouchSensor02-SENSOR TouchSensor { enabled FALSE }      #### 2009-12-11
]

# ROUTE modifiées

ROUTE TouchSensor02-SENSOR.touchTime TO OneShot2.touchTime_in
ROUTE OneShot2.touchTime_out TO sharedAnim2.set_time
ROUTE sharedAnim2.time_changed TO OneShot2.set_time
ROUTE OneShot2.time_changed TO Box02-TIMER.startTime
ROUTE Box02-TIMER.fraction_changed TO Box02-POS-INTERP.set_fraction
ROUTE Box02-POS-INTERP.value_changed TO Box02.set_translation


# ROUTE originales

#ROUTE TouchSensor02-SENSOR.touchTime   TO sharedAnim2.set_time
#ROUTE sharedAnim2.time_changed TO Box02-TIMER.startTime
#ROUTE Box02-TIMER.fraction_changed TO Box02-POS-INTERP.set_fraction
#ROUTE Box02-POS-INTERP.value_changed TO Box02.set_translation
}


############
#ROUTE d'origine
#ROUTE TouchSensor01-SENSOR.touchTime TO Dummy01-TIMER.startTime
#ROUTE TouchSensor01-SENSOR.touchTime TO Box01-TIMER.stopTime
#ROUTE TouchSensor01-SENSOR.isActive TO TouchSensor01-SENSOR.enabled

#ROUTE modifiées pour SharedEvent

# bloque le touchTime vers le serveur l'anim a été jouée
ROUTE TouchSensor01-SENSOR.touchTime TO OneShot.touchTime_in
ROUTE OneShot.touchTime_out TO sharedAnim1.set_time

# bloque la réponse du serveur et le touchTime si l'anim a été jouée
ROUTE sharedAnim1.time_changed TO OneShot.set_time
ROUTE OneShot.time_changed TO Dummy01-TIMER.startTime
ROUTE OneShot.time_changed TO Box01-TIMER.stopTime

ROUTE TouchSensor01-SENSOR.isActive TO TouchSensor01-SENSOR.enabled
ROUTE TouchSensor02-SENSOR.isActive TO TouchSensor02-SENSOR.enabled

ROUTE Box01-TIMER.isActive TO OneShot2.active_in      #### 2009-12-11
ROUTE OneShot2.active_out TO TouchSensor02-SENSOR.enabled   #### 2009-12-11


J'ai mis 2009-12-11 en commentaire à la fin des lignes que j'ai modifiées ou ajoutées.
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Re: Plusieurs animations ordonnées en VRML

Messagepar Taranis » Ven 11 Déc 2009 18:09

Arsène a écrit:Je pense que ça devrait le faire


Anéfé :) Ça le fait tout bien. Merci.
Avatar de l’utilisateur
Taranis
Voyageur du mois
Voyageur du mois
 
Messages: 2390
Inscrit le: Mer 15 Sep 2004 11:19

Re: Plusieurs animations ordonnées en VRML

Messagepar Arsène » Ven 11 Déc 2009 18:14

Taranis a écrit:
Arsène a écrit:Je pense que ça devrait le faire


Anéfé :) Ça le fait tout bien. Merci.

Et le TouchSensor de l'anim2 ne devrait être enabled que à la fin de l'anim1, n'est-ce pas ?
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Suivant

Retour vers Questions techniques

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron