<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersive' version='3.0 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' http://www.web3d.org/specifications/x3d-3.0.xsd '>
<head>
<meta name='titlecontent='PinballTable.x3d'/>
<meta name='descriptioncontent='A pinball table with some ball animations.'/>
<meta name='creatorcontent='Jiradett Kerdsri and Kacha Jitpanya'/>
<meta name='createdcontent='6 August 2001'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name='Imagecontent='PinballTableModel.png'/>
<meta name='referencecontent=' http://www.pinballrebel.com/game/pins/tommy/tommy_pinball.htm '/>
<meta name='Imagecontent=' http://www.pinballrebel.com/game/pins/tommy/tombg.jpg '/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/PinballTable.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<WorldInfo title='PinballTable.x3d'/>
<Group>
<!-- table -->
<Transform center='0 0 -4rotation='1 0 0 0.25'>
<Group>
<Transform>
<Shape>
<Box size='4.5 0.2 8'/>
<Appearance>
<Material diffuseColor='1 0 0'/>
<ImageTexture DEF='TommyPinballGame'
  url=' "pinballFiles/TommyPinballGame.jpg" "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/pinballFiles/TommyPinballGame.jpg" '/>
</Appearance>
</Shape>
<!-- side beam -->
<Transform translation='2.25 0 0'>
<Shape DEF='sideBeam'>
<Box size='0.3 0.6 8.8'/>
<Appearance DEF='WoodAppearance'>
<ImageTexture
  url=' "woodTexture.jpg" "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/woodTexture.jpg" '/>

<Material diffuseColor='1 0 0'/>
</Appearance>
</Shape>
</Transform>
<!-- side beam2 -->
<Transform translation='-2.25 0 0'>
<Shape USE='sideBeam'/>
</Transform>
<!-- back of the table -->
<Transform translation='0 -0.198 0'>
<Shape>
<Box size='4.5 0.2 7.6'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<!-- circle -->
<Transform translation='0 .17 -0.72'>
<Shape DEF='cylinder'>
<Cylinder height='.15radius='.2'/>
<Appearance>
<!-- ROUTE information for BALL_COLOR_2 node:  [from COLOR_PATH_2.value_changed to set_emissiveColor ] -->
<Material DEF='BALL_COLOR_2'/>
</Appearance>
</Shape>
<Transform translation='-0.36 0 -0.66'>
<Shape USE='cylinder'/>
</Transform>
<Transform translation='0.38 0 -0.82'>
<Shape USE='cylinder'/>
</Transform>
<Transform translation='-1.57 0 -2.03'>
<Shape USE='cylinder'/>
</Transform>
<!-- ROUTE information for CLOCK_2 node:  [from fraction_changed to COLOR_PATH_2.set_fraction ] -->
<TimeSensor DEF='CLOCK_2cycleInterval='2.4loop='true'/>
<!-- ROUTE information for COLOR_PATH_2 node:  [from CLOCK_2.fraction_changed to set_fraction ] [from value_changed to BALL_COLOR_2.set_emissiveColor ] -->
<ColorInterpolator DEF='COLOR_PATH_2key='0.0 0.5 0.5 1.0keyValue='0 1 0 0 1 0 0 0 1 0 0 1'/>
</Transform>
<!-- center circle -->
<Transform translation='0 .1 2.05'>
<Shape>
<Cylinder height='.2radius='.54'/>
<Appearance>
<ImageTexture
  url=' "pinballFiles/center.jpg" "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/pinballFiles/center.jpg" '/>

