#VRML V2.0 utf8 EXTERNPROTO Logo [ exposedField SFVec3f translation exposedField SFVec3f scale ] ["@vr-web3d-willem-logo.wrl#Logo"] EXTERNPROTO ipod [ exposedField SFVec3f scale exposedField SFVec3f translation exposedField MFString coverPic ] ["@vr-web3d-willem-ipod.wrl#ipod"] EXTERNPROTO Frame [ exposedField MFVec3f spine exposedField MFVec2f crossSection exposedField SFVec3f translation exposedField SFVec3f scale exposedField SFRotation rotation ] ["@vr-web3d-willem-frame.wrl#Frame"] ## proto monitor PROTO monitor [ exposedField SFVec3f translation 0 0 0 exposedField SFVec3f scale 1 1 1 eventIn MFString string ] { Transform { translation IS translation scale IS scale children [ Shape { appearance Appearance { material Material { diffuseColor 1 1 1 } } geometry DEF text Text { string [ "click on an element", "of the iPod to get some", "information about that", "element or click the blue", "sphere for a guided tour!" ] fontStyle FontStyle { justify "MIDDLE" } } } ] } Script { directOutput TRUE eventIn MFString string IS string field SFNode text USE text url "vrmlscript: function string(value,time) { text.string = value; } " } } PROTO product[ exposedField SFVec3f translation 0 0 0 exposedField MFString coverPic "ipodfront2.png" ] { ## iPod placing Transform { translation IS translation children [ DEF TIMER TimeSensor { cycleInterval 40 } DEF FRAMESCRIPT Script { eventIn SFTime screenTouch eventIn SFTime clickWheelTouch eventIn SFTime holdButtonTouch eventIn SFTime headPhoneTouch eventIn SFTime dockTouch eventIn SFFloat animationFrameInfo eventOut SFInt32 output url "javascript: function initialize() { output = -1; } function screenTouch(value, time) { output = 0; } function clickWheelTouch(value, time) { output = 1; } function holdButtonTouch(value, time) { output = 2; } function headPhoneTouch(value, time) { output = 3; } function dockTouch(value, time) { output = 4; } function animationFrameInfo(value, time) { if(value < 0.1) { output = -1; } else if(value < 0.2) { output = 0; } else if(value < 0.3) { output = 1; } else if(value < 0.4) { output = 1; } else if(value < 0.5) { output = 2; } else if(value < 0.6) { output = 3; } else if(value < 0.75) { output = 4; } else { output = -1; } } " } DEF SCRIPT Script { directOutput TRUE eventIn SFTime screenTouch eventIn SFTime clickWheelTouch eventIn SFTime holdButtonTouch eventIn SFTime headPhoneTouch eventIn SFTime dockInputTouch eventIn SFFloat animationScreenInfo eventOut MFString result field MFString screenInfo ["This is the display.", "It can display photos, videos", "and, of course, the song", "you're playing."] field MFString clickWheelInfo ["This is the clickwheel.", "Use the buttons to browse", "through your music."] field MFString backInfo ["This is the backside", "of the iPod."] field MFString holdButtonInfo ["This is the hold button. ", "When your iPod is on hold,","no other buttons can be used."] field MFString headPhoneInfo ["This is where the headphones", "go into your iPod."] field MFString dockInputInfo ["This is where you place your", "iPod in your Dock or where", "you put the cable that", "connects your iPod to", "your computer."] field MFString animInfoStart ["Welcome to this iPod", "guided tour.", "We will show you what elements", "this iPod consists of."] field MFString animInfoEnd ["This concludes the iPod", "guided tour.", "Thank you for your attention."] field MFString reset [ "click on an element", "of the iPod to get some", "information about that", "element or click the blue", "sphere for a guided tour!" ] url "javascript: function screenTouch(value, time) { result = screenInfo; } function clickWheelTouch(value, time) { result = clickWheelInfo; } function holdButtonTouch(value, time) { result = holdButtonInfo; } function headPhoneTouch(value, time) { result = headPhoneInfo; } function dockInputTouch(value, time) { result = dockInputInfo; } function animationScreenInfo(value, time) { if(value < 0.1) { result = animInfoStart; } else if(value < 0.2) { result = screenInfo; } else if(value < 0.3) { result = clickWheelInfo; } else if(value < 0.4) { result = backInfo; } else if(value < 0.5) { result = holdButtonInfo; } else if(value < 0.6) { result = headPhoneInfo; } else if(value < 0.75) { result = dockInputInfo; } else if(value < 1){ result = animInfoEnd; } else { result = reset; } } " } DEF SENSOR SphereSensor { } DEF ORIINT OrientationInterpolator { key [0, 0.1, 0.2, 0.3, 0.34, 0.4, 0.43, 0.5, 0.6, 0.62, 0.75, 1.0] keyValue [ 0 1 0 0 0 1 0 0.1 0 1 0 0 0 0 1 0.3 0 1 0 3.14 0 1 0 3.00 1 0 0 1.57 1 0 0 1.40 1 0 0 1.57 1 0 0 4.71 1 0 0 4.60 1 0 0 6.28 ] } DEF IPOD Transform { children [ ipod{ coverPic IS coverPic } Transform { ##iPod screen translation 0.028 0.67 0.15 children [ DEF SCREENTOUCH TouchSensor { } Shape { appearance Appearance { material Material { } texture DEF MOVIE MovieTexture { url "the_wall_1.mpg" speed 0.5 } } geometry Box { size 1.30 0.98 0.000001 } } ] } Transform { ##iPod clickWheel translation 0.05 -0.55 0.2 scale 1 1 0.000001 children [ DEF CLICKWHEELTOUCH TouchSensor { } Shape { appearance Appearance { material Material { transparency 1 } } geometry Box { ## better than a sphere size 1 1 0.000001 } } ] } Transform { ##hold button translation -0.4 1.3 0 children [ DEF HOLDBUTTONTOUCH TouchSensor { } Shape { appearance Appearance { texture ImageTexture { url "hold.png" } } geometry Box { size 0.5 0.000001 0.15 } } ] } Transform { ##headphone input translation 0.5 1.3 0 children [ DEF HEADPHONETOUCH TouchSensor { } Shape { appearance Appearance { texture ImageTexture { url "micInput.png" } } geometry Box { size 0.25 0.000001 0.15 } } ] } Transform { ##dock input translation 0 -1.3 0 children [ DEF DOCKINPUTTOUCH TouchSensor { } Shape { appearance Appearance { texture ImageTexture { url "dockInput.png" } } geometry Box { size 0.5 0.000001 0.15 } } ] } DEF SWITCH Switch { choice [ Frame { ## around the display translation -0.625 0.18 0.1 scale 0.13 0.1 0.1 #spine [0 0 0, 0 9 0, 13 9 0, 13 0 0, 0 0 0] } Frame { ## around the clickWheel translation -0.5 -1.05 0.1 } Frame { ## around the hold button translation -0.67 1.32 -0.09 scale 0.05 0.02 0.1 rotation 1 0 0 1.57 #spine [0 0 0, 0 1.2 0, 6 1.2 0, 6 0 0, 0 0 0] } Frame { ## around the headphones input translation 0.37 1.32 -0.09 scale 0.03 0.02 0.1 rotation 1 0 0 1.57 #spine [0 0 0, 0 1.2 0, 2 1.2 0, 2 0 0, 0 0 0] } Frame { ## around the dock input translation -0.27 -1.27 -0.09 scale 0.05 0.02 0.1 rotation 1 0 0 1.57 #spine [0 0 0, 0 1.2 0, 6 1.2 0, 6 0 0, 0 0 0] } ] } ] } Transform { translation -0.05 -1.8 0 scale 0.2 0.2 0.2 children [ DEF ANIMATIONTOUCH TouchSensor { } Shape { appearance Appearance { material Material { diffuseColor 0.1 0 1 } } geometry Sphere { } } ] } ## Monitor placing DEF MON monitor { scale 0.3 0.3 0.3 translation 2.7 1 0 } ] } ROUTE SENSOR.rotation_changed TO IPOD.rotation ROUTE SCREENTOUCH.touchTime TO SCRIPT.screenTouch ROUTE CLICKWHEELTOUCH.touchTime TO SCRIPT.clickWheelTouch ROUTE HOLDBUTTONTOUCH.touchTime TO SCRIPT.holdButtonTouch ROUTE HEADPHONETOUCH.touchTime TO SCRIPT.headPhoneTouch ROUTE DOCKINPUTTOUCH.touchTime TO SCRIPT.dockInputTouch ROUTE SCREENTOUCH.touchTime TO FRAMESCRIPT.screenTouch ROUTE CLICKWHEELTOUCH.touchTime TO FRAMESCRIPT.clickWheelTouch ROUTE HOLDBUTTONTOUCH.touchTime TO FRAMESCRIPT.holdButtonTouch ROUTE HEADPHONETOUCH.touchTime TO FRAMESCRIPT.headPhoneTouch ROUTE DOCKINPUTTOUCH.touchTime TO FRAMESCRIPT.dockTouch ROUTE FRAMESCRIPT.output TO SWITCH.whichChoice ROUTE SCREENTOUCH.touchTime TO MOVIE.startTime ROUTE SCRIPT.result TO MON.string ##animatie... ROUTE TIMER.fraction_changed TO ORIINT.set_fraction ROUTE ORIINT.value_changed TO IPOD.rotation ROUTE ANIMATIONTOUCH.touchTime TO TIMER.startTime ROUTE TIMER.fraction_changed TO SCRIPT.animationScreenInfo ROUTE TIMER.fraction_changed TO FRAMESCRIPT.animationFrameInfo } product { translation -1.5 0 0 } ## Logo placing Logo{ translation 2 -1.5 0 scale 0.5 0.5 0.5 } Viewpoint { position 0 0 5 } NavigationInfo { type "NONE" }