| 1 | 
            <?xml version="1.0" encoding="UTF-8"?>
          | 
      
| 2 | 
            <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
          | 
      
| 3 | <X3D profile='Immersive' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'> | 
| 4 | <head> | 
| 5 | <meta name='title' content=' Type209GlafkosDieselSubmarineAnimated.x3d '/> | 
| 6 | <meta name='description' content='A Hellenic fleet submarine with animation capabilities.'/> | 
| 7 | <meta name='creator' content='Anthony Varelas'/> | 
| 8 | <meta name='created' content='1 August 2002'/> | 
| 9 | <meta name='modified' content='28 November 2019'/> | 
| 10 | <meta name='reference' content=' ArleighBurkePropeller.wrl Mk48.Torpedo.wrl HarpoonPrototype.wrl Radar3.wrl sonar.wav MISSILE.wav ' /> | 
| 11 | <meta name=' warning ' content=' Torpedoes and missiles need to get moved to submarine-independent coordinate system. '/> | 
| 12 | <meta name=' warning ' content=' Inline Harpoon needs to get converted to Harpoon ExternPrototDeclare '/> | 
| 13 | <meta name='identifier' content=' https://www.web3d.org/x3d/content/examples/Savage/Submarines/Various/Type209GlafkosDieselSubmarineAnimated.x3d '/> | 
| 14 | <meta name='generator' content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit'/> | 
| 15 | <meta name='license' content='../../license.html'/> | 
| 16 | </head> | 
| 17 | <Scene> | 
| 18 | <WorldInfo title='Type209GlafkosDieselSubmarineAnimated.x3d'/> | 
| 19 | <Background groundAngle='1.5708' groundColor='0 0.2 0.7 0 0.6 0.9' skyAngle='0.654 1.309' skyColor='1 1 1 0 0.5 1 0 0.5 1'/> | 
| 20 | <Viewpoint description='Far Right View' fieldOfView='1.047' position='1.5 -1.035 15.5'/> | 
| 21 | <Viewpoint description='Close Right View' position='0 -1.035 10'/> | 
| 22 | <Viewpoint description='Tower View' position='2.7 1.1 3'/> | 
| 23 | <Viewpoint description='Rear View' orientation='0 1 0 -1.57' position='-10 -0.83 0'/> | 
| 24 | <Viewpoint description='Left View' fieldOfView='1.047' orientation='0 1 0 3.14' position='1.5 -1.035 -23.6'/> | 
| 25 | <Viewpoint description='Front View' orientation='0 1 0 1.57' position='11 -1.035 0'/> | 
| 26 | <Viewpoint description='Top View' fieldOfView='1.047' orientation='1 0 0 -1.57' position='0 25 -3.9'/> | 
| 27 | <Viewpoint description='Bottom View' fieldOfView='1.047' orientation='1 0 0 1.57' position='0 -27 -4'/> | 
| 28 | <Viewpoint description='Right Side Launch View' fieldOfView='1.047' position='9 -1.035 15.5'/> | 
| 29 | <Transform scale='0.8 0.8 0.8' translation='1.5 -0.846 0'> | 
| 30 | <Group> | 
| 31 | 
                                     
                                      
 
                    <!-- ROUTE information for Submarine node: 
[from SubDrag.translation_changed to set_translation
                                    ]
[from SubMove.value_changed to set_translation
                                    ]
[from SubTurn.value_changed to set_rotation
                                    ]
 --> 
<Transform DEF='Submarine' center='0 0 -5'>  | 
| 32 | <!-- Construction of the Hull --> | 
| 33 | <Transform DEF='Hull' center='0 0.42 0' scale='1 1.3 1'> | 
| 34 | <Transform rotation='0 0 1 1.57'> | 
| 35 | <Shape> | 
| 36 | <Appearance> | 
| 37 | <Material diffuseColor='0 0 0' emissiveColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 38 | </Appearance> | 
| 39 | <Cylinder height='12.375' radius='0.84'/> | 
| 40 | </Shape> | 
| 41 | </Transform> | 
| 42 | <Transform rotation='0 0 1 1.57' translation='-6.184 0 0'> | 
| 43 | <Shape> | 
| 44 | <Appearance> | 
| 45 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 46 | </Appearance> | 
| 47 | <Extrusion beginCap='false' creaseAngle='1.57' crossSection='1 0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0 -1 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1 0 -0.92 0.38 -0.71 0.71 -0.38 0.92 0 1 0.38 0.92 0.71 0.71 0.92 0.38 1 0' scale='0.84 0.84 0.81 0.81 0.77 0.77 0.74 0.74 0.70 0.70 0.66 0.66 0.62 0.62 0.57 0.57 0.52 0.52 0.47 0.47 0.41 0.41 0.33 0.33 0.24 0.24 0.15 0.15 0.06 0.06' spine='0 0 0 0 0.3 0 0 0.6 0 0 0.9 0 0 1.2 0 0 1.5 0 0 1.8 0 0 2.1 0 0 2.4 0 0 2.7 0 0 3 0 0 3.3 0 0 3.6 0 0 3.9 0 0 4.2 0'/> | 
| 48 | </Shape> | 
| 49 | </Transform> | 
| 50 | <Transform scale='0.6 1 1' translation='6.1875 0 0'> | 
| 51 | <Shape> | 
| 52 | <Appearance> | 
| 53 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 54 | </Appearance> | 
| 55 | <Sphere radius='0.825'/> | 
| 56 | </Shape> | 
| 57 | </Transform> | 
| 58 | <Transform scale='7.63 0.53 0.5' translation='-0.04 0.61 0'> | 
| 59 | <Shape> | 
| 60 | <Appearance> | 
| 61 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 62 | </Appearance> | 
| 63 | <Extrusion creaseAngle='1.57' crossSection='1 0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0 -1 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1 -0 -0.92 0.38 -0.71 0.71 -0.38 0.92 0 1 0.38 0.92 0.71 0.71 0.92 0.38 1 0' scale='0.815 0.94 0.815 0.92 0.815 0.90 0.815 0.88 0.815 0.86 0.815 0.84 0.815 0.82 0.8 0.8 0.78 0.78 0.76 0.76' spine='0 0.15 0 0 0.2 0 0 0.25 0 0 0.3 0 0 0.35 0 0 0.4 0 0 0.45 0 0 0.5 0 0 0.55 0 0 0.6 0'/> | 
| 64 | </Shape> | 
| 65 | </Transform> | 
| 66 | </Transform> | 
| 67 | <!-- Construction of the Tower --> | 
| 68 | <Transform DEF='Tower'> | 
| 69 | <Transform DEF='TowerBody' scale='5.357 1 1' translation='0.84375 1.455 0'> | 
| 70 | <Shape> | 
| 71 | <Appearance> | 
| 72 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 73 | </Appearance> | 
| 74 | <Cylinder height='1.5' radius='0.28'/> | 
| 75 | </Shape> | 
| 76 | </Transform> | 
| 77 | <!-- Construction of the Hatch --> | 
| 78 | <Transform DEF='Hatch'> | 
| 79 | <Transform DEF='HatchBase' translation='1.34 2.244 0'> | 
| 80 | <Shape> | 
| 81 | <Appearance> | 
| 82 | <Material diffuseColor='0.15 0.175 0.175'/> | 
| 83 | </Appearance> | 
| 84 | <Cylinder height='0.08' radius='0.17'/> | 
| 85 | </Shape> | 
| 86 | </Transform> | 
| 87 | <Transform> | 
| 88 | 
                                                             
                                                              
 
                                        <!-- Group
                                                            HatchCover is a DEF node that has 1 USE node: USE_1 --> 