<!-- ROUTE information for BALL_COLOR_1 node:  [from COLOR_PATH_1.value_changed to set_emissiveColor ] -->
<Material DEF='BALL_COLOR_1'/>
</Appearance>
</Shape>
<!-- ROUTE information for CLOCK_1 node:  [from fraction_changed to COLOR_PATH_1.set_fraction ] -->
<TimeSensor DEF='CLOCK_1cycleInterval='2loop='true'/>
<!-- ROUTE information for COLOR_PATH_1 node:  [from CLOCK_1.fraction_changed to set_fraction ] [from value_changed to BALL_COLOR_1.set_emissiveColor ] -->
<ColorInterpolator DEF='COLOR_PATH_1key='0.0 0.5 0.5 1.0keyValue='1 0 0 1 0 0 0 0 1 0 0 1'/>
</Transform>
<!-- beam -->
<Transform translation='0 0 4.25'>
<Shape DEF='beam'>
<Box size='4.5 0.6 0.3'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
</Transform>
<!-- overhead light -->
<DirectionalLight direction='0 -1 0intensity='0.7'/>
<!-- blinking route for center -->
<ROUTE fromNode='CLOCK_1fromField='fraction_changedtoNode='COLOR_PATH_1toField='set_fraction'/>
<ROUTE fromNode='COLOR_PATH_1fromField='value_changedtoNode='BALL_COLOR_1toField='set_emissiveColor'/>
<!-- blinking route for small circle -->
<ROUTE fromNode='CLOCK_2fromField='fraction_changedtoNode='COLOR_PATH_2toField='set_fraction'/>
<ROUTE fromNode='COLOR_PATH_2fromField='value_changedtoNode='BALL_COLOR_2toField='set_emissiveColor'/>
</Group>
<!-- ball -->
<Group>
<!-- ROUTE information for BALL1 node:  [from PosBall1.value_changed to set_translation ] [from PosFlip1_1.value_changed to set_translation ] [from PosFlip1_2.value_changed to set_translation ] [from PosFlip1_3.value_changed to set_translation ] [from PosFlip1_4.value_changed to set_translation ] [from PosFlip2_1.value_changed to set_translation ] [from PosFlip2_2.value_changed to set_translation ] [from PosFlip2_3.value_changed to set_translation ] [from PosFlip2_4.value_changed to set_translation ] -->
<Transform DEF='BALL1translation='1.8 .2 3.6'>
<Shape>
<Appearance>
<Material diffuseColor='1 0 0'/>
</Appearance>
<Sphere radius='.1'/>
</Shape>
</Transform>
<!-- ROUTE information for Touch node:  [from touchTime to Clock.set_startTime ] -->
<TouchSensor DEF='Touchdescription='ball 1 - touch to activate'/>
</Group>
<!-- stick1 -->
<Group>
<!-- ROUTE information for stck1 node:  [from orienFlip1.value_changed to set_rotation ] -->
<Transform DEF='stck1rotation='0 1 0 .67scale='1 2 1translation='.5 .2 3.8'>
<Shape DEF='stick'>
<Appearance>
<Material diffuseColor='.8 .8 .8'/>
</Appearance>
<Extrusion creaseAngle='0.785crossSection='0 0.1 0.37 0.11 0.44 0.07 0.45 0 0.44 -0.07 0.37 -0.11 0 -0.1 -0.2 -0.08 -0.32 -0.06 -0.38 -0.04 -0.4 0 -0.38 0.04 -0.32 0.06 -0.2 0.08 0 0.1spine='0 -0.03 0 0 0.03 0'/>
</Shape>
</Transform>
<!-- ROUTE information for Touch1 node:  [from touchTime to routeSelecter1.set_startTime ] [from touchTime to ClockOrient1.set_startTime ] -->
<TouchSensor DEF='Touch1description='stick 1 - touch to activate'/>
</Group>
<!-- stick2 -->
<Group>
<!-- ROUTE information for stck2 node:  [from orienFlip2.value_changed to set_rotation ] -->
<Transform DEF='stck2rotation='0 1 0 2.47scale='1 2 1translation='-0.5 .2 3.8'>
<Shape USE='stick'/>
</Transform>
<!-- ROUTE information for Touch2 node:  [from touchTime to routeSelecter2.set_startTime ] [from touchTime to ClockOrient2.set_startTime ] -->
<TouchSensor DEF='Touch2description='stick 2 - touch to activate'/>
</Group>
</Transform>
<!-- ROUTE information for Clock node:  [from Touch.touchTime to set_startTime ] [from fraction_changed to PosBall1.set_fraction ] -->
<TimeSensor DEF='ClockcycleInterval='6'/>
<!-- ROUTE information for Clock1_1 node:  [from routeSelecter1.startTime1 to set_startTime ] [from fraction_changed to PosFlip1_1.set_fraction ] -->
<TimeSensor DEF='Clock1_1cycleInterval='3'/>
<!-- ROUTE information for Clock1_2 node:  [from routeSelecter1.startTime2 to set_startTime ] [from fraction_changed to PosFlip1_2.set_fraction ] -->
<TimeSensor DEF='Clock1_2cycleInterval='3'/>
<!-- ROUTE information for Clock1_3 node:  [from routeSelecter1.startTime3 to set_startTime ] [from fraction_changed to PosFlip1_3.set_fraction ] -->
<TimeSensor DEF='Clock1_3cycleInterval='3'/>
<!-- ROUTE information for Clock1_4 node:  [from routeSelecter1.startTime4 to set_startTime ] [from fraction_changed to PosFlip1_4.set_fraction ] -->
<TimeSensor DEF='Clock1_4cycleInterval='3'/>
<!-- ROUTE information for Clock2_1 node:  [from routeSelecter2.startTime1 to set_startTime ] [from fraction_changed to PosFlip2_1.set_fraction ] -->
<TimeSensor DEF='Clock2_1cycleInterval='3'/>
<!-- ROUTE information for Clock2_2 node:  [from routeSelecter2.startTime2 to set_startTime ] [from fraction_changed to PosFlip2_2.set_fraction ] -->
<TimeSensor DEF='Clock2_2cycleInterval='3'/>
<!-- ROUTE information for Clock2_3 node:  [from routeSelecter2.startTime3 to set_startTime ] [from fraction_changed to PosFlip2_3.set_fraction ] -->
<TimeSensor DEF='Clock2_3cycleInterval='3'/>
<!-- ROUTE information for Clock2_4 node:  [from routeSelecter2.startTime4 to set_startTime ] [from fraction_changed to PosFlip2_4.set_fraction ] -->
<TimeSensor DEF='Clock2_4cycleInterval='3'/>
<!-- ROUTE information for ClockOrient1 node:  [from Touch1.touchTime to set_startTime ] [from fraction_changed to orienFlip1.set_fraction ] -->
<TimeSensor DEF='ClockOrient1'/>
<!-- ROUTE information for ClockOrient2 node:  [from Touch2.touchTime to set_startTime ] [from fraction_changed to orienFlip2.set_fraction ] -->
<TimeSensor DEF='ClockOrient2'/>
<!-- ROUTE information for PosBall1 node:  [from Clock.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosBall1key='0 0.0625 0.125 0.1875 0.25 0.3125 0.375 0.4375 0.5 0.5625 0.625 0.6875 0.75 0.8125 0.875 0.9375 1keyValue='1.8 .2 3.6 1.8 .2 -1.4 1.7 .2 -2.0 1.46 .2 -2.5 1.1 .2 -2.9 0.6 .2 -3.1 0 .2 -3.2 -0.6 .2 -3.1 -1.1 .2 -2.9 -1.5 .2 -2.5 -1.7 .2 -2.0 -1.8 .2 -1.4 -0.36 .2 -1.38 .36 .2 -1.54 0 .2 -0.74 0.562 .2 3.396 .242 .2 3.745'/>
<!-- ROUTE information for PosFlip1_1 node:  [from Clock1_1.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip1_1key='0 0.25 0.5 0.75 1keyValue='1.2 .2 3.4 0.701 .2 -2.826 -1.774 .2 -0.675 -1.511 .2 2.791 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip1_2 node:  [from Clock1_2.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip1_2key='0 0.2 0.4 0.6 0.8 1keyValue='.242 .2 3.745 1 0.2 1 -1.2 0.2 0.8 0.8 0.2 -2.4 0.4 0.2 -2.6 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip1_3 node:  [from Clock1_3.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip1_3key='0 0.076923077 0.153846154 0.230769231 0.307692308 0.384615385 0.461538462 0.538461538 0.615384615 0.692307692 0.769230769 0.846153846 0.923076923 1keyValue='.242 .2 3.745 -1.5 0.2 0 0.3 0.2 -3.1 -1.4 0.2 -3.1 -0.2 0.2 -1 -0.3 0.2 -3.4 -1.8 0.2 -1.8 0.3 0.2 -2.8 -1.1 0.2 -3.4 -1.7 0.2 -2.4 1.8 0.2 -0.4 -0.8 0.2 1.8 2 0.2 -3.4 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip1_4 node:  [from Clock1_4.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip1_4key='0 0.2 0.4 0.6 0.8 1keyValue='.242 .2 3.745 2.2 0.2 1 0 0.2 0 1.5 0.2 -3 -1 0.2 2.5 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip2_1 node:  [from Clock2_1.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip2_1key='0 0.166666667 0.333333333 0.5 0.666666667 0.833333333 1keyValue='1.2 0.2 -3 -2 0.2 0.2 2 0.2 -0.6 -2.2 0.2 1.2 1.2 0.2 0.8 -1.2 0.2 -3.4 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip2_2 node:  [from Clock2_2.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip2_2key='0 0.066666667 0.129166667 0.191666667 0.254166667 0.316666667 0.379166667 0.441666667 0.504166667 0.566666667 0.629166667 0.691666667 0.754166667 0.816666667 0.879166667 0.941666667keyValue='0 .2 4.25 -2 0.2 -1 -1.8 0.2 -3.4 -0.4 0.2 -3.6 1.8 0.2 -3.4 1.6 0.2 -2 1 0.2 1 0 .2 4.25 -0.5 0.2 0 -1 0.2 -2 0.5 0.2 2.5 0.8 0.2 1 -2.2 0.2 1 2.2 0.2 -3.6 -0.5 0.2 3 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip2_3 node:  [from Clock2_3.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip2_3key='0 0.0625 0.125 0.1875 0.25 0.3125 0.375 0.4375 0.5 0.5625 0.625 0.6875 0.75 0.8125 0.875 0.9375 1keyValue='-1.6 0.2 0 -1.8 0.2 -1 -1.6 0.2 -2.4 -0.4 0.2 -2.5 0 0.2 -1.6 -0.2 0.2 -0.9 -1 0.2 -1.8 0.2 0.2 -2.2 0.2 0.2 -1.4 -0.6 0.2 -1.4 -0.6 0.2 -1.6 0 0.2 -1.4 -0.2 0.2 -1.3 0.8 0.2 0 -1 0.2 0.2 1.4 0.2 -1.6 -0.4 .2 3.6'/>
<!-- ROUTE information for PosFlip2_4 node:  [from Clock2_4.fraction_changed to set_fraction ] [from value_changed to BALL1.set_translation ] -->
<PositionInterpolator DEF='PosFlip2_4key='0 0.25 0.5 0.75 1keyValue='-0.4 .2 3.6 1.8 .2 0 0.936 .2 -2.842 0 .2 3.4 .242 .2 3.745'/>
<!-- ROUTE information for orienFlip1 node:  [from ClockOrient1.fraction_changed to set_fraction ] [from value_changed to stck1.set_rotation ] -->
<OrientationInterpolator DEF='orienFlip1key='0 0.25 0.5 0.75 1keyValue='0 1 0 -0.5 0 1 0 -1.0 0 1 0 -1.57 0 1 0 -1 0 1 0 0.5'/>
<!-- ROUTE information for orienFlip2 node:  [from ClockOrient2.fraction_changed to set_fraction ] [from value_changed to stck2.set_rotation ] -->
<OrientationInterpolator DEF='orienFlip2key='0 0.25 0.5 0.75 1keyValue='0 1 0 0.5 0 1 0 1.0 0 1 0 1.57 0 1 0 1 0 1 0 -0.5'/>
<!-- pinballBackground -->
<Group>
<!-- beam for pinballBackground -->
<!-- left beam -->
<Transform translation='2.245 2 -4'>
<Shape>
<Box size='.3 4.5 0.8'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<!-- right beam -->
<Transform translation='-2.245 2 -4'>
<Shape>
<Box size='.3 4.5 0.8'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<!-- upper beam -->
<Transform translation='0 4.4 -4'>
<Shape>
<Box size='4.81 0.3 0.8'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<!-- back of pinballBackground -->
<Transform translation='0 -0.6 -4.5'>
<Shape>
<Box size='4.78 10.3 0.4'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<!-- pinballBackground -->
<Transform translation='0 2 -3.95'>
<Shape>
<Box size='4.5 4.5 0.5'/>
<Appearance>
<ImageTexture USE='TommyPinballGame'/>
<!-- animate color behind image -->
<!-- ROUTE information for BALL_COLOR_3 node:  [from COLOR_PATH_3.value_changed to set_emissiveColor ] -->
<Material DEF='BALL_COLOR_3'/>
</Appearance>
</Shape>
<!-- ROUTE information for CLOCK_3 node:  [from fraction_changed to COLOR_PATH_3.set_fraction ] -->
<TimeSensor DEF='CLOCK_3cycleInterval='5loop='true'/>
<!-- ROUTE information for COLOR_PATH_3 node:  [from CLOCK_3.fraction_changed to set_fraction ] [from value_changed to BALL_COLOR_3.set_emissiveColor ] -->
<ColorInterpolator DEF='COLOR_PATH_3key='0.0 0.5 0.5 1.0keyValue='0 0 0 .91 .98 .36 0 0 0 0 0 0'/>
</Transform>
<!-- Left front beam -->
<Transform translation='-2.25 -3.7 3.9'>
<Shape>
<Box size='0.3 3.8 0.6'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<!-- right front beam -->
<Transform translation='2.25 -3.7 3.9'>
<Shape>
<Box size='0.3 3.8 0.6'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
<ROUTE fromNode='CLOCK_3fromField='fraction_changedtoNode='COLOR_PATH_3toField='set_fraction'/>
<ROUTE fromNode='COLOR_PATH_3fromField='value_changedtoNode='BALL_COLOR_3toField='set_emissiveColor'/>
</Group>
<!-- front -->
<Transform translation='0 -3.6 4'>
<Shape>
<Box size='4.2 2.8 .05'/>
<Appearance> </Appearance>
</Shape>
<Transform translation='0 -1.7 0'>
<Shape>
<Box size='4.5 0.6 0.3'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
</Transform>
<!-- pinballSide -->
<Group>
<!-- right side -->
<Transform rotation='0 1 0 -1.57translation='2.44 -5.6 4'>
<Shape>
<Appearance USE='WoodAppearance'/>
<IndexedFaceSet coordIndex='0 1 2 3 0'>
<Coordinate point='0 0 0 -8.7 0 0 -8.7 5.5 0 0 3.35 0'/>
</IndexedFaceSet>
</Shape>
</Transform>
<!-- left side -->
<Transform rotation='0 1 0 -1.57translation='-2.43 -5.6 4'>
<Shape>
<Appearance USE='WoodAppearance'/>
<IndexedFaceSet coordIndex='0 3 2 1 0'>
<Coordinate point='0 0 0 -8.7 0 0 -8.7 5.5 0 0 3.35 0'/>
</IndexedFaceSet>
</Shape>
</Transform>
<!-- floor -->
<Transform translation='0 -5.4 -0.3'>
<Shape>
<Box size='4.9 0.4 8.4'/>
<Appearance USE='WoodAppearance'/>
</Shape>
</Transform>
</Group>
<!-- routeSelecter is used to select different routes when a player clicks on flippers. -->
<!-- ROUTE information for routeSelecter1 node:  [from Touch1.touchTime to set_startTime ] [from startTime1 to Clock1_1.set_startTime ] [from startTime2 to Clock1_2.set_startTime ] [from startTime3 to Clock1_3.set_startTime ] [from startTime4 to Clock1_4.set_startTime ] -->
<Script DEF='routeSelecter1mustEvaluate='true'>
<field name='set_startTimetype='SFTimeaccessType='inputOnly'/>
<field name='startTime1type='SFTimeaccessType='outputOnly'/>
<field name='startTime2type='SFTimeaccessType='outputOnly'/>
<field name='startTime3type='SFTimeaccessType='outputOnly'/>
<field name='startTime4type='SFTimeaccessType='outputOnly'/>
<![CDATA[
        
ecmascript:

function set_startTime( touchTime ) {
	prob= Math.random();

	if ( prob < 0.25 ) {
		startTime1 = touchTime;
	}
	else if ( (prob >= 0.25) && (prob < 0.50) ) {
		startTime2 = touchTime;
	}
	else if ( ( prob >= 0.50) && (prob < 0.75) ) {
		startTime3 = touchTime;
	}
	else {
		startTime4 = touchTime;	
	}
}

      
]]>
</Script>
<!-- ROUTE information for routeSelecter2 node:  [from Touch2.touchTime to set_startTime ] [from startTime1 to Clock2_1.set_startTime ] [from startTime2 to Clock2_2.set_startTime ] [from startTime3 to Clock2_3.set_startTime ] [from startTime4 to Clock2_4.set_startTime ] -->
<Script DEF='routeSelecter2mustEvaluate='true'>
<field name='set_startTimetype='SFTimeaccessType='inputOnly'/>
<field name='startTime1type='SFTimeaccessType='outputOnly'/>
<field name='startTime2type='SFTimeaccessType='outputOnly'/>
<field name='startTime3type='SFTimeaccessType='outputOnly'/>
<field name='startTime4type='SFTimeaccessType='outputOnly'/>
<![CDATA[
        
ecmascript:

function set_startTime( touchTime ) {
	prob= Math.random();
	if ( prob < 0.25 ) {
		startTime1 = touchTime;
	}
	else if ( (prob >= 0.25) && (prob < 0.50) ) {
		startTime2 = touchTime;
	}
	else if ( (prob >= 0.50) && (prob < 0.75) ) {
		startTime3 = touchTime;
	}
	else {
		startTime4 = touchTime;	
	}
}

      
]]>
</Script>
</Group>
<!-- Start game -->
<ROUTE fromNode='TouchfromField='touchTimetoNode='ClocktoField='set_startTime'/>
<ROUTE fromNode='ClockfromField='fraction_changedtoNode='PosBall1toField='set_fraction'/>
<ROUTE fromNode='PosBall1fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path1 -->
<ROUTE fromNode='Touch1fromField='touchTimetoNode='routeSelecter1toField='set_startTime'/>
<ROUTE fromNode='routeSelecter1fromField='startTime1toNode='Clock1_1toField='set_startTime'/>
<ROUTE fromNode='Clock1_1fromField='fraction_changedtoNode='PosFlip1_1toField='set_fraction'/>
<ROUTE fromNode='PosFlip1_1fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path2 -->
<ROUTE fromNode='routeSelecter1fromField='startTime2toNode='Clock1_2toField='set_startTime'/>
<ROUTE fromNode='Clock1_2fromField='fraction_changedtoNode='PosFlip1_2toField='set_fraction'/>
<ROUTE fromNode='PosFlip1_2fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path3 -->
<ROUTE fromNode='routeSelecter1fromField='startTime3toNode='Clock1_3toField='set_startTime'/>
<ROUTE fromNode='Clock1_3fromField='fraction_changedtoNode='PosFlip1_3toField='set_fraction'/>
<ROUTE fromNode='PosFlip1_3fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path4 -->
<ROUTE fromNode='routeSelecter1fromField='startTime4toNode='Clock1_4toField='set_startTime'/>
<ROUTE fromNode='Clock1_4fromField='fraction_changedtoNode='PosFlip1_4toField='set_fraction'/>
<ROUTE fromNode='PosFlip1_4fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path5 -->
<ROUTE fromNode='Touch2fromField='touchTimetoNode='routeSelecter2toField='set_startTime'/>
<ROUTE fromNode='routeSelecter2fromField='startTime1toNode='Clock2_1toField='set_startTime'/>
<ROUTE fromNode='Clock2_1fromField='fraction_changedtoNode='PosFlip2_1toField='set_fraction'/>
<ROUTE fromNode='PosFlip2_1fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path6 -->
<ROUTE fromNode='routeSelecter2fromField='startTime2toNode='Clock2_2toField='set_startTime'/>
<ROUTE fromNode='Clock2_2fromField='fraction_changedtoNode='PosFlip2_2toField='set_fraction'/>
<ROUTE fromNode='PosFlip2_2fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path7 -->
<ROUTE fromNode='routeSelecter2fromField='startTime3toNode='Clock2_3toField='set_startTime'/>
<ROUTE fromNode='Clock2_3fromField='fraction_changedtoNode='PosFlip2_3toField='set_fraction'/>
<ROUTE fromNode='PosFlip2_3fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Path8 -->
<ROUTE fromNode='routeSelecter2fromField='startTime4toNode='Clock2_4toField='set_startTime'/>
<ROUTE fromNode='Clock2_4fromField='fraction_changedtoNode='PosFlip2_4toField='set_fraction'/>
<ROUTE fromNode='PosFlip2_4fromField='value_changedtoNode='BALL1toField='set_translation'/>
<!-- Rotating sticks -->
<ROUTE fromNode='Touch1fromField='touchTimetoNode='ClockOrient1toField='set_startTime'/>
<ROUTE fromNode='ClockOrient1fromField='fraction_changedtoNode='orienFlip1toField='set_fraction'/>
<ROUTE fromNode='orienFlip1fromField='value_changedtoNode='stck1toField='set_rotation'/>
<ROUTE fromNode='Touch2fromField='touchTimetoNode='ClockOrient2toField='set_startTime'/>
<ROUTE fromNode='ClockOrient2fromField='fraction_changedtoNode='orienFlip2toField='set_fraction'/>
<ROUTE fromNode='orienFlip2fromField='value_changedtoNode='stck2toField='set_rotation'/>
<!-- View Point -->
<Viewpoint description='normal viewposition='0 0 8.5'/>
<Viewpoint description='farposition='0 1 20'/>
<Viewpoint description='rightfieldOfView='0.7orientation='0 1 0 1.2position='15 0 15'/>
<Viewpoint description='leftorientation='0 1 0 -1.2position='-15 0 15'/>
<Viewpoint description='overorientation='1 0 0 -1.2position='0 17 5'/>
<Background groundAngle='1.309 1.570796groundColor='0 0 0skyAngle='1.309 1.571'
  backUrl=' "urn:web3d:media:textures/panoramas/space_1_back.jpg" "../UniversalMediaPanoramas/space_1_back.jpg" "https://www.web3d.org/WorkingGroups/media/textures/panoramas/space_1_back.jpg" "https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/space_1_back.jpg" "http://www.web3dmedia.com/UniversalMedia/textures/panoramas/space_1_back.jpg" "http://www.officetowers.com/UniversalMedia/textures/panoramas/space_1_back.jpg" "http://geometrek.com/UniversalMedia/textures/panoramas/space_1_back.jpg" "http://www.sc.ehu.es/ccwgamoa/UniversalMedia/textures/panoramas/space_1_back.jpg" '
  bottomUrl=' "urn:web3d:media:textures/panoramas/space_1_bottom.jpg" "../UniversalMediaPanoramas/space_1_bottom.jpg" "https://www.web3d.org/WorkingGroups/media/textures/panoramas/space_1_bottom.jpg" "https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/space_1_bottom.jpg" "http://www.web3dmedia.com/UniversalMedia/textures/panoramas/space_1_bottom.jpg" "http://www.officetowers.com/UniversalMedia/textures/panoramas/space_1_bottom.jpg" "http://geometrek.com/UniversalMedia/textures/panoramas/space_1_bottom.jpg" "http://www.sc.ehu.es/ccwgamoa/UniversalMedia/textures/panoramas/space_1_bottom.jpg" '
  frontUrl=' "urn:web3d:media:textures/panoramas/space_1_front.jpg" "../UniversalMediaPanoramas/space_1_front.jpg" "https://www.web3d.org/WorkingGroups/media/textures/panoramas/space_1_front.jpg" "https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/space_1_front.jpg" "http://www.web3dmedia.com/UniversalMedia/textures/panoramas/space_1_front.jpg" "http://www.officetowers.com/UniversalMedia/textures/panoramas/space_1_front.jpg" "http://geometrek.com/UniversalMedia/textures/panoramas/space_1_front.jpg" "http://www.sc.ehu.es/ccwgamoa/UniversalMedia/textures/panoramas/space_1_front.jpg" '
  leftUrl=' "urn:web3d:media:textures/panoramas/space_1_left.jpg" "../UniversalMediaPanoramas/space_1_left.jpg" "https://www.web3d.org/WorkingGroups/media/textures/panoramas/space_1_left.jpg" "https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/space_1_left.jpg" "http://www.web3dmedia.com/UniversalMedia/textures/panoramas/space_1_left.jpg" "http://www.officetowers.com/UniversalMedia/textures/panoramas/space_1_left.jpg" "http://geometrek.com/UniversalMedia/textures/panoramas/space_1_left.jpg" "http://www.sc.ehu.es/ccwgamoa/UniversalMedia/textures/panoramas/space_1_left.jpg" '
  rightUrl=' "urn:web3d:media:textures/panoramas/space_1_right.jpg" "../UniversalMediaPanoramas/space_1_right.jpg" "https://www.web3d.org/WorkingGroups/media/textures/panoramas/space_1_right.jpg" "https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/space_1_right.jpg" "http://www.web3dmedia.com/UniversalMedia/textures/panoramas/space_1_right.jpg" "http://www.officetowers.com/UniversalMedia/textures/panoramas/space_1_right.jpg" "http://geometrek.com/UniversalMedia/textures/panoramas/space_1_right.jpg" "http://www.sc.ehu.es/ccwgamoa/UniversalMedia/textures/panoramas/space_1_right.jpg" '
  topUrl=' "urn:web3d:media:textures/panoramas/space_1_top.jpg" "../UniversalMediaPanoramas/space_1_top.jpg" "https://www.web3d.org/WorkingGroups/media/textures/panoramas/space_1_top.jpg" "https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/space_1_top.jpg" "http://www.web3dmedia.com/UniversalMedia/textures/panoramas/space_1_top.jpg" "http://www.officetowers.com/UniversalMedia/textures/panoramas/space_1_top.jpg" "http://geometrek.com/UniversalMedia/textures/panoramas/space_1_top.jpg" "http://www.sc.ehu.es/ccwgamoa/UniversalMedia/textures/panoramas/space_1_top.jpg" '/>
</Scene>
</X3D>
<!--

Index for DEF nodes : BALL_COLOR_1, BALL_COLOR_2, BALL_COLOR_3, BALL1, beam, Clock, CLOCK_1, CLOCK_2, CLOCK_3, Clock1_1, Clock1_2, Clock1_3, Clock1_4, Clock2_1, Clock2_2, Clock2_3, Clock2_4, ClockOrient1, ClockOrient2, COLOR_PATH_1, COLOR_PATH_2, COLOR_PATH_3, cylinder, orienFlip1, orienFlip2, PosBall1, PosFlip1_1, PosFlip1_2, PosFlip1_3, PosFlip1_4, PosFlip2_1, PosFlip2_2, PosFlip2_3, PosFlip2_4, routeSelecter1, routeSelecter2, sideBeam, stck1, stck2, stick, TommyPinballGame, Touch, Touch1, Touch2, WoodAppearance

Index for Viewpoint images : Viewpoint_1, Viewpoint_2, Viewpoint_3, Viewpoint_4, Viewpoint_5
-->

<!-- Color key: <X3dNode DEF='idName' field='value'/> matches <XmlElement DEF='idName' attribute='value'/>
(Light blue background: behavior node) (Grey background: inserted documentation) (Magenta background: X3D Extensibility)
-->

<!-- Additional help information about X3D scenes: X3D Resources, X3D Scene Authoring Hints and X3D Tooltips -->