##:@* conversation ## ##@ extern object EXTERNPROTO object { exposedField SFColor color exposedField SFFloat transparency exposedField SFNode node exposedField SFTime cycle ][ "@vr-proto-object.wrl#object" ] ##@ extern bulb EXTERNPROTO bulb [ eventIn MFString message exposedField SFInt32 type exposedField SFColor text exposedField SFVec3f scale exposedField SFVec3f translation exposedField MFString string exposedField SFColor color exposedField SFFloat transparency exposedField SFVec3f text_scale exposedField SFVec3f text_translation ][ "@vr-proto-bulb.wrl#bulb" ] ##@ extern repertoire EXTERNPROTO repertoire [ eventIn SFInt32 next eventOut MFString string exposedField SFInt32 max exposedField MFString u01 exposedField MFString u02 exposedField MFString u03 exposedField MFString u04 exposedField MFString u05 exposedField MFString u06 exposedField MFString u07 exposedField MFString u08 exposedField MFString u09 exposedField MFString u10 exposedField MFString u11 exposedField MFString u12 ][ "@vr-proto-repertoire.wrl#repertoire" ] ##@ default right bulb DEF b1 bulb { scale 3 1 1 translation -1 1 0 color 0.7 0.2 0.2 string [ "well" "eh" ] text 0 1 1 transparency 0.2 text_scale 0.7 1 1 } ##@ default left bulb DEF b2 bulb { type 1 scale 2 1 1 translation 1 1 0 text 1 1 0 color 0 1 1 string [ "hi" ] transparency 0.5 text_scale 0.8 1 1 text_translation -1 0 0 } ##@ proto conversation PROTO conversation [ ## "@vr-extern-conversation.wrl" exposedField SFInt32 switch 0 exposedField SFColor color 0 0 1 exposedField SFFloat transparency 0 exposedField SFNode node NULL exposedField SFTime cycle 1 exposedField SFVec3f translation 0 0 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation rotation 0 0 1 0 exposedField MFNode children NULL eventIn MFNode addChildren eventIn MFNode removeChildren exposedField MFString scene ["@vr-box.wrl"] exposedField SFBool reverse TRUE exposedField SFNode p1 NULL exposedField SFNode p2 NULL exposedField SFNode b1 USE b1 exposedField SFNode b2 USE b2 exposedField SFTime speed 3 ## ignore those exposedField SFInt32 round 0 exposedField SFInt32 delay 3 exposedField SFBool enabled FALSE exposedField SFBool ready FALSE ]{ DEF root Group { children [ Transform { translation IS translation scale IS scale rotation IS rotation children [ Group { children IS children addChildren IS addChildren removeChildren IS removeChildren } DEF touch TouchSensor { } Switch { whichChoice IS switch choice [ object { color IS color transparency IS transparency node IS node cycle IS cycle } ] } Inline { url IS scene } ] } ]} ##@ time DEF time TimeSensor { enabled TRUE loop TRUE cycleInterval IS speed } ##@ scenario DEF scenario Script { directOutput TRUE eventIn SFTime cycle eventIn SFTime touch eventIn MFString message field SFNode root USE root field SFBool reverse IS reverse field SFNode p1 IS p1 field SFNode p2 IS p2 field SFNode b1 IS b1 field SFNode b2 IS b2 field SFNode hold NULL field MFString s1 [ "... " ] field MFString s2 [ "... " ] field SFInt32 toggle 0 field SFInt32 start 0 field SFInt32 delay 0 field SFInt32 round IS round field SFBool enabled IS enabled field SFBool ready IS ready field SFInt32 turn 1 url "javascript: function initialize() { root.addChildren = new MFNode(b1); root.addChildren = new MFNode(b2); if (!reverse) { Browser.addRoute(p1,'string',b1,'message'); Browser.addRoute(p2,'string',b2,'message'); } else { Browser.addRoute(p1,'string',b2,'message'); Browser.addRoute(p2,'string',b1,'message'); } } function shutdown() { if (!reverse) { Browser.deleteRoute(p1,'string',b1,'message'); Browser.deleteRoute(p2,'string',b2,'message'); } else { Browser.deleteRoute(p1,'string',b2,'message'); Browser.deleteRoute(p2,'string',b1,'message'); } } function message(value) { //print('message ' + value); } ##@ touch function touch(value) { if (toggle == 0) { toggle = 1; ready = TRUE; } else if (toggle == 1) { toggle = 0; ready = FALSE; enabled = FALSE; } } ##@ taking turns function cycle(value) { if (enabled) { if (turn == 1) { round++; turn = 2; b2.string = s1; p1.next = 1; } else if (turn == 2) { turn = 1; b1.string = s1; p2.next = 1; if (round >= p1.max) { enabled = FALSE; ready = FALSE; start = 0; } } } else if (ready) { start++; if (start > delay) enabled = TRUE; } } " } ## end script ##@ event routing ROUTE touch.touchTime TO scenario.touch ROUTE time.cycleTime TO scenario.cycle } ## end proto ##@ participant 1 DEF p1 repertoire { max 12 u01 [ "how" "are" "you?" ] u02 [ "tell" "me" "..." ] u03 [ "what do" "you think" "of" ] u04 [ "the 11th" "of september" "!" ] u05 [ "of course!" ] u06 [ "please" "speak out!" ] u07 [ "now," "what do you" "think?" ] u08 [ "what" "about" "terrorism?" ] u09 [ "yes eh" "violence ..." ] u10 [ "like in" "New York?" ] u11 [ "americans" "you mean?" ] u12 [ "" "what?" ] } ##@ participant 2 DEF p2 repertoire { max 12 u01 [ "fine" "thank" "you" ] u02 [ "yes" "eh" "..." ] u03 [ "what?" "..." ] u04 [ "the crash" "you mean?" ] u05 [ "well eh" "..." ] u06 [ "yes eh," "I think ..." ] u07 [ "I think" "that" "eh terrorism" "..." ] u08 [ "acts" "of" "violence" ] u09 [ "against" "humanity" "..." ] u10 [ "against" "innocent" "citizens" ] u11 [ "right!" "and I think" "that .." ] u12 [ "I'll miss" "the" "skyline" ] } ##@ final scene ##Fog { visibilityRange 100 color 0 0 1 } conversation { p1 USE p1 p2 USE p2 scene "@vr-box.wrl" speed 2.5 } NavigationInfo { type ["WALK","ANY"] } DEF camera Viewpoint { position 0 0 10 } Background { groundAngle [1.57] skyAngle [1.57] groundColor [0 .3 0, .3 .4 .3] skyColor [0 0 .3, .3 .3 .4] } ##