<Group DEF='HatchCover'>  | 
| 89 | <Transform translation='1.33 2.2965 0'> | 
| 90 | <Shape> | 
| 91 | <Appearance> | 
| 92 | <Material diffuseColor='0.15 0.175 0.175'/> | 
| 93 | </Appearance> | 
| 94 | <Cylinder height='0.0216' radius='0.189'/> | 
| 95 | </Shape> | 
| 96 | </Transform> | 
| 97 | <Transform translation='1.438 2.2985 0'> | 
| 98 | <Shape> | 
| 99 | <Appearance> | 
| 100 | <Material diffuseColor='0.15 0.175 0.175'/> | 
| 101 | </Appearance> | 
| 102 | <Box size='0.216 0.0216 0.378'/> | 
| 103 | </Shape> | 
| 104 | </Transform> | 
| 105 | <Transform rotation='1 0 0 1.57' translation='1.5415 2.2904 0'> | 
| 106 | <Shape> | 
| 107 | <Appearance> | 
| 108 | <Material diffuseColor='0.15 0.175 0.175'/> | 
| 109 | </Appearance> | 
| 110 | <Cylinder height='0.378' radius='0.027'/> | 
| 111 | </Shape> | 
| 112 | </Transform> | 
| 113 | </Group> | 
| 114 | </Transform> | 
| 115 | </Transform> | 
| 116 | <Transform DEF='Radar'> | 
| 117 | <Transform translation='0.84375 3.001875 0'> | 
| 118 | <Shape> | 
| 119 | <Appearance> | 
| 120 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 121 | </Appearance> | 
| 122 | <Cylinder height='1.59375' radius='0.0385'/> | 
| 123 | </Shape> | 
| 124 | </Transform> | 
| 125 | <Transform scale='0.1 0.1 0.1' translation='0.84375 3.9 0'> | 
| 126 | <Inline url=' "SubmarineRadar.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Submarines/Various/SubmarineRadar.x3d" "SubmarineRadar.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Submarines/Various/SubmarineRadar.wrl" '/> | 
| 127 | </Transform> | 
| 128 | </Transform> | 
| 129 | <!-- Construction of Snorkelling device --> | 
| 130 | <Transform DEF='Snorkelling' translation='0.4 2.908125 0'> | 
| 131 | <Transform DEF='SnorkellingTube'> | 
| 132 | <Shape> | 
| 133 | <Appearance> | 
| 134 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 135 | </Appearance> | 
| 136 | <Cylinder height='1.40625' radius='0.09'/> | 
| 137 | </Shape> | 
| 138 | </Transform> | 
| 139 | <Transform DEF='SnorkellingCover' scale='0.49 0.65 0.49' translation='-0.66 -0.79 0'> | 
| 140 | <Group USE='HatchCover'/> | 
| 141 | </Transform> | 
| 142 | </Transform> | 
| 143 | <!-- Construction of Periscope #1 --> | 
| 144 | <Transform DEF='Periscope1'> | 
| 145 | <Transform translation='2 2.7675 0'> | 
| 146 | <Shape> | 
| 147 | <Appearance> | 
| 148 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 149 | </Appearance> | 
| 150 | <Cylinder height='1.125' radius='0.025'/> | 
| 151 | </Shape> | 
| 152 | </Transform> | 
| 153 | <Transform translation='2 3.25 0'> | 
| 154 | 
                                                             
                                                              
 
                                        <!-- Shape
                                                            PeriscopeTop is a DEF node that has 1 USE node: USE_1 --> 
<Shape DEF='PeriscopeTop'>  | 
| 155 | <Appearance> | 
| 156 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 157 | </Appearance> | 
| 158 | <Cylinder height='0.1' radius='0.04'/> | 
| 159 | </Shape> | 
| 160 | </Transform> | 
| 161 | <Transform rotation='1 0 0 1.57' translation='2 3.25 0'> | 
| 162 | 
                                                             
                                                              
 
                                        <!-- Shape
                                                            PeriscopeLens is a DEF node that has 1 USE node: USE_1 --> 
<Shape DEF='PeriscopeLens'>  | 
| 163 | <Appearance> | 
| 164 | <Material/> | 
| 165 | </Appearance> | 
| 166 | <Cylinder height='0.08' radius='0.028'/> | 
| 167 | </Shape> | 
| 168 | </Transform> | 
| 169 | </Transform> | 
| 170 | <!-- Construction of Periscope #2 --> | 
| 171 | <Transform DEF='Periscope2'> | 
| 172 | <Transform translation='1.7 3.001875 0'> | 
| 173 | <Shape> | 
| 174 | <Appearance> | 
| 175 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 176 | </Appearance> | 
| 177 | <Cylinder height='1.59375' radius='0.025'/> | 
| 178 | </Shape> | 
| 179 | </Transform> | 
| 180 | <Transform translation='1.7 3.72 0'> | 
| 181 | <Shape USE='PeriscopeTop'/> | 
| 182 | </Transform> | 
| 183 | <Transform rotation='1 0 0 1.57' translation='1.7 3.72 0'> | 
| 184 | <Shape USE='PeriscopeLens'/> | 
| 185 | </Transform> | 
| 186 | </Transform> | 
| 187 | <Transform> | 
| 188 | <Transform translation='1.0175 2.865 0.15'> | 
| 189 | <Shape> | 
| 190 | <Appearance> | 
| 191 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 192 | </Appearance> | 
| 193 | <Cylinder height='1.32' radius='0.025'/> | 
| 194 | </Shape> | 
| 195 | </Transform> | 
| 196 | <Transform translation='1.0175 3.55 0.15'> | 
| 197 | <Shape> | 
| 198 | <Appearance> | 
| 199 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 200 | </Appearance> | 
| 201 | <Cylinder height='0.1' radius='0.016'/> | 
| 202 | </Shape> | 
| 203 | </Transform> | 
| 204 | </Transform> | 
| 205 | <Transform> | 
| 206 | <Transform translation='0.67 2.865 0.15'> | 
| 207 | <Shape> | 
| 208 | <Appearance> | 
| 209 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 210 | </Appearance> | 
| 211 | <Cylinder height='1.32' radius='0.025'/> | 
| 212 | </Shape> | 
| 213 | </Transform> | 
| 214 | <Transform translation='0.67 3.55 0.15'> | 
| 215 | <Shape> | 
| 216 | <Appearance> | 
| 217 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 218 | </Appearance> | 
| 219 | <Cylinder height='0.1' radius='0.016'/> | 
| 220 | </Shape> | 
| 221 | </Transform> | 
| 222 | </Transform> | 
| 223 | </Transform> | 
| 224 | <!-- Construction of the Rudders --> | 
| 225 | <Transform DEF='Rudders'> | 
| 226 | <Transform rotation='1 0 0 1.57' scale='0.7 1 0.1' translation='-9.5 0 0.57'> | 
| 227 | 
                                                       
                                                        
 
                                   <!-- Shape
                                                      RightRudder is a DEF node that has 1 USE node: USE_1 --> 
