Face

#VRML V2.0 utf8

Viewpoint { position 0 1.5 15 }
NavigationInfo { type "EXAMINE" }

EXTERNPROTO Square [ 
		    field SFRotation rotation
		    field SFVec3f size
		    field SFVec3f position
		    field SFColor color
		    eventIn SFRotation set_rotation
		   ] "square.wrl"

EXTERNPROTO Eye [ 
	   field SFTime blinkFreq
	   field SFVec3f size
	   field SFVec3f position
	   eventIn SFTime set_blinkFreq
	   eventIn SFFloat set_lookHorizontal
	   eventIn SFFloat set_lookVertical
	  ] "eye.wrl"


EXTERNPROTO Mouth [
	     field SFVec3f position
	     field SFVec3f size
	     field SFColor color
	     field SFFloat mood
	     eventIn SFFloat set_mood
	    ] "mouth.wrl"

PROTO Face [
	    field SFFloat mood 0
	    field SFTime blinkFreq 5
	    eventIn SFFloat set_mood
	    eventIn SFTime set_blinkFreq
	    eventIn SFFloat set_lookHorizontal
	    eventIn SFFloat set_lookVertical
	   ]
{
   Group {
      children [
	 Square { 
	    size 3 4 1 
	    color .3 .3 .3
	 }
	 DEF MOUTH Mouth {
	    position 0 -2 .1
	    set_mood IS set_mood
	    size .5 .5 .5
	 }
	 DEF L_BROW Square {
	    position 1.5 3 .15
	    color .1 .1 .1
	    size 1.25 .1 1
	 }
	 DEF R_BROW Square {
	    position -1.5 3 .15
	    color .1 .1 .1
	    size 1.25 .1 1
	 }
	 DEF L_EYE Eye { 
	    position 1 1 .1
	    set_lookHorizontal IS set_lookHorizontal
	    set_lookVertical IS set_lookVertical
	    blinkFreq IS blinkFreq
	    set_blinkFreq IS set_blinkFreq
	 }
	 DEF R_EYE Eye { 
	    position -1 1 .1 
	    set_lookHorizontal IS set_lookHorizontal
	    set_lookVertical IS set_lookVertical
	    blinkFreq IS blinkFreq
	    set_blinkFreq IS set_blinkFreq
	 }
	 DEF SCRIPT Script {
	    eventIn SFFloat set_mood IS set_mood
	    eventOut SFRotation l_brow_rotation
	    eventOut SFRotation r_brow_rotation
	    field SFFloat mood IS mood
	    url "vrmlscript:

function set_mood(val) {
   mood = val;
   l_brow_rotation = new SFRotation(0, 0, 1, -1.57 * mood + .79);
   r_brow_rotation = new SFRotation(0, 0, 1,  1.57 * mood - .79);
}

"
	 }
	]
   }
   ROUTE SCRIPT.l_brow_rotation TO L_BROW.set_rotation
   ROUTE SCRIPT.r_brow_rotation TO R_BROW.set_rotation
}

DEF FACE Face {}

EXTERNPROTO Slider [ 
		    field SFFloat mult 
		    field SFVec3f position
		    eventOut SFFloat value_changed 
		    eventOut SFTime timeValue_changed
		   ] "slider.wrl"

DEF SLIDER1 Slider { mult 9  position -.1 .2 -.5 }
ROUTE SLIDER1.timeValue_changed TO FACE.set_blinkFreq

DEF SLIDER2 Slider { mult 1 position -.1 .175 -.5 }
ROUTE SLIDER2.value_changed TO FACE.set_lookHorizontal

DEF SLIDER3 Slider { mult 1  position -.1 .15 -.5 }
ROUTE SLIDER3.value_changed TO FACE.set_lookVertical

DEF SLIDER4 Slider { mult 1  position -.1 .125 -.5 }
ROUTE SLIDER4.value_changed TO FACE.set_mood


mrl