#VRML V2.0 utf8 PROTO Mouth [ field SFVec3f position 0 0 0 field SFVec3f size 1 1 1 field SFColor color 1 1 1 field SFFloat mood 0 eventIn SFFloat set_mood ] { Group { children [ Transform { translation IS position scale IS size children Shape { appearance Appearance { material Material { diffuseColor IS color } } geometry IndexedFaceSet { convex FALSE coord DEF COORD Coordinate { point [ 4 0 0, 2 1 0, -2 1 0, -4 0 0, -2 -1 0, 2 -1 0 ] } coordIndex [ 0 1 2 3 4 5 ] } } } DEF SCRIPT Script { eventIn SFFloat set_mood IS set_mood eventOut MFVec3f coords_changed field SFFloat mood IS mood field MFVec3f pts [ 4 0 0, 2 1 0, -2 1 0, -4 0 0, -2 -1 0, 2 -1 0 ] url "vrmlscript: function set_mood(val) { mood = 1 - val; cornerHeight = mood*4-2; pts[0] = new SFVec3f(4, cornerHeight, 0); pts[3] = new SFVec3f(-4, cornerHeight, 0); coords_changed = pts; } " } ] } ROUTE SCRIPT.coords_changed TO COORD.point }