<Shape DEF='RightRudder'>  | 
| 228 | <Appearance> | 
| 229 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 230 | </Appearance> | 
| 231 | <Cylinder height='0.8' radius='0.4'/> | 
| 232 | </Shape> | 
| 233 | </Transform> | 
| 234 | <Transform translation='-9.9 0 0.545'> | 
| 235 | 
                                                       
                                                        
 
                                   <!-- Shape
                                                      RightRudderBlade is a DEF node that has 1 USE node: USE_1 --> 
<Shape DEF='RightRudderBlade'>  | 
| 236 | <Appearance> | 
| 237 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 238 | </Appearance> | 
| 239 | <Box size='0.235 0.05 0.85'/> | 
| 240 | </Shape> | 
| 241 | </Transform> | 
| 242 | <Transform rotation='1 0 0 -1.57' scale='0.7 1 0.1' translation='-9.5 0 -0.57'> | 
| 243 | <Shape USE='RightRudder'/> | 
| 244 | </Transform> | 
| 245 | <Transform translation='-9.9 0 -0.545'> | 
| 246 | <Shape USE='RightRudderBlade'/> | 
| 247 | </Transform> | 
| 248 | <Transform scale='1 1 0.133' translation='-9.72 0.5 0'> | 
| 249 | <Shape DEF='UpperRudder'> | 
| 250 | <Appearance> | 
| 251 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 252 | </Appearance> | 
| 253 | <Cylinder height='0.8' radius='0.3'/> | 
| 254 | </Shape> | 
| 255 | </Transform> | 
| 256 | <Transform scale='1 1 0.114' translation='-9.67 -0.5 0'> | 
| 257 | <Shape DEF='DownRudder'> | 
| 258 | <Appearance> | 
| 259 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 260 | </Appearance> | 
| 261 | <Cylinder height='0.6' radius='0.35'/> | 
| 262 | </Shape> | 
| 263 | </Transform> | 
| 264 | </Transform> | 
| 265 | <!-- Construction of the Stabilizers --> | 
| 266 | <Transform DEF='Stabilizers'> | 
| 267 | <Transform scale='1 1 2' translation='5.2 -0.42 0.42'> | 
| 268 | <Shape DEF='RightStabilizer'> | 
| 269 | <Appearance> | 
| 270 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 271 | </Appearance> | 
| 272 | <Cylinder height='0.05' radius='0.46875'/> | 
| 273 | </Shape> | 
| 274 | </Transform> | 
| 275 | <Transform scale='1 1 2' translation='5.2 -0.42 -0.42'> | 
| 276 | <Shape DEF='LeftStabilizer'> | 
| 277 | <Appearance> | 
| 278 | <Material diffuseColor='0.15 0.175 0.175' specularColor='0.2 0.2 0.2'/> | 
| 279 | </Appearance> | 
| 280 | <Cylinder height='0.05' radius='0.46875'/> | 
| 281 | </Shape> | 
| 282 | </Transform> | 
| 283 | </Transform> | 
| 284 | <!-- Inline the Propeller --> | 
| 285 | <Transform DEF='Propeller' rotation='0 1 0 -1.57' scale='0.2 0.2 0.2' translation='-10.5 -0.12 0'> | 
| 286 | <Inline url=' "Type209GlafkosDieselSubmarinePropeller.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Submarines/Various/Type209GlafkosDieselSubmarinePropeller.x3d" "Type209GlafkosDieselSubmarinePropeller.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Submarines/Various/Type209GlafkosDieselSubmarinePropeller.wrl" '/> | 
| 287 | </Transform> | 
| 288 | <!-- Weapons --> | 
| 289 | <Transform DEF='Torpedoes-Harpoons'> | 
| 290 | <Transform DEF='TorpedoSet1' rotation='0 0 1 -1.57' translation='5.522 -0.2 -0.3'> | 
| 291 | <Shape DEF='TorpedoTube1'> | 
| 292 | <Appearance> | 
| 293 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 294 | </Appearance> | 
| 295 | <Cylinder height='2.282' radius='0.09'/> | 
| 296 | </Shape> | 
| 297 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Torpedo1 node: 
[from TorpedoFire1.value_changed to set_translation
                                                      ]
 --> 
<Transform DEF='Torpedo1'>  | 
| 298 | <Transform rotation='0 0 1 1.57' scale='0.32 0.32 0.32' translation='0 0.18 0'> | 
| 299 | 
                                                                   
                                                                    
 
                                             <!-- Inline
                                                                  Mk48Torpedo is a DEF node that has 5 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5 --> <Inline DEF='Mk48Torpedo' url=' "../../Weapons/Torpedoes/Mk48Torpedo.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Torpedoes/Mk48Torpedo.x3d" "../../Weapons/Torpedoes/Mk48Torpedo.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Torpedoes/Mk48Torpedo.wrl" '/>  | 
                                                            
| 300 | <Transform rotation='0 0 1 1.57' translation='-1.872 0 0'> | 
| 301 | <Shape> | 
| 302 | <Appearance> | 
| 303 | <Material emissiveColor='0.18 0.18 0.18'/> | 
| 304 | </Appearance> | 
| 305 | <Cylinder height='1.3' radius='0.267'/> | 
| 306 | </Shape> | 
| 307 | </Transform> | 
| 308 | </Transform> | 
| 309 | </Transform> | 
| 310 | </Transform> | 
| 311 | <Transform DEF='TorpedoSet2' rotation='0 0 1 -1.57' translation='5.522 -0.2 0.3'> | 
| 312 | <Shape DEF='TorpedoTube2'> | 
| 313 | <Appearance> | 
| 314 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 315 | </Appearance> | 
| 316 | <Cylinder height='2.282' radius='0.09'/> | 
| 317 | </Shape> | 
| 318 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Torpedo2 node: 
[from TorpedoFire2.value_changed to set_translation
                                                      ]
 --> 
