#VRML V2.0 utf8 ## ##@ avatar with emotions ##@ swinging arm PROTO SwingingArm [ exposedField SFVec3f translation 0 0 0 exposedField SFRotation orientation 0 0 1 0 exposedField MFNode children [] eventIn MFNode addChildren eventIn MFNode removeChildren exposedField SFFloat transparency 0.5 ]{ DEF MOVEPOINT Transform { translation IS translation rotation IS orientation children [ Transform { translation -0.1 0 0 children [ Group { children [ Shape { appearance DEF GRAY Appearance { material Material { transparency IS transparency diffuseColor 0.4 0.4 0.8 emissiveColor 0.4 0.4 0.8 } } geometry Box { size 0.2 0.025 0.025 } } DEF DRAGSENSOR PlaneSensor { minPosition 0 0 maxPosition 1 1 } ] } Transform { translation -0.1 0 0 children [ Group { children [ Shape { appearance Appearance { material Material { transparency IS transparency diffuseColor 1.8 0.8 0.8 emissiveColor 1.8 0.8 0.8 } } geometry Sphere { radius 0.025 } } DEF ROTATESENSOR PlaneSensor { minPosition -0.314 -0.157 maxPosition 0 0.157 } ] } DEF ROTATEPOINT Transform { children [ Transform { translation -.125 0 0 children [ Shape { appearance USE GRAY geometry Box { size 0.25 0.025 0.025 } } DEF CONNECTPOINT Transform { translation -0.15 0 0.03 children IS children addChildren IS addChildren removeChildren IS removeChildren } ] } ] } ] } ] } ] } ##@ window script DEF SCRIPT Script { ## Window re-size events eventIn SFFloat aspectRatio ## Rotation events eventIn SFVec3f setRotateTrans eventOut SFRotation rotation_changed ## Drag events eventIn SFBool doDrag eventIn SFVec3f setDragTrans eventOut SFVec3f newPos eventOut SFRotation armRotation eventOut SFRotation correctionRotation ## Fields that need to be remembered field SFVec3f orgPos IS translation field SFVec3f pos 0 0 0 field SFRotation orgRot 0 0 1 0 field SFRotation correctionRot 0 0 1 0 ## Screen dimentions field SFFloat xCenter 0 field SFFloat yCenter 0 field SFFloat left -2 field SFFloat right 2 field SFFloat top 0.95 field SFFloat bottom -0.95 field SFFloat yfov 0.785398 field SFFloat xfov 0.785398 field SFNode node NULL ##@ javascript functions url "vrmlscript: function initialize() { setWindowRect(Browser.windowAspect); pos = orgPos; correctPosition(); } function aspectRatio(value,time) { setWindowRect(value); correctPosition(); } function setWindowRect(aspect) { if(aspect>1) { // if aspect>1, Y is constant, so X is relative to AspectRatio node = Browser.boundViewpoint; //print (' 1: ratio == ' + aspect); //yfovx = node.fieldOfView; //print (' 1: yfovx == ' + yfovx); if (yfov==0) { yfov = 0.785398; } //xfov = Math.atan(aspect*(Math.tan(yfov/2)))*2; right = (aspect*(Math.tan(yfov/2))) * 2.0 + 0.1; top = 0.95; } else { // if aspect<1, X is constant, so Y is relative to AspectRatio //xfov = Browser.boundViewpoint.fieldOfView; if(xfov==0) { xfov = 0.785398; } //yfov = Math.atan((Math.tan(yfov/2))/aspect)*2; right = 0.95; top = ((Math.tan(xfov/2))/aspect) * 2.0 + 0.1; } //print ('ratio == ' + aspect); //print ('yfov == ' + yfov); //print ('xfov == ' + xfov); //print ('angleRatio == ' + angleRatio); left = -right; bottom = -top; } function setRotateTrans (value,time) { rotA = new SFRotation(0,1,0, value.x*10); rotB = new SFRotation(1,0,0,-value.y*10); rotation_changed = rotA.multiply(rotB); } function doDrag(value,time) { if(!value) { orgPos = pos; } else { pos = orgPos; correctionRot = orgRot; } } function correctPosition() { // Snap position to edge of screen dx = 0; dy = 0; if(pos.x > xCenter) { dx = right-pos.x; } else { dx = pos.x-left; } if(pos.y < yCenter) { dy = pos.y-bottom; } else { dy = top-pos.y; } if(dx xCenter) { armRotation = new SFRotation(0,0,1,0); correctionRotation = new SFRotation(0,0,1,0); orgRot = new SFRotation(0,0,1,0); pos.x = right; } else { armRotation = new SFRotation(0,0,1, 3.14); correctionRotation = new SFRotation(0,0,1,-3.14); orgRot = new SFRotation(0,0,1, 3.14); pos.x = left; } } else /* dy top) { pos.y = top; } if(pos.x < left) { pos.x = left; } if(pos.x > right) { pos.x = right; } newPos = pos; } function setDragTrans (value,time) { rotVal = correctionRot.multVec(value); pos = new SFVec3f(); pos.x = orgPos.x + rotVal.x; pos.y = orgPos.y + rotVal.y; pos.z = orgPos.z; correctPosition(); } " } ##@ additional script Script { ## To setup some ROUTES that cannot be defined statically field SFNode script USE SCRIPT url "vrmlscript: function initialize() { Browser.addRoute(Browser,'windowAspect',script,'aspectRatio'); } function shutdown() { Browser.removeRoute(Browser,'windowAspect',script,'aspectRatio'); } " } ##@ routing ## Route sensor info to rotation script ROUTE ROTATESENSOR.translation_changed TO SCRIPT.setRotateTrans ## Route rotation to transform node ROUTE SCRIPT.rotation_changed TO ROTATEPOINT.rotation ## Route sensor info to drag functions ROUTE DRAGSENSOR.isActive TO SCRIPT.doDrag ROUTE DRAGSENSOR.trackPoint_changed TO SCRIPT.setDragTrans ## Route drag output to transform nodes ROUTE SCRIPT.newPos TO MOVEPOINT.translation ROUTE SCRIPT.armRotation TO MOVEPOINT.rotation ROUTE SCRIPT.correctionRotation TO CONNECTPOINT.rotation } ##@ emotion disc DEF EMOTION_DISC Transform { translation 0 0.94 8.15 scale 0.4 0.5 0.5 children [ Appearance { material Material { diffuseColor 0.0 0.0 0.0 } } DEF FACE_ELT Transform { scale 0.00194363 0.00238663 0.002 rotation 1 0 0 3.1415 translation -1.0 1.0 0 children [ Transform { translation 80 30 0 children DEF L_EYE_TRANS Transform { translation 329 274 0 children DEF L_EYE Sphere { radius 20 } } } Transform { translation 125 30 0 children DEF R_EYE_TRANS Transform { translation 521 272 0 children DEF R_EYE Sphere { radius 20 } } } Transform { translation 30 30 0 children DEF R_BROW_TRANS Transform { translation 514 220 0 children DEF R_BROW Extrusion { orientation 0 0 1 0 spine [ 0 0 0, 22 -19 0, 94 -1 0] scale [2 2, 10 10, 2 2] } } } Transform { translation 170 30 0 children DEF L_BROW_TRANS Transform { translation 339 220 0 children DEF L_BROW Extrusion { orientation 0 0 1 0 spine [ 0 0 0, -22 -19 0, -94 4 0] scale [2 2, 10 10, 2 2] } } } Transform { translation 0 -80 0 children Transform { translation 500 560 0 children DEF MOND_TRANS Transform { children DEF MOUTH Extrusion { orientation 0 0 1 0 spine [ -36 -38 0, 33 -20 0, 107 -41 0] scale [10 10, 10 10, 2 2] } } } } ] } DEF MOON_ANIM Script { directOutput TRUE field SFNode rBrowTrans USE R_BROW_TRANS field SFNode rBrowShape USE R_BROW field SFNode lBrowTrans USE L_BROW_TRANS field SFNode lBrowShape USE L_BROW field SFNode mouthShape USE MOUTH field MFVec3f spine [0 0 0, 0 0 0, 0 0 0] eventIn MFFloat setFrame ##@ scripting url "vrmlscript: function setFrame(values,time) { rBrowTrans.translation[0] = values[ 0]; rBrowTrans.translation[1] = values[ 1]; spine[0] = new SFVec3f(0,0,0); spine[1] = new SFVec3f(values[ 2],values[ 3],0); spine[2] = new SFVec3f( 94,values[ 4],0); rBrowShape.set_spine = spine; lBrowTrans.translation[0] = values[ 5]; lBrowTrans.translation[1] = values[ 6]; spine[0] = new SFVec3f(0,0,0); spine[1] = new SFVec3f(values[ 7],values[ 8],0); spine[2] = new SFVec3f( -94,values[ 9],0); lBrowShape.set_spine = spine; spine[0] = new SFVec3f(values[10],values[11],0); spine[1] = new SFVec3f(values[12],values[13],0); spine[2] = new SFVec3f(values[14],values[15],0); mouthShape.set_spine = spine; } " } ##@ interpolators DEF INTERPOLATOR Script { field MFFloat neutral [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] ##Joy field MFFloat joy_01 [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] field MFFloat joy_02 [339 220 22 -20 -2 514 220 -22 -20 -2 -39 -41 33 -20 110 -44 ] field MFFloat joy_03 [339 220 22 -20 -2 514 220 -22 -20 -2 -41 -44 33 -20 112 -47 ] field MFFloat joy_04 [339 220 22 -21 -3 514 220 -22 -21 -3 -44 -47 33 -21 115 -50 ] field MFFloat joy_05 [339 220 22 -21 -3 514 220 -22 -21 -4 -46 -50 33 -21 118 -53 ] field MFFloat joy_06 [339 220 22 -22 -4 514 220 -21 -22 -4 -49 -52 33 -21 120 -55 ] field MFFloat joy_07 [339 220 22 -22 -4 514 220 -21 -22 -5 -51 -55 33 -21 123 -58 ] field MFFloat joy_08 [339 220 22 -23 -5 514 220 -21 -23 -6 -54 -58 33 -22 126 -61 ] field MFFloat joy_09 [339 220 22 -23 -5 514 220 -21 -23 -6 -56 -61 33 -22 128 -64 ] field MFFloat joy_10 [339 220 22 -24 -6 514 220 -21 -24 -7 -59 -64 33 -22 131 -67 ] ##Disgust field MFFloat disgust_01 [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] field MFFloat disgust_02 [339 220 23 -15 4 514 218 -22 -16 6 -37 -34 36 -24 106 -38 ] field MFFloat disgust_03 [339 219 24 -11 9 514 217 -22 -12 13 -38 -30 39 -27 104 -36 ] field MFFloat disgust_04 [339 219 25 -7 14 514 215 -22 -9 19 -39 -26 42 -31 103 -33 ] field MFFloat disgust_05 [339 218 26 -3 19 514 213 -22 -5 26 -40 -22 45 -34 101 -31 ] field MFFloat disgust_06 [339 218 27 0 25 514 212 -21 -2 33 -42 -19 47 -38 100 -28 ] field MFFloat disgust_07 [339 217 28 4 30 514 210 -21 2 40 -43 -15 50 -41 98 -26 ] field MFFloat disgust_08 [339 217 29 8 35 514 208 -21 5 46 -44 -11 53 -45 97 -23 ] field MFFloat disgust_09 [339 216 30 12 40 514 207 -21 9 53 -45 -7 56 -48 95 -21 ] field MFFloat disgust_10 [339 216 31 16 45 514 205 -21 12 60 -46 -3 59 -52 94 -18 ] ##Anger field MFFloat anger_01 [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] field MFFloat anger_02 [340 218 27 -14 -1 513 218 -26 -14 -1 -37 -32 33 -23 108 -36 ] field MFFloat anger_03 [340 216 32 -9 -1 513 216 -31 -9 -1 -38 -27 33 -25 109 -31 ] field MFFloat anger_04 [341 214 36 -4 -1 512 214 -35 -4 -1 -39 -21 33 -28 111 -25 ] field MFFloat anger_05 [341 212 41 1 -1 511 212 -40 1 -1 -40 -15 33 -31 112 -20 ] field MFFloat anger_06 [342 209 46 6 -1 511 209 -44 6 -1 -41 -10 33 -33 113 -15 ] field MFFloat anger_07 [342 207 51 11 -1 510 207 -49 11 -1 -42 -4 33 -36 114 -10 ] field MFFloat anger_08 [343 205 55 16 -1 509 205 -53 16 -1 -43 2 33 -39 116 -4 ] field MFFloat anger_09 [343 203 60 21 -1 509 203 -58 21 -1 -44 7 33 -41 117 1 ] field MFFloat anger_10 [344 201 65 26 -1 508 201 -62 26 -1 -45 13 33 -44 118 6 ] ##Sad field MFFloat sad_01 [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] field MFFloat sad_02 [339 220 27 -19 -6 514 220 -26 -19 -6 -37 -34 33 -20 107 -36 ] field MFFloat sad_03 [339 220 32 -19 -11 514 220 -31 -19 -11 -38 -29 33 -20 107 -31 ] field MFFloat sad_04 [339 220 36 -19 -15 514 220 -35 -19 -15 -39 -25 33 -20 107 -25 ] field MFFloat sad_05 [339 220 41 -19 -20 514 220 -40 -19 -20 -40 -21 33 -20 107 -20 ] field MFFloat sad_06 [339 220 46 -19 -25 514 220 -44 -19 -25 -41 -16 33 -20 107 -15 ] field MFFloat sad_07 [339 220 51 -19 -30 514 220 -49 -19 -30 -42 -12 33 -20 107 -10 ] field MFFloat sad_08 [339 220 55 -19 -34 514 220 -53 -19 -34 -43 -8 33 -20 107 -4 ] field MFFloat sad_09 [339 220 60 -19 -39 514 220 -58 -19 -39 -44 -3 33 -20 107 1 ] field MFFloat sad_10 [339 220 65 -19 -44 514 220 -62 -19 -44 -45 1 33 -20 107 6 ] ##Fear field MFFloat fear_01 [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] field MFFloat fear_02 [340 218 27 -17 -2 513 219 -26 -18 -3 -33 -36 33 -20 107 -36 ] field MFFloat fear_03 [340 216 32 -15 -3 513 218 -31 -16 -4 -29 -35 33 -20 107 -30 ] field MFFloat fear_04 [341 214 36 -14 -4 512 216 -35 -15 -6 -26 -33 33 -20 107 -25 ] field MFFloat fear_05 [341 212 41 -12 -5 511 215 -40 -14 -8 -22 -31 33 -20 107 -20 ] field MFFloat fear_06 [342 209 46 -10 -7 511 214 -44 -12 -9 -19 -30 33 -20 107 -14 ] field MFFloat fear_07 [342 207 51 -8 -8 510 213 -49 -11 -11 -15 -28 33 -20 107 -9 ] field MFFloat fear_08 [343 205 55 -7 -9 509 211 -53 -10 -13 -12 -26 33 -20 107 -4 ] field MFFloat fear_09 [343 203 60 -5 -10 509 210 -58 -8 -14 -8 -25 33 -20 107 2 ] field MFFloat fear_10 [344 201 65 -3 -11 508 209 -62 -7 -16 -5 -23 33 -20 107 7 ] ##Surprise field MFFloat surprise_01 [339 220 22 -19 -1 514 220 -22 -19 -1 -36 -38 33 -20 107 -41 ] field MFFloat surprise_02 [339 218 22 -22 -5 514 218 -22 -22 -5 -31 -37 33 -20 101 -39 ] field MFFloat surprise_03 [339 216 22 -26 -9 514 216 -22 -26 -10 -25 -36 33 -20 96 -37 ] field MFFloat surprise_04 [339 214 22 -29 -13 514 214 -22 -29 -14 -20 -35 33 -21 90 -35 ] field MFFloat surprise_05 [339 212 22 -33 -17 514 212 -22 -33 -19 -15 -34 33 -21 85 -33 ] field MFFloat surprise_06 [339 209 22 -36 -22 514 209 -21 -36 -23 -9 -33 33 -21 79 -30 ] field MFFloat surprise_07 [339 207 22 -40 -26 514 207 -21 -40 -28 -4 -32 33 -21 74 -28 ] field MFFloat surprise_08 [339 205 22 -43 -30 514 205 -21 -43 -32 1 -31 33 -22 68 -26 ] field MFFloat surprise_09 [339 203 22 -47 -34 514 203 -21 -47 -37 7 -30 33 -22 63 -24 ] field MFFloat surprise_10 [339 201 22 -50 -38 514 201 -21 -50 -41 12 -29 33 -22 57 -22 ] ##@ additional fields field MFFloat temp [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] eventOut MFFloat setFrame eventIn MFFloat set_emotion eventIn SFFloat set_fraction url "vrmlscript: function initialize() { setFrame = neutral; } ##@ emotion interpolation function interpolateEmotions(strength,fraction,e1,e2,e3,e4) { i = 0; for(i=0;i<16;i++) { a = e1[i] + (e2[i]-e1[i])*fraction; b = e3[i] + (e4[i]-e3[i])*fraction; temp[i] = a + (b-a)*strength; } setFrame = temp; } ##@ joy function getJoy(strength) { if(strength > 9) return joy_10; else if(strength > 8) return joy_09; else if(strength > 7) return joy_08; else if(strength > 6) return joy_07; else if(strength > 5) return joy_06; else if(strength > 4) return joy_05; else if(strength > 3) return joy_04; else if(strength > 2) return joy_03; else if(strength > 1) return joy_02; else return joy_01; } ##@ disgust function getDisgust(strength) { if(strength > 9) return disgust_10; else if(strength > 8) return disgust_09; else if(strength > 7) return disgust_08; else if(strength > 6) return disgust_07; else if(strength > 5) return disgust_06; else if(strength > 4) return disgust_05; else if(strength > 3) return disgust_04; else if(strength > 2) return disgust_03; else if(strength > 1) return disgust_02; else return disgust_01; } ##@ anger function getAnger(strength) { if(strength > 9) return anger_10; else if(strength > 8) return anger_09; else if(strength > 7) return anger_08; else if(strength > 6) return anger_07; else if(strength > 5) return anger_06; else if(strength > 4) return anger_05; else if(strength > 3) return anger_04; else if(strength > 2) return anger_03; else if(strength > 1) return anger_02; else return anger_01; } ##@ sad function getSad(strength) { if(strength > 9) return sad_10; else if(strength > 8) return sad_09; else if(strength > 7) return sad_08; else if(strength > 6) return sad_07; else if(strength > 5) return sad_06; else if(strength > 4) return sad_05; else if(strength > 3) return sad_04; else if(strength > 2) return sad_03; else if(strength > 1) return sad_02; else return sad_01; } ##@ fear function getFear(strength) { if(strength > 9) return fear_10; else if(strength > 8) return fear_09; else if(strength > 7) return fear_08; else if(strength > 6) return fear_07; else if(strength > 5) return fear_06; else if(strength > 4) return fear_05; else if(strength > 3) return fear_04; else if(strength > 2) return fear_03; else if(strength > 1) return fear_02; else return fear_01; } ##@ surprise function getSurprise(strength) { if(strength > 9) return surprise_10; else if(strength > 8) return surprise_09; else if(strength > 7) return surprise_08; else if(strength > 6) return surprise_07; else if(strength > 5) return surprise_06; else if(strength > 4) return surprise_05; else if(strength > 3) return surprise_04; else if(strength > 2) return surprise_03; else if(strength > 1) return surprise_02; else return surprise_01; } ##@ get/set emotions function getEmotion(strength,fraction) { if (fraction > 5) return getJoy(strength); else if (fraction > 4) return getDisgust(strength); else if (fraction > 3) return getAnger(strength); else if (fraction > 2) return getSad(strength); else if (fraction > 1) return getFear(strength); else return getSurprise(strength); } function set_emotion(value,time) { // 0 <= value[0] < 2 PI // 0 <= value[1] < 1 fraction = (value[0] / (2*Math.PI)) * 6; strength = value[1] * 10; //Browser.print('set_emotion '+fraction+' strength '+strength); if (strength < 0.5) { setFrame = neutral; } f1 = fraction; if(f1<0) f1 += 6; f2 = fraction + 1; if(f2>6) f2 -= 6; em1 = getEmotion(strength ,f1); em2 = getEmotion(strength ,f2); em3 = getEmotion(strength+1,f1); em4 = getEmotion(strength+1,f2); while(strength>1) strength -= 1; while(fraction>1) fraction -= 1; //Browser.print('f1 '+f1+' f2 '+f2+' fraction '+fraction); interpolateEmotions(strength,fraction,em1,em2,em3,em4); } " } ] } ##@ HUD HUD { children SwingingArm { translation 2 0.5 -2 children [ Transform { scale 0.2 0.2 0.2 children [ Shape { appearance Appearance { material Material {transparency 0.5 } texture ImageTexture { url "disc.gif" } } geometry IndexedFaceSet { solid FALSE coord Coordinate { point [ -1.0 -1.0 0.0, 1.0 -1.0 0.0, 1.0 1.0 0.0, -1.0 1.0 0.0] } texCoord TextureCoordinate { point [ 0 1, 1 1, 1 0, 0 0 ] } coordIndex [ 0, 1, 2, 3, -1] texCoordIndex [ 3, 2, 1, 0, -1] } } Group { children [ DEF CONTROL_TRANS Transform { translation 0 0 0 children DEF CONTROL Sphere { radius 0.1 } } DEF DRAGSENSOR PlaneSensor { minPosition -1 -1 maxPosition 1 1 } ] } ] } ##@ interface script DEF DISC_INTERFACE Script { eventIn SFVec3f set_translation field MFFloat temp [0 0] eventOut MFFloat set_emotion url "vrmlscript: function set_translation(value,time) { x = value[0]; y = value[1]; clickRadius = Math.sqrt(x*x+y*y); if(clickRadius >= 1) clickRadius = 0.999; clickAngle = Math.atan(x/y); if(y>0) clickAngle += Math.PI; else if(x>0) clickAngle += 2*Math.PI; // Turn the wheel a bit... clickAngle += 5 *(Math.PI/6); if(clickAngle>(2*Math.PI)) clickAngle -= (2*Math.PI); // Browser.print('Angle '+clickAngle+ ' Radius '+clickRadius); temp[0] = clickAngle; temp[1] = clickRadius; set_emotion = temp; } " } ##@ routing from disc ROUTE DRAGSENSOR.translation_changed TO CONTROL_TRANS.translation ROUTE DRAGSENSOR.translation_changed TO DISC_INTERFACE.set_translation ROUTE DISC_INTERFACE.set_emotion TO INTERPOLATOR.set_emotion ROUTE INTERPOLATOR.setFrame TO MOON_ANIM.setFrame ] } } ##@ avatar scene #VRML V2.0 utf8 ## # file : hanimlegoavatar.wrl # description : lego-look avatar instance. # author : R.E. Blom # created : 20-01-2000 # modified : 24-01-2000 # remarks : hanimlegoskincolor, hanimlegoupperbodycolor and hanimlegolowerbodycolor can be redefined, e.g.: # #@define hanimlegoskincolor 1 1 1 # before #@including hanimlegoavatarproto.wrl ## # # include first part of lego-look avatar prototype. # #VRML V2.0 utf8 ##@ from lego ## # file : hanimlegoavatarproto.wrl # description : lego-look avatar prototype. # author : R.E. Blom # created : 20-01-2000 # modified : 28-01-2000 # remarks : hanimlegoavatarproto.wrl declares an Avatar proto according to the specifications # by Blaxxun. # The actual avatar geometry and animations are not hardcoded in this file, but # are #@included from separate files. # The following timers are DEFed in hanimlegoavatarproto.wrl and can be used to # trigger #@included animations: # TimeMove : triggered when the avatar moves, this timer is used to move # the avatar whenever it is not viewed in 3rd person mode or # is viewed in another browser than that of the owner of the avatar. # It is generally not necessary to use this timer to trigger # animations, use TimeWalk instead. # TimeStop : triggered when the avatar stops moving, this timer is currently # used to reset the avatar to its neutral position. # TimeWalk : triggered when the avatar moves, this timer can be used to # run a walk animation while the avatar is moving. # TimeGesture1: triggered when the avatar receives a gesture1 event. # TimeGesture2: triggered when the avatar receives a gesture2 event. # TimeGesture3: triggered when the avatar receives a gesture3 event. # TimeGesture4: triggered when the avatar receives a gesture4 event. # TimeGesture5: triggered when the avatar receives a gesture5 event. # TimeGesture6: triggered when the avatar receives a gesture6 event. # TimeGesture7: triggered when the avatar receives a gesture7 event. # TimeGesture8: triggered when the avatar receives a gesture8 event. # The cycleinterval of each timer can be set by defining timegesture1cycleinterval # through timegesture8cycleinterval respectively. ## ##@ proto joint PROTO Joint [ exposedField SFVec3f center 0 0 0 exposedField MFNode children [] exposedField MFFloat llimit [] exposedField SFRotation limitOrientation 0 0 1 0 exposedField SFString name "" exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField MFFloat stiffness [0 0 0] exposedField SFVec3f translation 0 0 0 exposedField MFFloat ulimit [] ] { Transform { center IS center children IS children rotation IS rotation scale IS scale scaleOrientation IS scaleOrientation translation IS translation } } ##@ proto segment PROTO Segment [ field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 exposedField SFVec3f centerOfMass 0 0 0 exposedField MFNode children [] exposedField SFNode coord NULL exposedField MFNode displacers [] exposedField SFFloat mass 0 exposedField MFFloat momentsOfInertia [0 0 0 0 0 0 0 0 0] exposedField SFString name "" eventIn MFNode addChildren eventIn MFNode removeChildren ] { Group { addChildren IS addChildren bboxCenter IS bboxCenter bboxSize IS bboxSize children IS children removeChildren IS removeChildren } } ##@ proto humanoid PROTO Humanoid [ field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 exposedField SFVec3f center 0 0 0 exposedField MFNode humanoidBody [] exposedField MFString info [] exposedField MFNode joints [] exposedField SFString name "" exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField MFNode segments [] exposedField MFNode sites [] exposedField SFVec3f translation 0 0 0 exposedField SFString version "1.1" exposedField MFNode viewpoints [] ] { Transform { bboxCenter IS bboxCenter bboxSize IS bboxSize center IS center rotation IS rotation scale IS scale scaleOrientation IS scaleOrientation translation IS translation children [ Group { children IS viewpoints } Group { children IS humanoidBody } ] } } ##@ proto avatar PROTO Avatar [ exposedField SFString nickname "" exposedField SFTime gesture1 0 exposedField SFTime gesture2 0 exposedField SFTime gesture3 0 exposedField SFTime gesture4 0 exposedField SFTime gesture5 0 exposedField SFTime gesture6 0 exposedField SFTime gesture7 0 exposedField SFTime gesture8 0 exposedField SFBool isAvatar TRUE exposedField SFBool isPilot FALSE exposedField SFBool isOver FALSE exposedField SFInt32 whichChoice 0 exposedField SFTime touchTime 0 exposedField SFRotation rotation 0 1 0 0 exposedField SFVec3f position 0 0 0 exposedField MFString gestureNames ["Hallo","Hey","Agree","Like","Dislike","Disagree","Not now","Good bye","Appear","Disappear"] ] ##@ avatar proto body { Switch { whichChoice IS whichChoice choice [ DEF AnimatedAvatar Transform { rotation IS rotation children [ Transform { translation 0 -1.61 0 #the origin point of the hanim lego humanoid is between the feet, #but it should be in the head. children [ ##@ humanoid DEF Humanoid Humanoid { humanoidBody [ DEF hanim_HumanoidRoot Joint { # # lichaam # name "HumanoidRoot" translation 0 0 0 rotation 0 0 1 0 center 0 0.739897 -0.0278441 children [ DEF hanim_sacroiliac Joint { # # lichaam / heupgewricht # name "sacroiliac" rotation 0 0 1 0 center 0 0.739897 -0.0278441 children [ DEF hanim_pelvis Segment { # # lichaam / heupgewricht / [bekken] # name "pelvis" } DEF hanim_l_hip Joint { # # lichaam / heupgewricht / linkerheup # name "l_hip" rotation 0 0 1 0 center 0.122 0.6391 -0.0323 children [ DEF hanim_l_thigh Segment { # # lichaam / heupgewricht / linkerheup / [linkerbovenbeen] # name "l_thigh" children [ Transform { translation 0.165 0.639138 -0.032316 rotation 0 0 1 4.71219 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material DEF legolowerbodymaterial Material { ambientIntensity 0.2 shininess 0.2 diffuseColor 0.4 0.4 0.8 } } geometry Cylinder { height 1 radius 0.5 } } } Transform { translation 0.165 0.495 -0.0605001 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 0.3 0.3 0.21 } } } ] } DEF hanim_l_knee Joint { # # lichaam / heupgewricht / linkerheup / linkerknie # name "l_knee" rotation 0 0 1 0 center 0.0738 0.345 -0.0595 children [ DEF hanim_l_calf Segment { # # lichaam / heupgewricht / linkerheup / linkerknie / [linkeronderbeen] # # (bevat ook linkervoet) # name "l_calf" children [ Transform { translation 0.165 0.345 -0.0605 rotation 0 0 1 1.5708 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Cylinder { height 0.3 radius 0.105 } } } Transform { translation 0.165 0.2775 -0.0605 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 0.3 0.135 0.21 } } } Transform { translation 0.165 0.105 -0.0155 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 0.3 0.21 0.3 } } } ] } DEF hanim_l_ankle Joint { # # lichaam / heupgewricht / linkerheup / linkerknie / linkerenkel # name "l_ankle" rotation 0 0 1 0 center 0.0645 0.0719 -0.048 children DEF hanim_l_hindfoot Segment { # # lichaam / heupgewricht / linkerheup / linkerknie / linkerenkel / [linkervoet] # # (linkervoet zit in lichaam / heupgewricht / linkerheup / linkerknie / [linkeronderbeen]) # name "l_hindfoot" } } ] } ] } DEF hanim_r_hip Joint { # # lichaam / heupgewricht / rechterheup # name "r_hip" rotation 0 0 1 0 center -0.122 0.6391 -0.0323 children [ DEF hanim_r_thigh Segment { # # lichaam / heupgewricht / rechterheup / [rechterbovenbeen] # name "r_thigh" children [ Transform { translation -0.165 0.639138 -0.032316 rotation 0 0 1 4.71219 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Cylinder { height 1 radius 0.5 } } } Transform { translation -0.165 0.495 -0.0605001 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 0.3 0.3 0.21 } } } ] } DEF hanim_r_knee Joint { # # lichaam / heupgewricht / rechterheup / rechterknie # name "r_knee" rotation 0 0 1 0 center -0.0738 0.345 -0.0595 children [ DEF hanim_r_calf Segment { # # lichaam / heupgewricht / rechterheup / rechterknie / [rechteronderbeen] # # (bevat ook rechtervoet) # name "r_calf" children [ Transform { translation -0.165 0.345 -0.0605 rotation 0 0 1 1.5708 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Cylinder { height 0.3 radius 0.105 } } } Transform { translation -0.165 0.2775 -0.0605 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 0.3 0.135 0.21 } } } Transform { translation -0.165 0.105 -0.0155 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 0.3 0.21 0.3 } } } ] } DEF hanim_r_ankle Joint { # # lichaam / heupgewricht / rechterheup / rechterknie / rechterenkel # name "r_ankle" rotation 0 0 1 0 center -0.064 0.0753 -0.0412 children DEF hanim_r_hindfoot Segment { # # lichaam / heupgewricht / rechterheup / rechterknie / rectherenkel / [ rechtervoet] # # (rechtervoet zit in lichaam / heupgewricht / rechterheup / rechterknie / [rechteronderbeen]) # name "r_hindfoot" } } ] } ] } ] } DEF hanim_vl1 Joint { # # lichaam / schouder+nekgewrichten # name "vl1" rotation 0 0 1 0 center 0 0.739897 -0.0278441 children [ DEF hanim_c7 Segment { # # lichaam / schouder+nekgewrichten / [romp] # name "l1" children [ Transform { translation 0 0.739897 -0.0278441 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material USE legolowerbodymaterial } geometry Box { size 2 0.5 1 } } } Transform { translation 0.891356 1.40461 -0.181111 rotation 1 0 0 1.571 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material DEF legoupperbodymaterial Material { ambientIntensity 0.2 shininess 0.2 diffuseColor 0.4 0.4 0.8 } } geometry IndexedFaceSet { coord Coordinate { point [ -2.4 0 0, -3.6 0 0, -3.57396 1 0, -2.3432 1 0, -4 0 2, -3.95266 1 1.9645, -2 0 2, -1.98817 1 1.9645 ] } ccw TRUE convex FALSE creaseAngle 0.524 solid TRUE coordIndex [ 0, 1, 2, 3, -1, 1, 4, 5, -1, 1, 5, 2, -1, 4, 6, 7, 5, -1, 6, 0, 3, -1, 6, 3, 7, -1, 3, 2, 5, 7, -1, 6, 4, 1, 0, -1 ] } } } ] } DEF hanim_l_shoulder Joint { # # lichaam / schouder+nekgewrichten / linkerschouder # name "l_shoulder" rotation 0 0 1 0 center 0.167 1.36 -0.0518 children [ DEF hanim_l_upperarm Segment { # # lichaam / schouder+nekgewrichten / linkerschouder / [linkerbovenarm] # name "l_upperarm" children [ Transform { translation 0.233393 1.31418 -0.032316 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Sphere { radius 0.3 } } } Transform { translation 0.345587 1.1677 -0.0292196 rotation 0.302885 -0.887656 0.346883 1.649 scale 0.3 0.3 0.3 scaleOrientation -0.316531 0.948385 0.0193552 0.873316 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Cylinder { height 1.2 radius 0.3 } } } ] } DEF hanim_l_elbow Joint { # # lichaam / schouder+nekgewrichten / linkerschouder / linkerelleboog # name "l_elbow" rotation 0 0 1 0 center 0.416 1.0323 -0.0251 children [ DEF hanim_l_forearm Segment { # # lichaam / schouder+nekgewrichten / linkerschouder / linkerelleboog / [linkeronderarm] # # (bevat ook linkerhand) # name "l_forearm" children [ Transform { translation 0.461009 1.03228 -0.0251 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Sphere { radius 0.3 } } } Transform { translation 0.498894 0.885476 0.0303936 rotation -0.831779 0.124967 0.540857 0.432 scale 0.3 0.3 0.3 scaleOrientation 0.998137 -0.0577765 0.0196204 3.92609 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Cylinder { height 1 radius 0.3 } } } Transform { translation 0.238132 0.63154 0.00206059 rotation 0.589657 -0.696072 -0.40962 1.76734 scale 0.21 0.21 0.21 scaleOrientation -0.0246322 0.999604 -0.0136335 3.14073 children Shape { appearance Appearance { material DEF legoskinmaterial Material { ambientIntensity 0.2 shininess 0.2 diffuseColor 0.4 0.4 0.8 } } geometry Extrusion { beginCap TRUE endCap TRUE ccw TRUE convex FALSE creaseAngle 0.524 solid TRUE crossSection [ 1 -1.8, 0.8 -2, 0.2 -2, 0 -1.8, 0 -1.2, 0.2 -1, 0.8 -1, 1 -1.2, 0.2 -1.2, 0.2 -1.8, 1 -1.8 ] orientation [ 0 0 1 0, 0 0 1 0 ] scale [ 1 1, 1 1 ] spine [ 0 0 0, 0 0.8 0 ] } } } ] } DEF hanim_l_wrist Joint { # # lichaam / schouder+nekgewrichten / linkerschouder / linkerelleboog / linkerpols # name "l_wrist" rotation 0 0 1 0 center 0.213 0.811 -0.0338 children DEF hanim_l_hand Segment { # # lichaam / schouder+nekgewrichten / linkerschouder / linkerelleboog / linkerpols / [linkerhand] # # (linkerhand zit in lichaam / schouder+nekgewrichten / linkerschouder / linkerelleboog / [linkeronderarm]) # name "l_hand" } } ] } ] } DEF hanim_r_shoulder Joint { # # lichaam / schouder+nekgewrichten / rechterschouder # name "r_shoulder" rotation 0 0 1 0 center -0.167 1.36 -0.0518 children [ DEF hanim_r_upperarm Segment { # # lichaam / schouder+nekgewrichten / rechterschouder / [rechterbovenarm] # name "r_upperarm" children [ Transform { translation -0.233393 1.31418 -0.032316 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Sphere { radius 0.3 } } } Transform { translation -0.345587 1.1677 -0.0292195 rotation 0.302885 0.887656 -0.346883 1.649 scale 0.3 0.3 0.3 scaleOrientation -0.625232 0.109229 -0.772757 0.526493 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Cylinder { height 1.2 radius 0.3 } } } ] } DEF hanim_r_elbow Joint { # # lichaam / schouder+nekgewrichten / rechterschouder / rechterelleboog # name "r_elbow" rotation 0 0 1 0 center -0.416 1.0323 -0.0251 children [ DEF hanim_r_forearm Segment { # # lichaam / schouder+nekgewrichten / rechterschouder / rechterelleboog / [rechteronderarm] # # (bevat ook rechterhand) # name "r_forearm" children [ Transform { translation -0.461009 1.03228 -0.0251 scale 0.3 0.3 0.3 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Sphere { radius 0.3 } } } Transform { translation -0.498894 0.885476 0.0303936 rotation -0.831779 0.124967 -0.540857 0.432 scale 0.3 0.3 0.3 scaleOrientation 0.333191 0.145916 0.9315 0.252315 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Cylinder { height 1 radius 0.3 } } } Transform { translation -0.223698 0.680385 0.152508 rotation 0.551711 -0.515997 0.655257 3.73194 scale 0.21 0.21 0.21 scaleOrientation -0.449335 -0.428707 -0.783778 1.11741 children Shape { appearance Appearance { material USE legoskinmaterial } geometry Extrusion { beginCap TRUE endCap TRUE ccw TRUE convex FALSE creaseAngle 0.524 solid TRUE crossSection [ 1 -1.8, 0.8 -2, 0.2 -2, 0 -1.8, 0 -1.2, 0.2 -1, 0.8 -1, 1 -1.2, 0.2 -1.2, 0.2 -1.8, 1 -1.8 ] orientation [ 0 0 1 0, 0 0 1 0 ] scale [ 1 1, 1 1 ] spine [ 0 0 0, 0 0.8 0 ] } } } ] } DEF hanim_r_wrist Joint { # # lichaam / schouder+nekgewrichten / rechterschouder / rechterelleboog / rechterpols # name "r_wrist" rotation 0 0 1 0 center -0.213 0.811 -0.0338 children DEF hanim_r_hand Segment { # # lichaam / schouder+nekgewrichten / rechterschouder / rechterelleboog / rechterpols / [rechterhand] # # (rechterhand zit in lichaam / schouder+nekgewrichten / rechterschouder / rechterelleboog / [rechteronderarm]) # name "r_hand" } } ] } ] } DEF hanim_vc4 Joint { # # lichaam / schouder+nekgewrichten / nekgewricht # name "vc4" rotation 0 0 1 0 center 0 1.43 -0.0458 children [ DEF hanim_c4 Segment { # # lichaam / schouder+nekgewrichten / nekgewricht / [nek] # name "c4" children Transform { translation 0 1.43435 -0.0251345 children Shape { appearance Appearance { material USE legoupperbodymaterial } geometry Cylinder { height 0.06 radius 0.12 } } } } DEF hanim_skullbase Joint { # # lichaam / schouder+nekgewrichten / nekgewricht / schedelbasis # name "skullbase" rotation 0 0 1 0 center 0 1.54 -0.0409 children DEF hanim_skull Segment { # # lichaam / schouder+nekgewrichten / nekgewricht / schedelbasis / [schedel] # name "skull" children [ Transform { translation 0 1.79214 -0.0189532 scale 0.12 0.12 0.12 children Shape { appearance Appearance { material USE legoskinmaterial } geometry Cylinder { height 0.6 radius 1 } } } # place the Transform containing the texture last in the file, # because Blaxxun Contact does not handle "USE legoskinmaterial" # correctly after it is used in an Appearance which also # defines a texture. Transform { translation 0 1.61061 -0.0215438 children Shape { appearance DEF LegoFaceAppearance Appearance { material USE legoskinmaterial ## texture ImageTexture {url "defaultface.gif"} } geometry Cylinder { height 0.2928 radius 0.18 } } } ] } } ] } ] } ] } ] ##@ joints joints [ USE hanim_HumanoidRoot, USE hanim_sacroiliac, USE hanim_l_hip, USE hanim_l_knee, USE hanim_l_ankle, USE hanim_r_hip, USE hanim_r_knee, USE hanim_r_ankle, USE hanim_vl1, USE hanim_vc4, USE hanim_skullbase USE hanim_l_shoulder, USE hanim_l_elbow, USE hanim_l_wrist, USE hanim_r_shoulder, USE hanim_r_elbow, USE hanim_r_wrist, ] ##@ info info [ "a lego-look humanoid constructed according to the specifications" "proposed by the Humanoid Animation Working Group" ] name "boxhumanoid" ##@ segments segments [ USE hanim_pelvis, USE hanim_l_thigh, USE hanim_l_calf, USE hanim_l_hindfoot, USE hanim_r_thigh, USE hanim_r_calf, USE hanim_r_hindfoot, USE hanim_c7, USE hanim_l_upperarm, USE hanim_l_forearm, USE hanim_l_hand, USE hanim_r_upperarm, USE hanim_r_forearm, USE hanim_r_hand, USE hanim_c4, USE hanim_skull ] version "1.1" } ] } ##@ time sensor DEF TimeMove TimeSensor { cycleInterval 1 } DEF TimeStop TimeSensor { cycleInterval 0.1 } DEF TimeWalk TimeSensor { cycleInterval 1 } DEF TimeGesture1 TimeSensor { startTime IS gesture1 cycleInterval 1 } DEF TimeGesture2 TimeSensor { startTime IS gesture2 cycleInterval 1 } DEF TimeGesture3 TimeSensor { startTime IS gesture3 cycleInterval 1 } DEF TimeGesture4 TimeSensor { startTime IS gesture4 cycleInterval 1 } DEF TimeGesture5 TimeSensor { startTime IS gesture5 cycleInterval 1 } DEF TimeGesture6 TimeSensor { startTime IS gesture6 cycleInterval 1 } DEF TimeGesture7 TimeSensor { startTime IS gesture7 cycleInterval 1 } DEF TimeGesture8 TimeSensor { startTime IS gesture8 cycleInterval 1 } ## # include animations here: # ##@ animations # # include animations. # #VRML V2.0 utf8 ## # file : hanimanm_walk.wrl # description : walk animation according to the Humanoid Animation Working Group humanoid standard. # author : R.E. Blom # created : 20-01-2000 # modified : 20-01-2000 # remarks : the animation is triggered by TimeWalk. # Adapted from "http://tecfa.unige.ch/vrml/objects/avatars/blaxxun/TEMPLATES/animation-templ.text" # (Copyright (c) 1997 by blaxxun interactive Inc.) ## ##@ the animations ... DEF Animations Group { children [ DEF WalkAnimation Group { children [ DEF r_shoulderRotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.4, 0 0 1 0, 1 0 0 0.4, 0 0 1 0 ] } DEF r_hipRotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, 1 0 0 0.5, 0 0 1 0, -1 0 0 0.5, 0 0 1 0 ] } DEF r_kneeRotWalk OrientationInterpolator { key [ 0, 0.15, 0.25, 0.5, 0.75, 0.85, 1 ] keyValue [ 0 0 1 0, 0 0 1 0, 1 0 0 0.6, 1 0 0 1, 0 0 1 0, 1 0 0 0.2, 0 0 1 0 ] } DEF r_elbowRotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 1 ] keyValue [ -1 0 0 0.4, -1 0 0 1, 0 0 1 0, 0 0 1 0 ] } DEF l_shoulderRotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, 1 0 0 0.4, 0 0 1 0, -1 0 0 0.4, 0 0 1 0 ] } DEF l_hipRotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.5, 0 0 1 0, 1 0 0 0.5, 0 0 1 0 ] } DEF l_kneeRotWalk OrientationInterpolator { key [ 0, 0.25, 0.35, 0.5, 0.65, 0.75, 1 ] keyValue [ 1 0 0 1, 0 0 1 0, 1 0 0 0.2, 0 0 1 0, 0 0 1 0, 1 0 0 0.6, 1 0 0 1 ] } DEF l_elbowRotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, 0 0 1 0, -1 0 0 0.4, -1 0 0 1, 0 0 1 0 ] } DEF vl5RotWalk OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, 1 0 0 0.0999996, 0 0 1 0, 1 0 0 0.0999996, 0 0 1 0 ] } DEF HumanoidRootTransWalk PositionInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 0, 0 -0.05 0, 0 0 0, 0 -0.05 0, 0 0 0 ] } ] } DEF StopAnimation Group { children [ DEF jointTransStop PositionInterpolator { key [ 0, 1 ] keyValue [ 0 0 0, 0 0 0 ] } DEF jointRotStop OrientationInterpolator { key [ 0, 1 ] keyValue [ 0 0 1 0, 0 0 1 0 ] } ] } DEF NoAnimation Group { children [ DEF r_shoulderRotNo OrientationInterpolator { key [ 0, 0.05, 0.95, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.7, -1 0 0 0.7, 0 0 1 0 ] } DEF r_elbowRotNo OrientationInterpolator { key [ 0, 0.05, 0.95, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.8, -1 0 0 0.8, 0 0 1 0 ] } DEF r_wristRotNo OrientationInterpolator { key [ 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 ] keyValue [ 0 0 1 0, -0.707107 0 -0.707107 0.8, -0.707107 0 0.707107 0.8, -0.707107 0 -0.707107 0.8, -0.707107 0 0.707107 0.8, -0.707107 0 -0.707107 0.8, -0.707107 0 0.707107 0.8, -0.707107 0 -0.707107 0.8, -0.707107 0 0.707107 0.8, -0.707107 0 -0.707107 0.8, 0 0 1 0 ] } DEF skullbaseRotNo OrientationInterpolator { key [ 0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1 ] keyValue [ 0 0 1 0, 0 1 0 0.3, 0 0 1 0, 0 -1 0 0.3, 0 0 1 0, 0 1 0 0.3, 0 0 1 0, 0 -1 0 0.3, 0 0 1 0 ] } ] } DEF HiAnimation Group { children [ DEF vl5RotHi OrientationInterpolator { key [ 0, 0.25, 0.75, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.2, -1 0 0 0.2, 0 0 1 0 ] } DEF l_shoulderRotHi OrientationInterpolator { key [ 0, 0.2, 0.4, 0.6, 0.8, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.5, -1 0 0 1, -1 0 0 1, -1 0 0 0.5, 0 0 1 0 ] } DEF l_elbowRotHi OrientationInterpolator { key [ 0, 0.2, 0.4, 0.6, 0.8, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.8, -1 0 0 1.8, -1 0 0 1.8, -1 0 0 0.8, 0 0 1 0 ] } DEF l_wristRotHi OrientationInterpolator { key [ 0, 0.4, 0.45, 0.5, 0.55, 0.6, 1 ] keyValue [ 0 0 1 0, 0 0 1 0, 0 0 1 0.8, 0 0 1 0, 0 0 -1 0.8, 0 0 1 0, 0 0 1 0 ] } ] } DEF HeyAnimation Group { children [ DEF HumanoidRootTransHey PositionInterpolator { key [ 0, 0.25, 0.4, 0.5, 0.6, 0.72, 1 ] keyValue [ 0 0 0, 0 -0.26 0, 0 0.3 0, 0 0.5 0, 0 0.3 0, 0 -0.27 0, 0 0 0 ] } DEF HumanoidRootRotHey OrientationInterpolator { key [ 0, 0.38, 0.47, 0.57, 0.66, 0.75, 1 ] keyValue [ 0 0 1 0, 0 0 1 0, -1 0 0 1.57, -1 0 0 3.14, -1 0 0 4.71, 0 0 1 0, 0 0 1 0 ] } DEF skullbaseRotHey OrientationInterpolator { key [ 0, 0.25, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, 1 0 0 0.3, 0 0 1 0, 1 0 0 0.3, 0 0 1 0 ] } DEF shoulderRotHey OrientationInterpolator { key [ 0, 0.12, 0.25, 0.375, 0.7, 0.8, 1 ] keyValue [ 0 0 1 0, 1 0 0 1, 0 0 1 0, -1 0 0 0.8, 0 0 1 0, -1 0 0 1.2, 0 0 1 0 ] } DEF elbowRotHey OrientationInterpolator { key [ 0, 0.44, 0.5, 0.75, 1 ] keyValue [ 0 0 1 0, 0 0 1 0, -1 0 0 1.6, -1 0 0 1.2, 0 0 1 0 ] } DEF hipRotHey OrientationInterpolator { key [ 0, 0.25, 0.34, 0.37, 0.5, 0.65, 1 ] keyValue [ 0 0 1 0, -1 0 0 1.3, 0 0 1 0, 0 0 1 0, -1 0 0 2.5, -1 0 0 1.5, 0 0 1 0 ] } DEF kneeRotHey OrientationInterpolator { key [ 0, 0.25, 0.34, 0.37, 0.5, 0.81, 1 ] keyValue [ 0 0 1 0, 1 0 0 2, 0 0 1 0, 0 0 1 0, 1 0 0 2.5, 1 0 0 1.6, 0 0 1 0 ] } DEF vl5RotHey OrientationInterpolator { key [ 0, 0.12, 0.5, 0.64, 0.78, 1 ] keyValue [ 0 0 1 0, 1 0 0 1.4, 0 0 1 0, 1 0 0 1.5, 1 0 0 1.6, 0 0 1 0 ] } ] } DEF YesAnimation Group { children [ DEF l_elbowRotYes OrientationInterpolator { key [ 0, 0.1, 0.9, 1 ] keyValue [ 0 0 1 0, -0.707107 0 -0.707107 2.5, -0.707107 0 -0.707107 2.5, 0 0 1 0 ] } DEF l_shoulderRotYes OrientationInterpolator { key [ 0, 0.1, 0.9, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.4, -1 0 0 0.4, 0 0 1 0 ] } DEF vc4RotYes OrientationInterpolator { key [ 0, 0.1, 0.9, 1 ] keyValue [ 0 0 1 0, 0 0 -1 0.3, 0 0 -1 0.3, 0 0 1 0 ] } ] } DEF SmileAnimation Group { children [] } DEF FrownAnimation Group { children [ DEF l_shoulderRotFrown OrientationInterpolator { key [ 0, 0.1, 0.2, 0.8, 0.9, 1 ] keyValue [ 0 0 1 0, 0 0 1 0.3, 0 0 1 0.6, 0 0 1 0.6, 0 0 1 0.3, 0 0 1 0 ] } DEF l_elbowRotFrown OrientationInterpolator { key [ 0, 0.1, 0.2, 0.8, 0.9, 1 ] keyValue [ 0 0 1 0, 0 0 -1 0.6, 0 0 -1 1.2, 0 0 -1 1.2, 0 0 -1 0.6, 0 0 1 0 ] } DEF r_shoulderRotFrown OrientationInterpolator { key [ 0, 0.1, 0.2, 0.8, 0.9, 1 ] keyValue [ 0 0 1 0, 0 0 -1 0.3, 0 0 -1 0.6, 0 0 -1 0.6, 0 0 -1 0.3, 0 0 1 0 ] } DEF r_elbowRotFrown OrientationInterpolator { key [ 0, 0.1, 0.2, 0.8, 0.9, 1 ] keyValue [ 0 0 1 0, 0 0 1 0.6, 0 0 1 1.2, 0 0 1 1.2, 0 0 1 0.6, 0 0 1 0 ] } ] } DEF NotAnimation Group { children [] } DEF ByeAnimation Group { children DEF vl5RotBye OrientationInterpolator { key [ 0, 0.5, 1 ] keyValue [ 0 0 1 0, 1 0 0 1.7, 0 0 1 0 ] } } ] } DEF Time_1 TimeSensor { loop FALSE } ##@ routing ROUTE TimeWalk.fraction_changed TO HumanoidRootTransWalk.set_fraction ROUTE TimeWalk.fraction_changed TO vl5RotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO r_shoulderRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO r_elbowRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO r_hipRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO r_kneeRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO l_shoulderRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO l_elbowRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO l_hipRotWalk.set_fraction ROUTE TimeWalk.fraction_changed TO l_kneeRotWalk.set_fraction ROUTE HumanoidRootTransWalk.value_changed TO hanim_HumanoidRoot.set_translation ROUTE r_shoulderRotWalk.value_changed TO hanim_r_shoulder.set_rotation ROUTE r_elbowRotWalk.value_changed TO hanim_r_elbow.set_rotation ROUTE r_hipRotWalk.value_changed TO hanim_r_hip.set_rotation ROUTE r_kneeRotWalk.value_changed TO hanim_r_knee.set_rotation ROUTE l_shoulderRotWalk.value_changed TO hanim_l_shoulder.set_rotation ROUTE l_elbowRotWalk.value_changed TO hanim_l_elbow.set_rotation ROUTE l_hipRotWalk.value_changed TO hanim_l_hip.set_rotation ROUTE l_kneeRotWalk.value_changed TO hanim_l_knee.set_rotation ROUTE Time_1.fraction_changed TO vl5RotHi.set_fraction ROUTE Time_1.fraction_changed TO l_shoulderRotHi.set_fraction ROUTE Time_1.fraction_changed TO l_elbowRotHi.set_fraction ROUTE Time_1.fraction_changed TO l_wristRotHi.set_fraction ROUTE l_shoulderRotHi.value_changed TO hanim_l_shoulder.set_rotation ROUTE l_elbowRotHi.value_changed TO hanim_l_elbow.set_rotation ROUTE l_wristRotHi.value_changed TO hanim_l_wrist.set_rotation ##@ and more # #VRML V2.0 utf8 ## # file : hanimanm_jump.wrl # description : jump animation according to the Humanoid Animation Working Group humanoid standard. # author : R.E. Blom # created : 20-01-2000 # modified : 20-01-2000 # remarks : the animation is triggered by TimeGesture1. # Adapted from "http://www.ballreich.net/vrml/h-anim/nancy_h-anim.wrl". ## DEF Animations Group { children [ DEF r_ankleRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.64, 0.76, 0.84, 0.88, 0.92, 0.96, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.6735, -1 0 0 0.6735, -1 0 0 0.3527, -1 0 0 0.3038, -1 0 0 0.07964, 1 0 0 0.3001, 1 0 0 0.6509, 1 0 0 0.3001, -1 0 0 0.2087, -1 0 0 0.3756, -1 0 0 0.3279, -1 0 0 0.1193, 0 0 1 0 ] } DEF r_kneeRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 1 0 0 2.005, 1 0 0 2.005, 0 0 1 0, 1 0 0 0.9507, 1 0 0 0.5845, 1 0 0 0.9054, 0 0 1 0 ] } DEF r_hipRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 1 0 0 4.433, 1 0 0 4.433, 1 0 0 4.647, -1 0 0 0.8943, -1 0 0 0.3698, 0 0 1 0, -1 0 0 0.4963, -1 0 0 0.3829, -1 0 0 0.5169, 0 0 1 0 ] } DEF l_ankleRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.64, 0.76, 0.84, 0.88, 0.92, 0.96, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.625, -1 0 0 0.625, -1 0 0 0.3364, -1 0 0 0.2742, -1 0 0 0.05078, 1 0 0 0.2833, 1 0 0 0.6667, 1 0 0 0.2833, -1 0 0 0.2108, -1 0 0 0.375, -1 0 0 0.3146, -1 0 0 0.1174, 0 0 1 0 ] } DEF l_kneeRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 1 0 0 2.047, 1 0 0 2.047, 0 0 1 0, 1 0 0 1.566, 1 0 0 0.5913, 1 0 0 0.9235, 0 0 1 0 ] } DEF l_hipRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 1 0 0 4.349, 1 0 0 4.349, 1 0 0 4.615, -1 0 0 0.9136, -1 0 0 0.3614, 0 0 1 0, -1 0 0 0.7869, -1 0 0 0.3918, -1 0 0 0.5433, 0 0 1 0 ] } DEF lower_bodyRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.76, 1 ] keyValue [ 0 0 1 0, 1 0 0 0.1892, 1 0 0 0.1892, 0 0 1 0, 0 0 1 0, 0 0 1 0 ] } DEF r_wristRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.64, 0.76, 1 ] keyValue [ 0 0 1 0, -0.0585279 0.983903 -0.168849 1.85956, -0.0585279 0.983903 -0.168849 1.85956, -0.00222418 0.99801 -0.0630095 1.46072, 0 1 0 0.497349, 0 0 1 0 ] } DEF r_elbowRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.64, 0.76, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.04151, -1 0 0 0.04151, -1 0 0 0.5855, -1 0 0 0.5852, 0 0 1 0 ] } DEF r_shoulderRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 0.9992 0.02042 0.03558 4.688, 0.9992 0.02042 0.03558 4.688, 0.9989 -0.04623 0.005159 4.079, -0.8687 -0.2525 -0.4261 1.501, -0.941 -0.2893 -0.1754 0.4788, 0 0 1 0 ] } DEF l_wristRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 0.0672928 0.989475 -0.128107 4.15574, 0.0672928 0.989475 -0.128107 4.15574, 0.00364942 0.999901 0.0135896 4.5822, 0 -1 0 0.655922, -0.00050618 -0.999999 0.0012782 1.28397, 0 0 1 0 ] } DEF l_elbowRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.64, 0.76, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.1229, -1 0 0 0.1229, -1 0 0 0.5976, -1 0 0 0.3917, 0 0 1 0 ] } DEF l_shoulderRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.64, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, -0.9987 0.02554 0.04498 1.57, -0.9987 0.02554 0.04498 1.57, 1 0.0004113 0.003055 4.114, -0.8413 0.3238 0.4329 1.453, -0.877 0.4198 0.2337 0.6009, 0 0 1 0 ] } DEF headRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.76, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.5989, -1 0 0 0.5989, -1 0 0 0.3216, 1 0 0 0.06503, 0 0 1 0 ] } DEF neckRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.76, 1 ] keyValue [ 0 0 1 0, -1 0 0 0.1942, -1 0 0 0.1942, 0 0 1 0, 1 0 0 0.2284, 0 0 1 0 ] } DEF upper_bodyRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.76, 0.88, 1 ] keyValue [ 0 0 1 0, 1 0 0 1.038, 1 0 0 1.038, -1 0 0 0.1057, 1 0 0 0.2171, 1 0 0 0.3465, 0 0 1 0 ] } DEF whole_bodyRotInterp_Jump OrientationInterpolator { key [ 0, 0.28, 0.32, 0.48, 0.64, 0.76, 1 ] keyValue [ 0 0 1 0, 1 0 0 0.3273, 1 0 0 0.3273, 0 0 1 0, 0 0 1 0, 0 0 1 0, 0 0 1 0 ] } DEF whole_bodyTranInterp_Jump PositionInterpolator { key [ 0, 0.04, 0.08, 0.12, 0.16, 0.2, 0.24, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.64, 0.76, 0.8, 0.84, 0.88, 0.92, 0.96, 1 ] keyValue [ 0 0 0, 0 -0.01264 -0.01289, 0 -0.04712 -0.03738, -0.0003345 -0.1049 -0.05353, -0.0005712 -0.1892 -0.06561, -0.0008233 -0.286 -0.06276, -0.0009591 -0.3795 -0.05148, -0.00106 -0.4484 -0.03656, -0.00106 -0.4484 -0.03656, -0.001122 -0.3269 -0.1499, -0.0008616 -0.13 -0.06358, -0.0005128 -0.03123 -0.05488, 0.0004779 0.053 0.02732, 0.0001728 0.4148 0.006873, 0 0.03045 0.02148, 0 -0.01299 -0.01057, 0 -0.06932 -0.01064, 0.0001365 -0.1037 -0.005059, 0.0001279 -0.07198 -0.007596, 0.000141 -0.01626 -0.004935, 0 0 0 ] } ] } ROUTE TimeGesture1.fraction_changed TO r_ankleRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO r_kneeRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO r_hipRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO l_ankleRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO l_kneeRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO l_hipRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO lower_bodyRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO r_wristRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO r_elbowRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO r_shoulderRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO l_wristRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO l_elbowRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO l_shoulderRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO headRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO neckRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO upper_bodyRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO whole_bodyRotInterp_Jump.set_fraction ROUTE TimeGesture1.fraction_changed TO whole_bodyTranInterp_Jump.set_fraction ROUTE r_ankleRotInterp_Jump.value_changed TO hanim_r_ankle.set_rotation ROUTE r_kneeRotInterp_Jump.value_changed TO hanim_r_knee.set_rotation ROUTE r_hipRotInterp_Jump.value_changed TO hanim_r_hip.set_rotation ROUTE l_ankleRotInterp_Jump.value_changed TO hanim_l_ankle.set_rotation ROUTE l_kneeRotInterp_Jump.value_changed TO hanim_l_knee.set_rotation ROUTE l_hipRotInterp_Jump.value_changed TO hanim_l_hip.set_rotation ROUTE lower_bodyRotInterp_Jump.value_changed TO hanim_sacroiliac.set_rotation ROUTE r_wristRotInterp_Jump.value_changed TO hanim_r_wrist.set_rotation ROUTE r_elbowRotInterp_Jump.value_changed TO hanim_r_elbow.set_rotation ROUTE r_shoulderRotInterp_Jump.value_changed TO hanim_r_shoulder.set_rotation ROUTE l_wristRotInterp_Jump.value_changed TO hanim_l_wrist.set_rotation ROUTE l_elbowRotInterp_Jump.value_changed TO hanim_l_elbow.set_rotation ROUTE l_shoulderRotInterp_Jump.value_changed TO hanim_l_shoulder.set_rotation ROUTE headRotInterp_Jump.value_changed TO hanim_skullbase.set_rotation ROUTE neckRotInterp_Jump.value_changed TO hanim_vc4.set_rotation ROUTE upper_bodyRotInterp_Jump.value_changed TO hanim_vl1.set_rotation ROUTE whole_bodyRotInterp_Jump.value_changed TO hanim_HumanoidRoot.set_rotation ROUTE whole_bodyTranInterp_Jump.value_changed TO hanim_HumanoidRoot.set_translation # # include second part of lego-look avatar prototype. # #VRML V2.0 utf8 ## # file : hanimlegoavatarproto.wrl # description : lego-look avatar prototype. # author : R.E. Blom # created : 20-01-2000 # modified : 28-01-2000 # remarks : hanimlegoavatarproto.wrl declares an Avatar proto according to the specifications # by Blaxxun. # The actual avatar geometry and animations are not hardcoded in this file, but # are #@included from separate files. # The following timers are DEFed in hanimlegoavatarproto.wrl and can be used to # trigger #@included animations: # TimeMove : triggered when the avatar moves, this timer is used to move # the avatar whenever it is not viewed in 3rd person mode or # is viewed in another browser than that of the owner of the avatar. # It is generally not necessary to use this timer to trigger # animations, use TimeWalk instead. # TimeStop : triggered when the avatar stops moving, this timer is currently # used to reset the avatar to its neutral position. # TimeWalk : triggered when the avatar moves, this timer can be used to # run a walk animation while the avatar is moving. # TimeGesture1: triggered when the avatar receives a gesture1 event. # TimeGesture2: triggered when the avatar receives a gesture2 event. # TimeGesture3: triggered when the avatar receives a gesture3 event. # TimeGesture4: triggered when the avatar receives a gesture4 event. # TimeGesture5: triggered when the avatar receives a gesture5 event. # TimeGesture6: triggered when the avatar receives a gesture6 event. # TimeGesture7: triggered when the avatar receives a gesture7 event. # TimeGesture8: triggered when the avatar receives a gesture8 event. # The cycleinterval of each timer can be set by defining 1 # through 1 respectively. ## DEF AvatarInterpolator PositionInterpolator { key [0, 1] keyValue [0 0 0, 0 0 0] } DEF AvatarScript Script { eventIn SFVec3f set_position IS position eventIn SFBool timemoveisactive eventIn SFBool timestopisactive eventOut SFTime startmove eventOut SFTime startwalk eventOut SFTime stopwalk eventOut MFVec3f keyvalues_changed exposedField SFBool ispilot IS isPilot field SFBool moveactive FALSE field SFBool newmove FALSE field SFVec3f curposition 0 0 0 field MFVec3f keyvalues [] field SFNode avatartransform USE AnimatedAvatar field SFNode humanoid USE Humanoid field SFRotation defrotation 0 0 1 0 directOutput TRUE url "vrmlscript: function set_position(value, timestamp) { if ((curposition[0]==value[0])&&(curposition[1]==value[1])&&(curposition[2]==value[2])) return; curposition=value; if (ispilot) { avatartransform.set_translation=value; startwalk=timestamp; stopwalk=timestamp+1; } else if (moveactive) newmove=true; else move(timestamp); } function timemoveisactive(value, timestamp) { moveactive=value; if (!moveactive) { if (newmove) { newmove=false; move(timestamp); } else stopwalk=timestamp; } } function timestopisactive(value, timestamp) { if (!value) { for (i=0; i<17; i++) humanoid.joints[i].rotation=defrotation; } } function move(timestamp) { if(!ispilot) { keyvalues[0]=avatartransform.translation_changed; keyvalues[1]=curposition; keyvalues_changed=keyvalues; startmove=timestamp; startwalk=timestamp; } } " } ] } ] } ROUTE AvatarScript.keyvalues_changed TO AvatarInterpolator.set_keyValue ROUTE AvatarScript.startmove TO TimeMove.set_startTime ROUTE AvatarScript.startwalk TO TimeWalk.set_startTime ROUTE AvatarScript.stopwalk TO TimeWalk.set_stopTime ROUTE AvatarScript.stopwalk TO TimeStop.set_startTime ROUTE AvatarInterpolator.value_changed TO AnimatedAvatar.set_translation ROUTE TimeMove.fraction_changed TO AvatarInterpolator.set_fraction ROUTE TimeMove.isActive TO AvatarScript.timemoveisactive ROUTE TimeStop.isActive TO AvatarScript.timestopisactive } Transform { translation 0 1 8 children Avatar { } } ##