<Transform DEF='Torpedo2'>  | 
| 319 | <Transform rotation='0 0 1 1.57' scale='0.32 0.32 0.32' translation='0 0.18 0'> | 
| 320 | <Inline USE='Mk48Torpedo'/> | 
| 321 | <Transform rotation='0 0 1 1.57' translation='-1.872 0 0'> | 
| 322 | <Shape> | 
| 323 | <Appearance> | 
| 324 | <Material emissiveColor='0.18 0.18 0.18'/> | 
| 325 | </Appearance> | 
| 326 | <Cylinder height='1.3' radius='0.267'/> | 
| 327 | </Shape> | 
| 328 | </Transform> | 
| 329 | </Transform> | 
| 330 | </Transform> | 
| 331 | </Transform> | 
| 332 | <Transform DEF='TorpedoSet3' rotation='0 0 1 -1.57' translation='5.496 -0.4 -0.35'> | 
| 333 | <Shape DEF='TorpedoTube3'> | 
| 334 | <Appearance> | 
| 335 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 336 | </Appearance> | 
| 337 | <Cylinder height='2.282' radius='0.09'/> | 
| 338 | </Shape> | 
| 339 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Torpedo3 node: 
[from TorpedoFire3.value_changed to set_translation
                                                      ]
 --> 
<Transform DEF='Torpedo3'>  | 
| 340 | <Transform rotation='0 0 1 1.57' scale='0.32 0.32 0.32' translation='0 0.18 0'> | 
| 341 | <Inline USE='Mk48Torpedo'/> | 
| 342 | <Transform rotation='0 0 1 1.57' translation='-1.872 0 0'> | 
| 343 | <Shape> | 
| 344 | <Appearance> | 
| 345 | <Material emissiveColor='0.18 0.18 0.18'/> | 
| 346 | </Appearance> | 
| 347 | <Cylinder height='1.3' radius='0.267'/> | 
| 348 | </Shape> | 
| 349 | </Transform> | 
| 350 | </Transform> | 
| 351 | </Transform> | 
| 352 | </Transform> | 
| 353 | <Transform DEF='TorpedoSet4' rotation='0 0 1 -1.57' translation='5.496 -0.4 0.35'> | 
| 354 | <Shape DEF='TorpedoTube4'> | 
| 355 | <Appearance> | 
| 356 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 357 | </Appearance> | 
| 358 | <Cylinder height='2.282' radius='0.09'/> | 
| 359 | </Shape> | 
| 360 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Torpedo4 node: 
[from TorpedoFire4.value_changed to set_translation
                                                      ]
 --> 
<Transform DEF='Torpedo4'>  | 
| 361 | <Transform rotation='0 0 1 1.57' scale='0.32 0.32 0.32' translation='0 0.18 0'> | 
| 362 | <Inline USE='Mk48Torpedo'/> | 
| 363 | <Transform rotation='0 0 1 1.57' translation='-1.872 0 0'> | 
| 364 | <Shape> | 
| 365 | <Appearance> | 
| 366 | <Material emissiveColor='0.18 0.18 0.18'/> | 
| 367 | </Appearance> | 
| 368 | <Cylinder height='1.3' radius='0.267'/> | 
| 369 | </Shape> | 
| 370 | </Transform> | 
| 371 | </Transform> | 
| 372 | </Transform> | 
| 373 | </Transform> | 
| 374 | <Transform DEF='TorpedoSet5' rotation='0 0 1 -1.57' translation='5.528 -0.4 -0.126'> | 
| 375 | <Shape DEF='TorpedoTube5'> | 
| 376 | <Appearance> | 
| 377 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 378 | </Appearance> | 
| 379 | <Cylinder height='2.282' radius='0.09'/> | 
| 380 | </Shape> | 
| 381 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Torpedo5 node: 
[from TorpedoFire5.value_changed to set_translation
                                                      ]
 --> 
<Transform DEF='Torpedo5'>  | 
| 382 | <Transform rotation='0 0 1 1.57' scale='0.32 0.32 0.32' translation='0 0.18 0'> | 
| 383 | <Inline USE='Mk48Torpedo'/> | 
| 384 | <Transform rotation='0 0 1 1.57' translation='-1.872 0 0'> | 
| 385 | <Shape> | 
| 386 | <Appearance> | 
| 387 | <Material emissiveColor='0.18 0.18 0.18'/> | 
| 388 | </Appearance> | 
| 389 | <Cylinder height='1.3' radius='0.267'/> | 
| 390 | </Shape> | 
| 391 | </Transform> | 
| 392 | </Transform> | 
| 393 | </Transform> | 
| 394 | </Transform> | 
| 395 | <Transform DEF='TorpedoSet6' rotation='0 0 1 -1.57' translation='5.528 -0.4 0.126'> | 
| 396 | <Shape DEF='TorpedoTube6'> | 
| 397 | <Appearance> | 
| 398 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 399 | </Appearance> | 
| 400 | <Cylinder height='2.282' radius='0.09'/> | 
| 401 | </Shape> | 
| 402 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Torpedo6 node: 
[from TorpedoFire6.value_changed to set_translation
                                                      ]
 --> 
<Transform DEF='Torpedo6'>  | 
| 403 | <Transform rotation='0 0 1 1.57' scale='0.32 0.32 0.32' translation='0 0.18 0'> | 
| 404 | <Inline USE='Mk48Torpedo'/> | 
| 405 | <Transform rotation='0 0 1 1.57' translation='-1.872 0 0'> | 
| 406 | <Shape> | 
| 407 | <Appearance> | 
| 408 | <Material emissiveColor='0.18 0.18 0.18'/> | 
| 409 | </Appearance> | 
| 410 | <Cylinder height='1.3' radius='0.267'/> | 
| 411 | </Shape> | 
| 412 | </Transform> | 
| 413 | </Transform> | 
| 414 | </Transform> | 
| 415 | </Transform> | 
| 416 | <Transform DEF='HarpoonSet1' rotation='0 0 1 -1.57' translation='5.528 0 -0.25'> | 
| 417 | <Shape DEF='HarpoonTube1'> | 
| 418 | <Appearance> | 
| 419 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 420 | </Appearance> | 
| 421 | <Cylinder height='2.282' radius='0.09'/> | 
| 422 | </Shape> | 
| 423 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Harpoon1 node: 
[from HarpoonFire1.value_changed to set_translation
                                                      ]
[from HarpoonRot1.value_changed to set_rotation
                                                      ]
 --> 
<Transform DEF='Harpoon1' scale='0.1 0.1 0.1' translation='0 1.08 0'>  | 
| 424 | 
                                                             
                                                              
 
                                        <!-- Inline
                                                            Harpoon is a DEF node that has 1 USE node: USE_1 --> <Inline DEF='Harpoon' url=' "../../Weapons/Missiles/HarpoonExample.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Missiles/HarpoonExample.x3d" "../../Weapons/Missiles/HarpoonExample.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Missiles/HarpoonExample.wrl" '/>  | 
                                                      
| 425 | </Transform> | 
| 426 | </Transform> | 
| 427 | <Transform DEF='HarpoonSet2' rotation='0 0 1 -1.57' translation='5.528 0 0.25'> | 
| 428 | <Shape DEF='HarpoonTube2'> | 
| 429 | <Appearance> | 
| 430 | <Material diffuseColor='0.18 0.15 0.15'/> | 
| 431 | </Appearance> | 
| 432 | <Cylinder height='2.282' radius='0.09'/> | 
| 433 | </Shape> | 
| 434 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for Harpoon2 node: 
[from HarpoonFire2.value_changed to set_translation
                                                      ]
[from HarpoonRot2.value_changed to set_rotation
                                                      ]
 --> 
<Transform DEF='Harpoon2' scale='0.1 0.1 0.1' translation='0 1.08 0'>  | 
| 435 | <Inline USE='Harpoon'/> | 
| 436 | </Transform> | 
| 437 | </Transform> | 
| 438 | </Transform> | 
| 439 | </Transform> | 
| 440 | <!-- Main Sensors --> | 
| 441 | 
                                     
                                      
 
                    <!-- ROUTE information for SubDrag node: 
[from translation_changed to Submarine.set_translation
                                    ]
 --> 
<PlaneSensor DEF='SubDrag' description='click and drag to move object'/>  | 
                              
| 442 | 
                                     
                                      
 
                    <!-- ROUTE information for Touch1 node: 
[from touchTime to Clock.set_startTime
                                    ]
 --> 
<TouchSensor DEF='Touch1' description='touch to activate'/>  | 
                              
| 443 | 
                                     
                                      
 
                    <!-- ROUTE information for Clock node: 
[from Touch1.touchTime to set_startTime
                                    ]
[from fraction_changed to SubMove.set_fraction
                                    ]
[from fraction_changed to SubTurn.set_fraction
                                    ]
 --> 
<TimeSensor DEF='Clock' cycleInterval='50' loop='true'/>  | 
                              
| 444 | <!-- Itinerary of the submarine --> | 
| 445 | 
                                     
                                      
 
                    <!-- ROUTE information for SubMove node: 
[from Clock.fraction_changed to set_fraction
                                    ]
[from value_changed to Submarine.set_translation
                                    ]
 --> 
<Script DEF='SubMove'>  | 
| 446 | <field name='set_fraction' type='SFFloat' accessType='inputOnly'/> | 
| 447 | <field name='value_changed' type='SFVec3f' accessType='outputOnly'/> | 
| 448 | <field name='radius' type='SFFloat' value='10' accessType='initializeOnly'/> | 
| 449 | <field name='turns' type='SFFloat' value='1' accessType='initializeOnly'/> | 
                                          
                                             <![CDATA[
                                          
                                          
          
ecmascript:
function set_fraction (fraction,eventTime) 
{
 value_changed[0]=radius*Math.sin(turns*fraction*6.28);
 value_changed[1]=0;
 value_changed[2]=radius*Math.cos(turns*fraction*6.28)
}
        
                                          
                                             ]]>
                                          
                                        | 
                                    |
| 451 | </Script> | 
| 452 | 
                                     
                                      
 
                    <!-- ROUTE information for SubTurn node: 
[from Clock.fraction_changed to set_fraction
                                    ]
[from value_changed to Submarine.set_rotation
                                    ]
 --> 
<Script DEF='SubTurn'>  | 
| 453 | <field name='set_fraction' type='SFFloat' accessType='inputOnly'/> | 
| 454 | <field name='value_changed' type='SFRotation' accessType='outputOnly'/> | 
| 455 | <field name='radius' type='SFFloat' value='1' accessType='initializeOnly'/> | 
| 456 | <field name='turns' type='SFFloat' value='1' accessType='initializeOnly'/> | 
                                          
                                             <![CDATA[
                                          
                                          
          
ecmascript:
function set_fraction (fraction,eventTime)
{
 value_changed[0]=0;
 value_changed[1]=1;
 value_changed[2]=0;
 value_changed[3]=fraction*6.28;
}
        
                                          
                                             ]]>
                                          
                                        | 
                                    |
| 458 | </Script> | 
| 459 | <Fog color='0 0 1' fogType='EXPONENTIAL' visibilityRange='150000'/> | 
| 460 | <!-- Sonar Sound --> | 
| 461 | <Sound intensity='0.6' maxBack='100' maxFront='100' minBack='50' minFront='50'> | 
| 462 | <AudioClip DEF='SonarSound' description='Sonar sound' loop='true' url=' ".../.../Submarines/Various/sonar.wav" "https://www.web3d.org/x3d/content/examples/Savage/Submarines/Various/sonar.wav" "sonar.wav"'/> | 
| 463 | </Sound> | 
| 464 | <!-- Launch Torpedoes-Missiles --> | 
| 465 | <Group> | 
| 466 | <Transform translation='1.5 -5.2 7'> | 
| 467 | <Shape> | 
| 468 | |
| 469 | <Material diffuseColor='0.25 0 0.75'/> | 
| 470 | </Appearance> | 
| 471 | <Sphere radius='0.2'/> | 
| 472 | </Shape> | 
| 473 | 
                                                 
                                                  
 
                              <!-- ROUTE information for TorpedoLaunch1 node: 
[from isOver to Clock1.set_enabled
                                                ]
 --> 
<TouchSensor DEF='TorpedoLaunch1' description='touch to activate'/>  | 
                                          
| 474 | </Transform> | 
| 475 | <Transform translation='2.5 -5.2 7'> | 
| 476 | <Shape> | 
| 477 | <Appearance USE='TorpedoButton'/> | 
| 478 | <Sphere radius='0.2'/> | 
| 479 | </Shape> | 
| 480 | 
                                                 
                                                  
 
                              <!-- ROUTE information for TorpedoLaunch2 node: 
[from isOver to Clock2.set_enabled
                                                ]
 --> 
<TouchSensor DEF='TorpedoLaunch2' description='touch to activate'/>  | 
                                          
| 481 | </Transform> | 
| 482 | <Transform translation='3.5 -5.2 7'> | 
| 483 | <Shape> | 
| 484 | <Appearance USE='TorpedoButton'/> | 
| 485 | <Sphere radius='0.2'/> | 
| 486 | </Shape> | 
| 487 | 
                                                 
                                                  
 
                              <!-- ROUTE information for TorpedoLaunch3 node: 
[from isOver to Clock3.set_enabled
                                                ]
 --> 
<TouchSensor DEF='TorpedoLaunch3' description='touch to activate'/>  | 
                                          
| 488 | </Transform> | 
| 489 | <Transform translation='4.5 -5.2 7'> | 
| 490 | <Shape> | 
| 491 | <Appearance USE='TorpedoButton'/> | 
| 492 | <Sphere radius='0.2'/> | 
| 493 | </Shape> | 
| 494 | 
                                                 
                                                  
 
                              <!-- ROUTE information for TorpedoLaunch4 node: 
[from isOver to Clock4.set_enabled
                                                ]
 --> 
<TouchSensor DEF='TorpedoLaunch4' description='touch to activate'/>  | 
                                          
| 495 | </Transform> | 
| 496 | <Transform translation='5.5 -5.2 7'> | 
| 497 | <Shape> | 
| 498 | <Appearance USE='TorpedoButton'/> | 
| 499 | <Sphere radius='0.2'/> | 
| 500 | </Shape> | 
| 501 | 
                                                 
                                                  
 
                              <!-- ROUTE information for TorpedoLaunch5 node: 
[from isOver to Clock5.set_enabled
                                                ]
 --> 
<TouchSensor DEF='TorpedoLaunch5' description='touch to activate'/>  | 
                                          
| 502 | </Transform> | 
| 503 | <Transform translation='6.5 -5.2 7'> | 
| 504 | <Shape> | 
| 505 | <Appearance USE='TorpedoButton'/> | 
| 506 | <Sphere radius='0.2'/> | 
| 507 | </Shape> | 
| 508 | 
                                                 
                                                  
 
                              <!-- ROUTE information for TorpedoLaunch6 node: 
[from isOver to Clock6.set_enabled
                                                ]
 --> 
<TouchSensor DEF='TorpedoLaunch6' description='touch to activate'/>  | 
                                          
| 509 | </Transform> | 
| 510 | <Transform translation='7.5 -5.2 7'> | 
| 511 | <Shape> | 
| 512 | 
                                                       
                                                        
 
                                   <!-- Appearance
                                                      HarpoonButton is a DEF node that has 1 USE node: USE_1 --> 
<Appearance DEF='HarpoonButton'>  | 
| 513 | <Material diffuseColor='0.9 0.9 0.9'/> | 
| 514 | </Appearance> | 
| 515 | <Sphere radius='0.2'/> | 
| 516 | </Shape> | 
| 517 | 
                                                 
                                                  
 
                              <!-- ROUTE information for HarpoonLaunch1 node: 
[from touchTime to MissileSound1.set_startTime
                                                ]
[from isOver to Clock7.set_enabled
                                                ]
 --> 
<TouchSensor DEF='HarpoonLaunch1' description='touch to activate'/>  | 
                                          
| 518 | <Sound intensity='0.7' maxBack='100' maxFront='100' minBack='50' minFront='50'> | 
| 519 | 
                                                       
                                                        
 
                                   <!-- ROUTE information for MissileSound1 node: 
[from HarpoonLaunch1.touchTime to set_startTime
                                                      ]
[from HarpoonLaunch2.touchTime to set_startTime
                                                      ]
 --> 
<AudioClip DEF='MissileSound1' description='Missile sound' url=' "../../Weapons/Missiles/MISSILE1.wav" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Missiles/MISSILE1.wav" "MISSILE1.wav"'/>  | 
                                                
| 520 | </Sound> | 
| 521 | </Transform> | 
| 522 | <Transform translation='8.5 -5.2 7'> | 
| 523 | <Shape> | 
| 524 | <Appearance USE='HarpoonButton'/> | 
| 525 | <Sphere radius='0.2'/> | 
| 526 | </Shape> | 
| 527 | 
                                                 
                                                  
 
                              <!-- ROUTE information for HarpoonLaunch2 node: 
[from touchTime to MissileSound1.set_startTime
                                                ]
[from isOver to Clock8.set_enabled
                                                ]
 --> 
<TouchSensor DEF='HarpoonLaunch2' description='touch to activate'/>  | 
                                          
| 528 | </Transform> | 
| 529 | <!-- TimeSensors for Torpedoes-Missiles --> | 
| 530 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock1 node: 
[from TorpedoLaunch1.isOver to set_enabled
                                          ]
[from fraction_changed to TorpedoFire1.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock1' cycleInterval='12' enabled='false' loop='true'/>  | 
                                    
| 531 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock2 node: 
[from TorpedoLaunch2.isOver to set_enabled
                                          ]
[from fraction_changed to TorpedoFire2.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock2' cycleInterval='12' enabled='false' loop='true'/>  | 
                                    
| 532 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock3 node: 
[from TorpedoLaunch3.isOver to set_enabled
                                          ]
[from fraction_changed to TorpedoFire3.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock3' cycleInterval='12' enabled='false' loop='true'/>  | 
                                    
| 533 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock4 node: 
[from TorpedoLaunch4.isOver to set_enabled
                                          ]
[from fraction_changed to TorpedoFire4.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock4' cycleInterval='12' enabled='false' loop='true'/>  | 
                                    
| 534 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock5 node: 
[from TorpedoLaunch5.isOver to set_enabled
                                          ]
[from fraction_changed to TorpedoFire5.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock5' cycleInterval='12' enabled='false' loop='true'/>  | 
                                    
| 535 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock6 node: 
[from TorpedoLaunch6.isOver to set_enabled
                                          ]
[from fraction_changed to TorpedoFire6.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock6' cycleInterval='12' enabled='false' loop='true'/>  | 
                                    
| 536 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock7 node: 
[from HarpoonLaunch1.isOver to set_enabled
                                          ]
[from fraction_changed to HarpoonFire1.set_fraction
                                          ]
[from fraction_changed to HarpoonRot1.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock7' cycleInterval='8' enabled='false' loop='true'/>  | 
                                    
| 537 | 
                                           
                                            
 
                         <!-- ROUTE information for Clock8 node: 
[from HarpoonLaunch2.isOver to set_enabled
                                          ]
[from fraction_changed to HarpoonFire2.set_fraction
                                          ]
[from fraction_changed to HarpoonRot2.set_fraction
                                          ]
 --> 
<TimeSensor DEF='Clock8' cycleInterval='8' enabled='false' loop='true'/>  | 
                                    
| 538 | <!-- PositionInterpolators for Torpedoes --> | 
| 539 | 
                                           
                                            
 
                         <!-- ROUTE information for TorpedoFire1 node: 
[from Clock1.fraction_changed to set_fraction
                                          ]
[from value_changed to Torpedo1.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='TorpedoFire1' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 0 16 0 0 20 0 0 24 0 0 28 0 0 32 0 0 36 0 0 40 0'/>  | 
                                    
| 540 | 
                                           
                                            
 
                         <!-- ROUTE information for TorpedoFire2 node: 
[from Clock2.fraction_changed to set_fraction
                                          ]
[from value_changed to Torpedo2.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='TorpedoFire2' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 0 16 0 0 20 0 0 24 0 0 28 0 0 32 0 0 36 0 0 40 0'/>  | 
                                    
| 541 | 
                                           
                                            
 
                         <!-- ROUTE information for TorpedoFire3 node: 
[from Clock3.fraction_changed to set_fraction
                                          ]
[from value_changed to Torpedo3.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='TorpedoFire3' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 0 16 0 0 20 0 0 24 0 0 28 0 0 32 0 0 36 0 0 40 0'/>  | 
                                    
| 542 | 
                                           
                                            
 
                         <!-- ROUTE information for TorpedoFire4 node: 
[from Clock4.fraction_changed to set_fraction
                                          ]
[from value_changed to Torpedo4.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='TorpedoFire4' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 0 16 0 0 20 0 0 24 0 0 28 0 0 32 0 0 36 0 0 40 0'/>  | 
                                    
| 543 | 
                                           
                                            
 
                         <!-- ROUTE information for TorpedoFire5 node: 
[from Clock5.fraction_changed to set_fraction
                                          ]
[from value_changed to Torpedo5.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='TorpedoFire5' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 0 16 0 0 20 0 0 24 0 0 28 0 0 32 0 0 36 0 0 40 0'/>  | 
                                    
| 544 | 
                                           
                                            
 
                         <!-- ROUTE information for TorpedoFire6 node: 
[from Clock6.fraction_changed to set_fraction
                                          ]
[from value_changed to Torpedo6.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='TorpedoFire6' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 0 16 0 0 20 0 0 24 0 0 28 0 0 32 0 0 36 0 0 40 0'/>  | 
                                    
| 545 | <!-- PositionInterpolators for Missiles --> | 
| 546 | 
                                           
                                            
 
                         <!-- ROUTE information for HarpoonFire1 node: 
[from Clock7.fraction_changed to set_fraction
                                          ]
[from value_changed to Harpoon1.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='HarpoonFire1' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 -1 16 0 -3 20 0 -6 24 0 -10 28 0 -15 32 0 -21 36 0 -28 40 0'/>  | 
                                    
| 547 | 
                                           
                                            
 
                         <!-- ROUTE information for HarpoonFire2 node: 
[from Clock8.fraction_changed to set_fraction
                                          ]
[from value_changed to Harpoon2.set_translation
                                          ]
 --> 
<PositionInterpolator DEF='HarpoonFire2' key='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1' keyValue='0 0 0 0 4 0 0 8 0 0 12 0 -1 16 0 -3 20 0 -6 24 0 -10 28 0 -15 32 0 -21 36 0 -28 40 0'/>  | 
                                    
| 548 | <!-- OrientationInterpolators for Missiles --> | 
| 549 | 
                                           
                                            
 
                         <!-- ROUTE information for HarpoonRot1 node: 
[from Clock7.fraction_changed to set_fraction
                                          ]
[from value_changed to Harpoon1.set_rotation
                                          ]
 --> 
<OrientationInterpolator DEF='HarpoonRot1' 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 0 1 0 0 0 1 0 0 0 1 0.112 0 0 1 0.224 0 0 1 0.449 0 0 1 0.673 0 0 1 0.897 0 0 1 1.121 0 0 1 1.346 0 0 1 1.57'/>  | 
                                    
| 550 | 
                                           
                                            
 
                         <!-- ROUTE information for HarpoonRot2 node: 
[from Clock8.fraction_changed to set_fraction
                                          ]
[from value_changed to Harpoon2.set_rotation
                                          ]
 --> 
<OrientationInterpolator DEF='HarpoonRot2' 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 0 1 0 0 0 1 0 0 0 1 0.112 0 0 1 0.224 0 0 1 0.449 0 0 1 0.673 0 0 1 0.897 0 0 1 1.121 0 0 1 1.346 0 0 1 1.57'/>  | 
                                    
| 551 | </Group> | 
| 552 | <!-- Missile Sound --> | 
| 553 | < ROUTE fromNode='HarpoonLaunch1' fromField='touchTime' toNode='MissileSound1' toField='set_startTime'/> | 
| 554 | < ROUTE fromNode='HarpoonLaunch2' fromField='touchTime' toNode='MissileSound1' toField='set_startTime'/> | 
| 555 | <!-- Launch Torpedo #1 --> | 
| 556 | < ROUTE fromNode='TorpedoLaunch1' fromField='isOver' toNode='Clock1' toField='set_enabled'/> | 
| 557 | < ROUTE fromNode='Clock1' fromField='fraction_changed' toNode='TorpedoFire1' toField='set_fraction'/> | 
| 558 | < ROUTE fromNode='TorpedoFire1' fromField='value_changed' toNode='Torpedo1' toField='set_translation'/> | 
| 559 | <!-- Launch Torpedo #2 --> | 
| 560 | < ROUTE fromNode='TorpedoLaunch2' fromField='isOver' toNode='Clock2' toField='set_enabled'/> | 
| 561 | < ROUTE fromNode='Clock2' fromField='fraction_changed' toNode='TorpedoFire2' toField='set_fraction'/> | 
| 562 | < ROUTE fromNode='TorpedoFire2' fromField='value_changed' toNode='Torpedo2' toField='set_translation'/> | 
| 563 | <!-- Launch Torpedo #3 --> | 
| 564 | < ROUTE fromNode='TorpedoLaunch3' fromField='isOver' toNode='Clock3' toField='set_enabled'/> | 
| 565 | < ROUTE fromNode='Clock3' fromField='fraction_changed' toNode='TorpedoFire3' toField='set_fraction'/> | 
| 566 | < ROUTE fromNode='TorpedoFire3' fromField='value_changed' toNode='Torpedo3' toField='set_translation'/> | 
| 567 | <!-- Launch Torpedo #4 --> | 
| 568 | < ROUTE fromNode='TorpedoLaunch4' fromField='isOver' toNode='Clock4' toField='set_enabled'/> | 
| 569 | < ROUTE fromNode='Clock4' fromField='fraction_changed' toNode='TorpedoFire4' toField='set_fraction'/> | 
| 570 | < ROUTE fromNode='TorpedoFire4' fromField='value_changed' toNode='Torpedo4' toField='set_translation'/> | 
| 571 | <!-- Launch Torpedo #5 --> | 
| 572 | < ROUTE fromNode='TorpedoLaunch5' fromField='isOver' toNode='Clock5' toField='set_enabled'/> | 
| 573 | < ROUTE fromNode='Clock5' fromField='fraction_changed' toNode='TorpedoFire5' toField='set_fraction'/> | 
| 574 | < ROUTE fromNode='TorpedoFire5' fromField='value_changed' toNode='Torpedo5' toField='set_translation'/> | 
| 575 | <!-- Launch Torpedo #6 --> | 
| 576 | < ROUTE fromNode='TorpedoLaunch6' fromField='isOver' toNode='Clock6' toField='set_enabled'/> | 
| 577 | < ROUTE fromNode='Clock6' fromField='fraction_changed' toNode='TorpedoFire6' toField='set_fraction'/> | 
| 578 | < ROUTE fromNode='TorpedoFire6' fromField='value_changed' toNode='Torpedo6' toField='set_translation'/> | 
| 579 | <!-- Launch Harpoon #1 --> | 
| 580 | < ROUTE fromNode='HarpoonLaunch1' fromField='isOver' toNode='Clock7' toField='set_enabled'/> | 
| 581 | < ROUTE fromNode='Clock7' fromField='fraction_changed' toNode='HarpoonFire1' toField='set_fraction'/> | 
| 582 | < ROUTE fromNode='HarpoonFire1' fromField='value_changed' toNode='Harpoon1' toField='set_translation'/> | 
| 583 | < ROUTE fromNode='Clock7' fromField='fraction_changed' toNode='HarpoonRot1' toField='set_fraction'/> | 
| 584 | < ROUTE fromNode='HarpoonRot1' fromField='value_changed' toNode='Harpoon1' toField='set_rotation'/> | 
| 585 | <!-- Launch Harpoon #2 --> | 
| 586 | < ROUTE fromNode='HarpoonLaunch2' fromField='isOver' toNode='Clock8' toField='set_enabled'/> | 
| 587 | < ROUTE fromNode='Clock8' fromField='fraction_changed' toNode='HarpoonFire2' toField='set_fraction'/> | 
| 588 | < ROUTE fromNode='HarpoonFire2' fromField='value_changed' toNode='Harpoon2' toField='set_translation'/> | 
| 589 | < ROUTE fromNode='Clock8' fromField='fraction_changed' toNode='HarpoonRot2' toField='set_fraction'/> | 
| 590 | < ROUTE fromNode='HarpoonRot2' fromField='value_changed' toNode='Harpoon2' toField='set_rotation'/> | 
| 591 | </Group> | 
| 592 | <!-- Drag the Submarine --> | 
| 593 | < ROUTE fromNode='SubDrag' fromField='translation_changed' toNode='Submarine' toField='set_translation'/> | 
| 594 | <!-- Moving the Submarine using the main TouchSensor --> | 
| 595 | < ROUTE fromNode='Touch1' fromField='touchTime' toNode='Clock' toField='set_startTime'/> | 
| 596 | < ROUTE fromNode='Clock' fromField='fraction_changed' toNode='SubMove' toField='set_fraction'/> | 
| 597 | < ROUTE fromNode='SubMove' fromField='value_changed' toNode='Submarine' toField='set_translation'/> | 
| 598 | < ROUTE fromNode='Clock' fromField='fraction_changed' toNode='SubTurn' toField='set_fraction'/> | 
| 599 | < ROUTE fromNode='SubTurn' fromField='value_changed' toNode='Submarine' toField='set_rotation'/> | 
| 600 | </Transform> | 
| 601 | </Scene> | 
| 602 | </X3D> | 
Event Graph ROUTE Table entries with 36 ROUTE connections total, showing X3D event-model relationships for this scene.
Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.
| 
               HarpoonLaunch1
                TouchSensor touchTime SFTime  | 
            
               MissileSound1
                AudioClip set_startTime SFTime  | 
            
            
|||||||||
| 
               HarpoonLaunch1
                TouchSensor isOver SFBool  | 
            
               Clock7
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock7
                TimeSensor fraction_changed SFFloat  | 
            
               HarpoonFire1
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               HarpoonFire1
                PositionInterpolator value_changed SFVec3f  | 
            
               Harpoon1
                Transform set_translation SFVec3f  | 
            
|||
| 
               
                  
                     then
                  
               
                | 
            
               Clock7
                TimeSensor fraction_changed SFFloat  | 
            
               HarpoonRot1
                OrientationInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               HarpoonRot1
                OrientationInterpolator value_changed SFRotation  | 
            
               Harpoon1
                Transform set_rotation SFRotation  | 
            
            
|||||
| 
               HarpoonLaunch2
                TouchSensor touchTime SFTime  | 
            
               MissileSound1
                AudioClip set_startTime SFTime  | 
            
            
|||||||||
| 
               HarpoonLaunch2
                TouchSensor isOver SFBool  | 
            
               Clock8
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock8
                TimeSensor fraction_changed SFFloat  | 
            
               HarpoonFire2
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               HarpoonFire2
                PositionInterpolator value_changed SFVec3f  | 
            
               Harpoon2
                Transform set_translation SFVec3f  | 
            
|||
| 
               
                  
                     then
                  
               
                | 
            
               Clock8
                TimeSensor fraction_changed SFFloat  | 
            
               HarpoonRot2
                OrientationInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               HarpoonRot2
                OrientationInterpolator value_changed SFRotation  | 
            
               Harpoon2
                Transform set_rotation SFRotation  | 
            
            
|||||
| 
               TorpedoLaunch1
                TouchSensor isOver SFBool  | 
            
               Clock1
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock1
                TimeSensor fraction_changed SFFloat  | 
            
               TorpedoFire1
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               TorpedoFire1
                PositionInterpolator value_changed SFVec3f  | 
            
               Torpedo1
                Transform set_translation SFVec3f  | 
            
            
| 
               TorpedoLaunch2
                TouchSensor isOver SFBool  | 
            
               Clock2
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock2
                TimeSensor fraction_changed SFFloat  | 
            
               TorpedoFire2
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               TorpedoFire2
                PositionInterpolator value_changed SFVec3f  | 
            
               Torpedo2
                Transform set_translation SFVec3f  | 
            
            
| 
               TorpedoLaunch3
                TouchSensor isOver SFBool  | 
            
               Clock3
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock3
                TimeSensor fraction_changed SFFloat  | 
            
               TorpedoFire3
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               TorpedoFire3
                PositionInterpolator value_changed SFVec3f  | 
            
               Torpedo3
                Transform set_translation SFVec3f  | 
            
            
| 
               TorpedoLaunch4
                TouchSensor isOver SFBool  | 
            
               Clock4
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock4
                TimeSensor fraction_changed SFFloat  | 
            
               TorpedoFire4
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               TorpedoFire4
                PositionInterpolator value_changed SFVec3f  | 
            
               Torpedo4
                Transform set_translation SFVec3f  | 
            
            
| 
               TorpedoLaunch5
                TouchSensor isOver SFBool  | 
            
               Clock5
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock5
                TimeSensor fraction_changed SFFloat  | 
            
               TorpedoFire5
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               TorpedoFire5
                PositionInterpolator value_changed SFVec3f  | 
            
               Torpedo5
                Transform set_translation SFVec3f  | 
            
            
| 
               TorpedoLaunch6
                TouchSensor isOver SFBool  | 
            
               Clock6
                TimeSensor set_enabled SFBool  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock6
                TimeSensor fraction_changed SFFloat  | 
            
               TorpedoFire6
                PositionInterpolator set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               TorpedoFire6
                PositionInterpolator value_changed SFVec3f  | 
            
               Torpedo6
                Transform set_translation SFVec3f  | 
            
            
| 
               Touch1
                TouchSensor touchTime SFTime  | 
            
               Clock
                TimeSensor set_startTime SFTime  | 
            
               
                  
                     then
                  
               
                | 
            
               Clock
                TimeSensor fraction_changed SFFloat  | 
            
               SubMove
                Script set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               SubMove
                Script value_changed SFVec3f  | 
            
               Submarine
                Transform set_translation SFVec3f  | 
            
|||
| 
               
                  
                     then
                  
               
                | 
            
               Clock
                TimeSensor fraction_changed SFFloat  | 
            
               SubTurn
                Script set_fraction SFFloat  | 
            
               
                  
                     then
                  
               
                | 
            
               SubTurn
                Script value_changed SFRotation  | 
            
               Submarine
                Transform set_rotation SFRotation  | 
            
            
|||||
| 
               SubDrag
                PlaneSensor translation_changed SFVec3f  | 
            
               Submarine
                Transform set_translation SFVec3f  | 
            
            
         <!--
Color-coding legend: X3D terminology 
<X3dNode
          DEF='idName' field='value'/> 
 matches XML terminology 
<XmlElement
          DEF='idName' attribute='value'/> 
(Light-blue background: event-based behavior node or statement)
(Grey background inside box: inserted documentation)
(Magenta background: X3D Extensibility)
          -->
      
         
            
         
         <!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->