<?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='M198HowitzerWithExplosion.x3d'/>
<meta name='descriptioncontent='M198 Howitzer to scale'/>
<meta name='creatorcontent='J.P. McDonough'/>
<meta name='createdcontent='7 January 2004'/>
<meta name='modifiedcontent='2 January 2019'/>
<meta name='referencecontent=' http://www.fas.org/man/dod-101/sys/land/m198.htm '/>
<meta name='identifiercontent=' https://savage.nps.edu/Savage/Weapons/Guns/M198HowitzerWithExplosion.x3d '/>
<meta name='generatorcontent='X3D-Edit, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../../license.html'/>
</head>
<!--

Index for DEF nodes : AnimationControl, AnimationTransform, artyRound, BALLSIZE, BallTransform, barrel, barrelCover, barrelGroup, barrelMover1, basePlate, basePlateClamp, betweenTrails, black, BOOMCLOCK, BoomMaterial, BoomTimer, BoomTransform, BoxDownTimer, BoxUpTimer, brakeResevoir, breech, ButtonChoice, cami, camiPaint, camo, CannonFireSound, carriage_sensor, CircularHandle, clamp, ClearSphere, ClearSphere1, ClearSphere2, CLOCK, clock3, connectingCylinder, Crank, CrankShaft, downBarrel, elevatingMech1, elevMechMover1, explosion, explosionsensor, explosionSound, explosionSounds, explosionsoundsensor, explosionvideo, EXPSHAPE, fireMe, fireTheRound, handwheelGroup, hotGas, impact, lbasePlateClamp, left_stantion, leftHandwheel, leftRim, leftSideBar1, leftSpade, leftTire, leftTrail, leftTrailMover, leftWheel, leftWheel1, linkBolt, LowerCar, LowerCarriage1, lowerElevMechExtender, lTrailSpreader, lTravelLockAnchor, M198_Howitzer, MoveBoxDown, MoveBoxUp, muzzle_break, muzzleBreak, recoil, recoilMover, RECOILTIMER, recoilTransform, rideTheRound, rightHandwheel, rightRim, rightSideBar, RightSpade, rightTire, RightTrail, rightTrailMover, rightTrunion, rightUpperCylinder, rightWheel, rightWheel1, rim, rotateUpperCarriage, roundOrientationInterpolator, roundPathInterpolator, roundSpinner, ruc, rucL, rucR, rWheelLift, ScaleInterp, SetBoxDown, SetBoxUp, Shaft, shiny, shinyPiece, shootRound, shotEffects, shrinkCylinder, shrinkCylinderR, sideBar, sideBars, sideView, sideViewClose, sign, spade, spinTimer, StrutOne, Struts, StrutThree, StrutTwo, target, targetSphere, theBarrel, theGround, theRound, theRoundSpinner, tire, Top, TopBall, trail, trailSpreader, TransparencyInterp, Transparent, travelLock, travelLockAnchor, travelLockClock, travelLockOrient, travelLockOrientor, travelLockPiece, travelLockSensor, traversingPlatform, traversingWheel, tube, tube1, tubeSensor, underTube, upperCarriage, upperCarriagePiece, upperCylinder1, upperCylinderMover, upperExtender, upperTravelLocker, wheelDown, wheelInterpolator, wheelLift, wheelRaiser, wheelSensor, wheelUp

Index for Viewpoint images : betweenTrails, downBarrel, rideTheRound, sideView, sideViewClose, target, underTube
-->
<Scene>
<!-- The howitzer performs the following actions: 1. Trails can be spread and closed manually. 2. Wheels can be raised and lowered by clicking on them from either position. 3. The travellock can be raised only. 4. A round is fired by clicking on the billboard. best viewed from the "ride the round" view in order to see effects on target. Will only hit target if tube is not moved first. 5. Tube elevates and traverses. -->
<Sound maxBack='100maxFront='100minBack='0.01minFront='0.01'>
<!-- ROUTE information for CannonFireSound node:  [from shootRound.touchTime to startTime ] -->
<AudioClip DEF='CannonFireSounddescription='Cannon fire sound'
  url=' "../../GroundVehicles/T72M/CannonFire.wav" "https://savage.nps.edu/Savage/GroundVehicles/T72M/CannonFire.wav" '/>
</Sound>
<Viewpoint DEF='betweenTrailsdescription='between Trailsorientation='-1 0 0 0position='0 1.4 10'/>
<Viewpoint DEF='sideViewClosedescription='Side View Closeorientation='0.007 0.997 0.076 1.7635position='9.8 2.2 -1.8'/>
<Viewpoint DEF='sideViewdescription='from Sideorientation='0 1 0 1.57position='320 10 -160'/>
<Viewpoint DEF='underTubedescription='under Tubeorientation='-0.02 -0.982 -0.19 3.1266position='0 5.7 -7.4'/>
<Viewpoint DEF='downBarreldescription='down Barrelorientation='0.012 -0.925 -0.381 3.138position='-0.1 7.1 -6.2'/>
<!-- Roughly to scale. -->
<Group DEF='M198_Howitzer'>
<Group DEF='LowerCar'>
<Shape>
<Cylinder DEF='LowerCarriage1height='.5'/>
<Appearance DEF='camiPaint'>
<Material DEF='camiambientIntensity='0.25diffuseColor='0.054 0.233 0.39shininess='0'/>
<ImageTexture DEF='camorepeatS='falserepeatT='false'
  url=' "greenCamo.jpg" "http://www.web3d.org/x3d/content/examples/HumanoidAnimation/greenCamo.jpg" '/>
</Appearance>
</Shape>
<!-- ROUTE information for rightTrailMover node:  [from trailSpreader.rotation_changed to set_rotation ] -->
<Transform DEF='rightTrailMovertranslation='.1 0 0'>
<Transform DEF='RightTrailrotation='0 1 0 -1.1translation='0 -.3 0'>
<Transform DEF='brakeResevoirrotation='0 1 0 1.57translation='2 .27 0'>
<Transform rotation='1 0 0 1.57scale='1.6 1 1.2'>
<Shape>
<Cylinder height='1.2radius='.15'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
<Transform DEF='basePlateClamprotation='0 1 0 1.7scale='.05 .05 .05translation='2.7 .6 -.2'>
<Shape DEF='clamp'>
<Extrusion crossSection='0 0 1 0 1 2 3 2 3 3 0 3 0 0solid='falsespine='0 0 0 2 0 0'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform rotation='0 1 0 -1.7scale='.05 .05 .05translation='1.7 .6 -.2'>
<Shape USE='clamp'/>
</Transform>
<Transform rotation='1 0 0 -1.57'>
<Transform scale='.22 .3 .19'>
<Shape DEF='trail'>
<Extrusion crossSection='0 0 0 3 16 2.2 20 1 20 -1 18.5 -1 18 0 0 0spine='0 0 0 0 1.5 0'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
</Transform>
<Transform DEF='RightSpaderotation='0 1 0 .5scale='.07 .1 .1translation='2.9 -0.45 3.45'>
<Transform rotation='0 1 0 3.14'>
<Transform rotation='1 0 0 -1.57'>
<Shape DEF='spade'>
<Appearance USE='camiPaint'/>
<Extrusion crossSection='0 0 5 0 4 -5 4 -4 3.85 -3.5 3.75 -3 3.5 -2 3 -1 0 -.5 0 0spine='0 0 0 20 0 0'/>
</Shape>
</Transform>
</Transform>
</Transform>
<!-- ROUTE information for trailSpreader node:  [from rotation_changed to rightTrailMover.set_rotation ] -->
<CylinderSensor DEF='trailSpreaderdescription='Used to spread the trailsmaxAngle='0minAngle='-.5'/>
<ROUTE fromNode='trailSpreaderfromField='rotation_changedtoNode='rightTrailMovertoField='set_rotation'/>
</Transform>
<!-- ROUTE information for leftTrailMover node:  [from lTrailSpreader.rotation_changed to set_rotation ] -->
<Transform DEF='leftTrailMovertranslation='-.1 0 0'>
<Transform DEF='leftTrailrotation='0 1 0 -2.1translation='-.5 -.3 -.25'>
<Transform DEF='lbasePlateClamprotation='0 1 0 1.7scale='.05 .05 .05translation='2.7 .6 -.2'>
<Shape USE='clamp'/>
</Transform>
<Transform rotation='0 1 0 -1.7scale='.05 .05 .05translation='1.7 .6 -.2'>
<Shape USE='clamp'/>
</Transform>
<Transform rotation='1 0 0 -1.57'>
<Transform scale='.22 .3 .19'>
<Shape USE='trail'/>
</Transform>
</Transform>
</Transform>
<Transform DEF='leftSpaderotation='0 1 0 -.523scale='.07 .1 .1translation='-1.9 -0.45 3.9'>
<Transform center='.5 0 .5rotation='0 1 0 3.14'>
<Transform rotation='1 0 0 -1.57'>
<Shape USE='spade'/>
</Transform>
</Transform>
</Transform>
<!-- ROUTE information for lTrailSpreader node:  [from rotation_changed to leftTrailMover.set_rotation ] -->
<CylinderSensor DEF='lTrailSpreaderdescription='Used to spread the trailsmaxAngle='.5'/>
<ROUTE fromNode='lTrailSpreaderfromField='rotation_changedtoNode='leftTrailMovertoField='set_rotation'/>
</Transform>
<Transform translation='0 -.25 -.75'>
<Shape DEF='basePlate'>
<Cone bottomRadius='.75height='.25'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Group DEF='wheelRaiser'>
<!-- ROUTE information for AnimationTransform node:  [from wheelUp.value_changed to set_rotation ] [from wheelDown.value_changed to set_rotation ] -->
<Transform DEF='AnimationTransformrotation='1 0 0 .1'>
<!-- ROUTE information for ButtonChoice node:  [from SetBoxUp.triggerValue to whichChoice ] [from SetBoxDown.triggerValue to whichChoice ] -->
<Switch DEF='ButtonChoicewhichChoice='0'>
<Group>
<Transform scale='4 1 1translation='0 -.3 -.3'>
<Shape DEF='ClearSphere'>
<Appearance>
<Material DEF='TransparentemissiveColor='1 1 1transparency='1.0'/>
</Appearance>
<Sphere radius='.5'/>
</Shape>
</Transform>
<!-- ROUTE information for ClearSphere1 node:  [from touchTime to BoxUpTimer.startTime ] [from isActive to SetBoxUp.set_boolean ] -->
<TouchSensor DEF='ClearSphere1description='used to raise and lower the wheels'/>
<!-- ROUTE information for wheelUp node:  [from BoxUpTimer.fraction_changed to set_fraction ] [from value_changed to AnimationTransform.set_rotation ] -->
<OrientationInterpolator DEF='wheelUpkey='0 .25 .5 .75 .85 1keyValue='1 0 0 0 1 0 0 .5 1 0 0 .75 1 0 0 1.25 1 0 0 1.7 1 0 0 2'/>
<PositionInterpolator DEF='MoveBoxUpkey='0 .5 1keyValue='0 -3 0 0 0 0 0 3 0'/>
<!-- ROUTE information for BoxUpTimer node:  [from ClearSphere1.touchTime to startTime ] [from fraction_changed to wheelUp.set_fraction ] -->
<TimeSensor DEF='BoxUpTimercycleInterval='3'/>
<ROUTE fromNode='BoxUpTimerfromField='fraction_changedtoNode='wheelUptoField='set_fraction'/>
<ROUTE fromNode='wheelUpfromField='value_changedtoNode='AnimationTransformtoField='set_rotation'/>
<ROUTE fromNode='ClearSphere1fromField='touchTimetoNode='BoxUpTimertoField='startTime'/>
</Group>
<Group>
<Transform scale='4 1 1translation='0 -.3 -.3'>
<Shape USE='ClearSphere'/>
</Transform>
<!-- ROUTE information for ClearSphere2 node:  [from touchTime to BoxDownTimer.startTime ] [from isActive to SetBoxDown.set_boolean ] -->
<TouchSensor DEF='ClearSphere2description='used to raise and lower the wheels'/>
<!-- ROUTE information for wheelDown node:  [from BoxDownTimer.fraction_changed to set_fraction ] [from value_changed to AnimationTransform.set_rotation ] -->
<OrientationInterpolator DEF='wheelDownkey='0 .25 .5 .75 .85 1keyValue='1 0 0 2 1 0 0 1.7 1 0 0 1.25 1 0 0 .75 1 0 0 .5 1 0 0 0'/>
<PositionInterpolator DEF='MoveBoxDownkey='0 0.5 1keyValue='0 3 0 0 0 0 0 -3 0'/>
<!-- ROUTE information for BoxDownTimer node:  [from ClearSphere2.touchTime to startTime ] [from fraction_changed to wheelDown.set_fraction ] -->
<TimeSensor DEF='BoxDownTimercycleInterval='3'/>
<ROUTE fromNode='BoxDownTimerfromField='fraction_changedtoNode='wheelDowntoField='set_fraction'/>
<ROUTE fromNode='wheelDownfromField='value_changedtoNode='AnimationTransformtoField='set_rotation'/>
<ROUTE fromNode='ClearSphere2fromField='touchTimetoNode='BoxDownTimertoField='startTime'/>
</Group>
</Switch>
<Group DEF='rightWheel'>
<Transform DEF='rightWheel1translation='.2 -.8 -.3'>
<Transform DEF='rightTirerotation='0 0 1 -1.57translation='1.0 .4 0'>
<Shape DEF='tire'>
<Cylinder height='.2radius='.4'/>
<Appearance>
<Material DEF='blackdiffuseColor='0.1 0.1 0.1shininess='0'/>
</Appearance>
</Shape>
</Transform>
<Transform DEF='rightRimrotation='0 0 1 -1.57translation='1.0 .4 0'>
<Shape DEF='rim'>
<Cylinder height='.22radius='.25'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
<Transform rotation='1 0 0 -1.75'>
<Transform DEF='rWheelLiftrotation='0 1 0 1.57scale='.25 .25 .25translation='1 0 0'>
<Transform> </Transform>
<Transform translation='1.5 1.5 .45'> </Transform>
<Transform rotation='0 0 1 1translation='1 1 0.3'>
<Shape>
<Box size='2 1 .3'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
</Transform>
</Group>
<Group DEF='leftWheel'>
<!-- ROUTE information for leftWheel1 node:  [from wheelInterpolator.value_changed to set_rotation ] -->
<Transform DEF='leftWheel1translation='-1.2 -.35 -.35'>
<Transform DEF='leftTirerotation='0 0 1 -1.57'>
<Shape USE='tire'/>
</Transform>
<Transform DEF='leftRimrotation='0 0 1 -1.57'>
<Shape USE='rim'/>
</Transform>
</Transform>
<!-- ROUTE information for wheelSensor node:  [from isOver to CLOCK.set_enabled ] -->
<TouchSensor DEF='wheelSensordescription='Point at box to spin it'/>
<!-- ROUTE information for CLOCK node:  [from wheelSensor.isOver to set_enabled ] [from fraction_changed to wheelInterpolator.set_fraction ] -->
<TimeSensor DEF='CLOCKcycleInterval='4enabled='falseloop='true'/>
<!-- ROUTE information for wheelInterpolator node:  [from CLOCK.fraction_changed to set_fraction ] [from value_changed to leftWheel1.set_rotation ] -->
<OrientationInterpolator DEF='wheelInterpolatorkey='0.0 0.25 0.50 0.75 1.0keyValue='1 0.0 0 -1.57 1 0.0 0 0 1 0.0 0 1.57 1 0 0 3.14 1 0 0 -1.57'/>
<Transform rotation='1 0 0 -3.1'>
<Transform DEF='wheelLiftrotation='0 1 0 -1.57scale='.25 .25 .25translation='-1 0 0'>
<Transform> </Transform>
<Transform translation='1.5 1.5 .45'> </Transform>
<Transform rotation='0 0 1 1translation='1 1 0.3'>
<Shape>
<Box size='2 1 .3'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
</Transform>
</Group>
</Transform>
</Group>
<Group DEF='AnimationControl'>
<!-- ROUTE information for SetBoxDown node:  [from ClearSphere2.isActive to set_boolean ] [from triggerValue to ButtonChoice.whichChoice ] -->
<IntegerTrigger DEF='SetBoxDownintegerKey='0'/>
<!-- ROUTE information for SetBoxUp node:  [from ClearSphere1.isActive to set_boolean ] [from triggerValue to ButtonChoice.whichChoice ] -->
<IntegerTrigger DEF='SetBoxUpintegerKey='1'/>
<ROUTE fromNode='ClearSphere1fromField='isActivetoNode='SetBoxUptoField='set_boolean'/>
<ROUTE fromNode='ClearSphere2fromField='isActivetoNode='SetBoxDowntoField='set_boolean'/>
<ROUTE fromNode='SetBoxUpfromField='triggerValuetoNode='ButtonChoicetoField='whichChoice'/>
<ROUTE fromNode='SetBoxDownfromField='triggerValuetoNode='ButtonChoicetoField='whichChoice'/>
</Group>
</Group>
<Group DEF='upperCarriagePiece'>
<!-- ROUTE information for rotateUpperCarriage node:  [from carriage_sensor.rotation_changed to set_rotation ] -->
<Transform DEF='rotateUpperCarriagecenter='0 -2.5 0'>
<Group DEF='upperCarriage'>
<Transform DEF='rightTrunionrotation='1 0 0 1.57translation='.6 1.2 .65'>
<Transform rotation='0 1 0 3.14'>
<Shape DEF='left_stantion'>
<Extrusion crossSection='0 4 2 43 -4 5 -7 10 -712 -9 2 -9 0 -4 0 4scale='.1 .1 .1 .1spine='0 0 0 .2 0 0'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
<Transform rotation='1 0 0 1.57translation='-.4 1.2 .65'>
<Transform rotation='0 1 0 3.14'>
<Shape USE='left_stantion'/>
</Transform>
</Transform>
<Transform DEF='leftHandwheelrotation='0 1 0 -1.57scale='.8 .8 .8translation='-.75 1 .5'>
<!-- This handwheel was copied from the Savage library from the LW155 howitzer -->
<LOD DEF='Crankrange='25'>
<Group DEF='handwheelGroup'>
<Transform DEF='CircularHandle'>
<Shape>
<Extrusion beginCap='falsecreaseAngle='1.57crossSection='0.1 0 0.092 -0.038 0.071 -0.071 0.038 -0.092 0 -0.1 -0.038 -0.092 -0.071 -0.071 -0.092 -0.038 -0.1 0 -0.092 0.038 -0.071 0.071 -0.038 0.092 0 0.1 0.038 0.092 0.071 0.071 0.092 0.038 0.1 0endCap='falsescale='0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6spine='0.3 0 0 0.276 -0.114 0 0.213 -0.213 0 0.114 -0.276 0 0 -0.3 0 -0.114 -0.276 0 -0.213 -0.213 0 -0.276 -0.114 0 -0.3 0 0 -0.276 0.114 0 -0.213 0.213 0 -0.114 0.276 0 0 0.3 0 0.114 0.276 0 0.213 0.213 0 0.276 0.114 0 0.3 0 0'/>
<Appearance>
<Material diffuseColor='.1 .10 .1'/>
</Appearance>
</Shape>
</Transform>
<Transform DEF='CrankShafttranslation='0 0 -0.05'>
<Transform DEF='Shaftrotation='1 0 0 1.57'>
<Shape>
<Cylinder height='0.02radius='0.08'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
<Transform DEF='Toprotation='1 0 0 1.57translation='0 0 -0.1'>
<Shape>
<Cylinder height='0.2radius='0.05'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
<Transform DEF='TopBalltranslation='0 0 -0.01'>
<Shape>
<Sphere radius='0.05'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
</Transform>
<Transform DEF='Struts'>
<Transform DEF='StrutOnerotation='1 0 0 0.21translation='0 0.04 -0.05725'>
<Shape>
<Extrusion creaseAngle='3.14crossSection='0.01 0 0.0092 -0.0038 0.0071 -0.0071 0.0038 -0.0092 0 -0.01 -0.0038 -0.0092 -0.0071 -0.0071 -0.0092 -0.0038 -0.01 0 -0.0092 0.0038 -0.0071 0.0071 -0.0038 0.0092 0 0.01 0.0038 0.0092 0.0071 0.0071 0.0092 0.0038 0.01 0scale='4 2 2 2 2 2 2 2 2 4spine='0 0 0 0 0.125 0 0 0.25 0 0 0.255 0 0 0.275 0'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
<Transform DEF='StrutTworotation='0 0 1 2.09'>
<Transform USE='StrutOne'/>
</Transform>
<Transform DEF='StrutThreerotation='0 0 -1 2.09'>
<Transform USE='StrutOne'/>
</Transform>
</Transform>
</Group>
<WorldInfo info='"null node"'/>
</LOD>
</Transform>
<Transform DEF='rightHandwheelrotation='0 1 0 1.57scale='.8 .8 .8translation='.75 1 .5'>
<LOD USE='Crank'/>
</Transform>
<Transform DEF='traversingWheelrotation='0 1 0 -.85scale='.5 .5 .5translation='-.68 .5 .6'>
<LOD USE='Crank'/>
</Transform>
<Transform translation='0 .25 0'>
<Shape DEF='traversingPlatform'>
<Cylinder height='.35radius='.8'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform DEF='rightUpperCylinderrotation='0 0 1 1.57translation='0 1.5 .2'>
<Transform center='0 0 1rotation='0 0 1 -3.14'>
<Transform>
<!-- ROUTE information for ruc node:  [from upperCylinderMover.upperRotation to set_rotation ] -->
<Transform DEF='ruccenter='0 0 .3'>
<Transform DEF='rucLrotation='1 0 0 -1.57translation='0 -.48 0'>
<Transform translation='0 .050 0'>
<Shape DEF='upperCylinder1'>
<Cylinder height='.45radius='.075'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform translation='0 -.22 0'>
<Shape DEF='linkBolt'>
<Sphere radius='.05'/>
<Appearance>
<Material USE='black'/>
</Appearance>
</Shape>
</Transform>
<!-- ROUTE information for shrinkCylinder node:  [from upperCylinderMover.extendCylinder to set_translation ] [from upperCylinderMover.shrinkCylinder to set_scale ] -->
<Transform DEF='shrinkCylindertranslation='0 .22 0'>
<Shape DEF='upperExtender'>
<Cylinder height='.55radius='.060'/>
<Appearance> </Appearance>
</Shape>
</Transform>
</Transform>
<Transform DEF='rucRrotation='1 0 0 -1.57translation='0 .48 0'>
<Transform translation='0 .050 0'>
<Shape USE='upperCylinder1'/>
</Transform>
<Transform translation='0 -.22 0'>
<Shape USE='linkBolt'/>
</Transform>
<!-- ROUTE information for shrinkCylinderR node:  [from upperCylinderMover.extendCylinder to set_translation ] [from upperCylinderMover.shrinkCylinder to set_scale ] -->
<Transform DEF='shrinkCylinderRtranslation='0 .22 0'>
<Shape USE='upperExtender'/>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Group>
<Transform DEF='barrelGrouprotation='0 0 1 -1.57'>
<!-- ROUTE information for barrelMover1 node:  [from tubeSensor.rotation_changed to set_rotation ] -->
<Transform DEF='barrelMover1center='-1. 0 .45rotation='0 0 1 .01translation='.2 0 0'>
<!-- ROUTE information for tubeSensor node:  [from rotation_changed to barrelMover1.set_rotation ] [from rotation_changed to upperCylinderMover.barrelRotation ] -->
<CylinderSensor DEF='tubeSensordescription='sensor for tube elevationmaxAngle='0minAngle='-.65'/>
<ROUTE fromNode='tubeSensorfromField='rotation_changedtoNode='barrelMover1toField='set_rotation'/>
<Transform DEF='theBarrel'>
<Group DEF='barrel'>
<Transform DEF='recoilTransformrotation='0 0 1 1.57translation='-.20 0 -.2'>
<!-- ROUTE information for recoilMover node:  [from recoil.value_changed to set_translation ] -->
<Transform DEF='recoilMover'>
<Transform DEF='tube1rotation='1 0 0 -.84translation='0 2.45 -1'>
<Transform translation='0 -2.5 0'> </Transform>
<Transform DEF='breechtranslation='0 -2.5 0'>
<Shape>
<Cylinder height='.1radius='.2'/>
<Appearance USE='shiny'/>
</Shape>
</Transform>
</Transform>
<Transform DEF='muzzle_breaktranslation='0 .05 0'>
<Transform rotation='1 0 0 .75translation='.25 4.48 -3.6'>
<Transform rotation='0 0 1 1.57'>
<Transform rotation='1 0 0 3.14scale='1.6 .7 .85'>
<Shape DEF='muzzleBreak'>
<Extrusion crossSection='0 0 3 0 3 -3 2.8 -3.2 2.3 -3.7 2 -4 1 -4 .8 -3.8 .3 -3.3 0 -3 0 0scale='.25 .25 .25 .25spine='0 0 0 .25 0 0'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
</Transform>
</Transform>
<Transform rotation='1 0 0 .75translation='.25 4.4 -3.2'>
<Shape>
<Box size='.01 .3 .4'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
<Transform rotation='1 0 0 .75translation='-.225 4.4 -3.2'>
<Shape>
<Box size='.01 .3 .4'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
<Transform rotation='1 0 0 -.84translation='0 4.64 -3.45'>
<Shape>
<Cylinder height='.02radius='.17'/>
<Appearance>
<Material diffuseColor='.1 .1 .1'/>
</Appearance>
</Shape>
</Transform>
</Transform>
</Transform>
<Transform DEF='sideBarstranslation='0 -.2 0'>
<Transform DEF='rightSideBarrotation='1 0 0 .75translation='.45 1.9 -.250'>
<Shape DEF='sideBar'>
<Box size='.2 .2 2.2'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform DEF='leftSideBar1rotation='1 0 0 .75translation='-.45 1.9 -.250'>
<Shape USE='sideBar'/>
</Transform>
<Transform DEF='lTravelLockAnchorrotation='1 0 0 -2.3translation='-.55 1.7 -.2'>
<Shape>
<Extrusion crossSection='0 0 0 .15 .15 .15 .15 0 0 0scale='1 .85 .75 .75 .5 .5spine='0 0 0 0 .1 0 0 .2 0'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform DEF='travelLockAnchorrotation='1 0 0 -2.3translation='.4 1.7 -.2'>
<Shape>
<Extrusion crossSection='0 0 0 .15 .15 .15 .15 0 0 0scale='1 .85 .75 .75 .5 .5spine='0 0 0 0 .1 0 0 .2 0'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform rotation='1 0 0 .65translation='.48 2.4 -1.'>
<Shape DEF='upperTravelLocker'>
<Box size='.07 .2 .04'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform rotation='1 0 0 .65translation='-.48 2.4 -1'>
<Shape USE='upperTravelLocker'/>
</Transform>
</Transform>
<Transform rotation='1 0 0 -.84translation='0 1.65 -.1'>
<Shape DEF='barrelCover'>
<Cylinder height='2.5radius='.4'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform DEF='travelLockPiecerotation='1 0 0 -.76translation='-.5 1.72 -.75'>
<!-- ROUTE information for travelLockOrient node:  [from travelLockOrientor.value_changed to set_rotation ] -->
<Transform DEF='travelLockOrientcenter='0 -.5 0rotation='1 0 0 -2.25'>
<Transform>
<Shape DEF='travelLock'>
<Cylinder height='1radius='.05'/>
<Appearance USE='camiPaint'/>
</Shape>
</Transform>
<Transform translation='1 0 0'>
<Shape USE='travelLock'/>
</Transform>
<Transform rotation='0 0 1 .78scale='1 1.38 1translation='.5 0 0'>
<Shape USE='travelLock'/>
</Transform>
<Transform center='0 0 -.705rotation='0 0 1 -.78scale='1 1.38 1translation='.5 0 0'>
<Shape USE='travelLock'/>
</Transform>
<Transform DEF='connectingCylinderrotation='0 0 1 1.57scale='1 .1 1translation='0 .5 0'>
<Shape USE='travelLock'/>
</Transform>
<Transform rotation='0 0 1 1.57scale='1 .1 1translation='0 -.5 0'>
<Shape USE='travelLock'/>
</Transform>
<Transform rotation='0 0 1 1.57scale='1 .1 1translation='1 .5 0'>
<Shape USE='travelLock'/>
</Transform>
<Transform rotation='0 0 1 1.57scale='1 .1 1translation='1 -.5 0'>
<Shape USE='travelLock'/>
</Transform>
</Transform>
<!-- ROUTE information for travelLockOrientor node:  [from travelLockClock.fraction_changed to set_fraction ] [from value_changed to travelLockOrient.set_rotation ] -->
<OrientationInterpolator DEF='travelLockOrientorkey='0 .25 .5 .75 .85 1keyValue='1 0 0 -2.25 1 0 0 -1.7 1 0 0 -1.25 1 0 0 -.75 1 0 0 -.5 1 0 0 0'/>
<!-- ROUTE information for travelLockSensor node:  [from touchTime to travelLockClock.set_startTime ] -->
<TouchSensor DEF='travelLockSensordescription='rasies and lowers travel lock'/>
<!-- ROUTE information for travelLockClock node:  [from travelLockSensor.touchTime to set_startTime ] [from fraction_changed to travelLockOrientor.set_fraction ] -->
<TimeSensor DEF='travelLockClockcycleInterval='5'/>
<ROUTE fromNode='travelLockSensorfromField='touchTimetoNode='travelLockClocktoField='set_startTime'/>
<ROUTE fromNode='travelLockClockfromField='fraction_changedtoNode='travelLockOrientortoField='set_fraction'/>
<ROUTE fromNode='travelLockOrientorfromField='value_changedtoNode='travelLockOrienttoField='set_rotation'/>
</Transform>
<!-- ROUTE information for theRound node:  [from roundPathInterpolator.value_changed to set_translation ] [from roundOrientationInterpolator.value_changed to set_rotation ] -->
<Transform DEF='theRoundrotation='1 0 0 -.77translation='0 3.7 -2.5'>
<!-- ROUTE information for theRoundSpinner node:  [from roundSpinner.value_changed to set_rotation ] -->
<Transform DEF='theRoundSpinner'>
<Transform> </Transform>
<!-- ROUTE information for spinTimer node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to roundSpinner.set_fraction ] -->
<TimeSensor DEF='spinTimercycleInterval='3loop='true'/>
<!-- ROUTE information for roundSpinner node:  [from spinTimer.fraction_changed to set_fraction ] [from value_changed to theRoundSpinner.set_rotation ] -->
<OrientationInterpolator DEF='roundSpinnerkey='0.0 0.25 0.50 0.75 1.0keyValue='0 1 0 -1.57 0 1 0 0 0 1 0 1.57 0 1 0 3.14 0 1 0 -1.57'/>
</Transform>
<!-- ROUTE information for roundPathInterpolator node:  [from clock3.fraction_changed to set_fraction ] [from value_changed to theRound.set_translation ] -->
<PositionInterpolator DEF='roundPathInterpolatorkey='0.057 0.0858823529 0.088235294 0.117647059 0.147058824 0.176470588 0.205882353 0.235294118 0.264705882 0.294117647 0.323529412 0.352941176 0.382352941 0.411764706 0.441176471 0.470588235 0.5 0.529411765 0.558823529 0.588235294 0.617647059 0.647058824 0.676470588 0.705882353 0.735294118 0.764705882 0.794117647 0.823529412 0.852941176 0.882352941 0.911764706 0.941176471 0.970588235keyValue='0 3.8 -2.6 0 30.6227766 -10 0 59.2455532 -20 0 85.86832981 -30 0 110.4911064 -40 0 133.113883 -50 0 153.7366596 -60 0 172.3594362 -70 0 188.9822128 -80 0 203.6049894 -90 0 216.227766 -100 0 226.8505426 -110 0 235.4733192 -120 0 242.0960958 -130 0 246.7188724 -140 0 249.341649 -150 0 249.9644256 -160 0 248.5872022 -170 0 245.2099788 -180 0 239.8327554 -190 0 232.455532 -200 0 223.0783086 -210 0 211.7010852 -220 0 198.3238618 -230 0 182.9466384 -240 0 165.569415 -250 0 146.1921916 -260 0 124.8149682 -270 0 101.4377448 -280 0 76.06052145 -290 0 48.68329805 -300 0 19.30607465 -310 0 -1 -320'/>
<!-- ROUTE information for roundOrientationInterpolator node:  [from clock3.fraction_changed to set_fraction ] [from value_changed to theRound.set_rotation ] -->
<OrientationInterpolator DEF='roundOrientationInterpolatorkey='0.029411765 0.058823529 0.088235294 0.117647059 0.147058824 0.176470588 0.205882353 0.235294118 0.264705882 0.294117647 0.323529412 0.352941176 0.382352941 0.411764706 0.441176471 0.470588235 0.5 0.529411765 0.558823529 0.588235294 0.617647059 0.647058824 0.676470588 0.705882353 0.735294118 0.764705882 0.794117647 0.823529412 0.852941176 0.882352941 0.911764706 0.941176471 0.970588235keyValue='1 0 0 -1.03580267483729 1 0 0 -1.07069156372618 1 0 0 -1.10558045261507 1 0 0 -1.14046934150396 1 0 0 -1.17535823039285 1 0 0 -1.21024711928174 1 0 0 -1.24513600817063 1 0 0 -1.28002489705952 1 0 0 -1.31491378594841 1 0 0 -1.34980267483729 1 0 0 -1.38469156372618 1 0 0 -1.41958045261507 1 0 0 -1.45446934150396 1 0 0 -1.48935823039285 1 0 0 -1.52424711928174 1 0 0 -1.55913600817063 1 0 0 -1.59402489705952 1 0 0 -1.6289137859484 1 0 0 -1.66380267483729 1 0 0 -1.69869156372618 1 0 0 -1.73358045261507 1 0 0 -1.76846934150396 1 0 0 -1.80335823039285 1 0 0 -1.83824711928174 1 0 0 -1.87313600817063 1 0 0 -1.90802489705952 1 0 0 -1.9429137859484 1 0 0 -1.97780267483729 1 0 0 -2.01269156372618 1 0 0 -2.04758045261507 1 0 0 -2.08246934150396 1 0 0 -2.11735823039285 1 0 0 -2.15224711928174'/>
<Viewpoint DEF='rideTheRounddescription='ride the roundorientation='1 0 0 .45position='0 -5 10'/>
</Transform>
<!-- ROUTE information for RECOILTIMER node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to recoil.set_fraction ] -->
<TimeSensor DEF='RECOILTIMERcycleInterval='5'/>
<!-- ROUTE information for recoil node:  [from RECOILTIMER.fraction_changed to set_fraction ] [from value_changed to recoilMover.set_translation ] -->
<PositionInterpolator DEF='recoilkey='0 .2 .4 .6 .8 1keyValue='0 0 0 0 -.20 .25 0 -.40 .5 0 -.20 .25 0 -.10 .15 0 0 0'/>
<ROUTE fromNode='RECOILTIMERfromField='fraction_changedtoNode='recoiltoField='set_fraction'/>
<ROUTE fromNode='recoilfromField='value_changedtoNode='recoilMovertoField='set_translation'/>
</Transform>
<Transform DEF='shotEffectsrotation='1 0 0 1.57translation='-4.7 0 -3.5'>
<Transform DEF='hotGasrotation='0 0 1 -.76translation='-.3 -.3 0'>
<Group>
<!-- ROUTE information for BallTransform node:  [from BALLSIZE.value_changed to set_scale ] -->
<Transform DEF='BallTransformscale='.000001 .000001 .0000001'>
<Shape>
<Sphere DEF='EXPSHAPEradius='25'/>
<Appearance>
<!-- explosion.png is from the Pearl Harbor scene from www.planetnine.com. -->
<ImageTexture DEF='explosion'
  url=' "../../GroundVehicles/T72M/explosion.png" "https://savage.nps.edu/Savage/GroundVehicles/T72M/explosion.png" "https://savage.nps.edu/Savage/Weapons/Missiles/explosion.png" '/>
</Appearance>
</Shape>
</Transform>
<!-- ROUTE information for BALLSIZE node:  [from BOOMCLOCK.fraction_changed to set_fraction ] [from value_changed to BallTransform.set_scale ] -->
<PositionInterpolator DEF='BALLSIZEkey='0.0 0.1 0.2 .3 .4 .5 .6 .7 .8 .9 1.0keyValue='0 0 0 .003 .001 .003 .006 .002 .006 .01 .003 .01 .015 .006 .015 .02 .02 .02 .01 .01 .01 .006 .006 .006 .003 .003 .003 0 0 0 0 0 0'/>
<!-- ROUTE information for BOOMCLOCK node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to BALLSIZE.set_fraction ] -->
<TimeSensor DEF='BOOMCLOCKcycleInterval='.85'/>
</Group>
</Transform>
<Transform rotation='0 0 1 -.76'>
<!-- ROUTE information for BoomTransform node:  [from ScaleInterp.value_changed to set_scale ] -->
<Transform DEF='BoomTransformscale='0.00001 0.0001 0.00001translation='0.0 0 0.0'>
<Shape>
<Extrusion beginCap='falsecreaseAngle='1.57crossSection='1.0 0.0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.0 -1.0 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.0 -0.0 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.0 1.0 0.38 0.92 0.71 0.71 0.92 0.38 1.0 0.0endCap='falsespine='2.0 0.0 0.0 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.0 0.0 2.0 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.0 0.0 0.0 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.0 0.0 -2.0 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.0 0.0 0.0'/>
<Appearance> </Appearance>
</Shape>
<!-- ROUTE information for TransparencyInterp node:  [from BoomTimer.fraction_changed to set_fraction ] [from value_changed to BoomMaterial.set_transparency ] -->
<ScalarInterpolator DEF='TransparencyInterpkey='0 0.04 0.1 0.7 1.0keyValue='1.0 0.2 0.3 1.0 1.0'/>
<!-- ROUTE information for ScaleInterp node:  [from BoomTimer.fraction_changed to set_fraction ] [from value_changed to BoomTransform.set_scale ] -->
<PositionInterpolator DEF='ScaleInterpkey='0 0.04 0.1 0.7 1.0keyValue='0.00001 0.00001 0.00001 0.05 0.4 0.05 0.4 0.6 0.4 0.5 0.9 0.5 0.00001 0.0001 0.00001'/>
<!-- ROUTE information for BoomTimer node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to ScaleInterp.set_fraction ] [from fraction_changed to TransparencyInterp.set_fraction ] -->
<TimeSensor DEF='BoomTimercycleInterval='5.0'/>
</Transform>
<ROUTE fromNode='BOOMCLOCKfromField='fraction_changedtoNode='BALLSIZEtoField='set_fraction'/>
<ROUTE fromNode='BALLSIZEfromField='value_changedtoNode='BallTransformtoField='set_scale'/>
<ROUTE fromNode='BoomTimerfromField='fraction_changedtoNode='ScaleInterptoField='set_fraction'/>
<ROUTE fromNode='ScaleInterpfromField='value_changedtoNode='BoomTransformtoField='set_scale'/>
<ROUTE fromNode='BoomTimerfromField='fraction_changedtoNode='TransparencyInterptoField='set_fraction'/>
<ROUTE fromNode='TransparencyInterpfromField='value_changedtoNode='BoomMaterialtoField='set_transparency'/>
</Transform>
</Transform>
</Group>
</Transform>
<Transform DEF='elevMechMover1'>
<Transform>
<Transform rotation='0 0 1 1.57'>
<Transform rotation='1 0 0 -.25translation='.45 1.7 -.3'>
<Shape DEF='elevatingMech1'>
<Cylinder height='1.3radius='.08'/>
<Appearance USE='camiPaint'/>
</Shape>
<Transform translation='0 -1 0'>
<Shape DEF='lowerElevMechExtender'>
<Cylinder height='1radius='.070'/>
<Appearance>
<Material diffuseColor='.7 .7 .7'/>
</Appearance>
</Shape>
</Transform>
</Transform>
<Transform rotation='1 0 0 -.25translation='-.45 1.7 -0.3'>
<Shape USE='elevatingMech1'/>
<Transform translation='0 -1 0'>
<Shape USE='lowerElevMechExtender'/>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
<!-- ROUTE information for upperCylinderMover node:  [from tubeSensor.rotation_changed to barrelRotation ] [from upperRotation to ruc.set_rotation ] [from extendCylinder to shrinkCylinder.set_translation ] [from shrinkCylinder to shrinkCylinder.set_scale ] [from extendCylinder to shrinkCylinderR.set_translation ] [from shrinkCylinder to shrinkCylinderR.set_scale ] -->
<Script DEF='upperCylinderMover'>
<field name='barrelRotationtype='SFRotationaccessType='inputOnly'/>
<field name='upperRotationtype='SFRotationaccessType='outputOnly'/>
<field name='shrinkCylindertype='SFVec3faccessType='outputOnly'/>
<field name='extendCylindertype='SFVec3faccessType='outputOnly'/>
<![CDATA[
              
ecmascript:

function barrelRotation (value, eventTime ) {
	angle = value[3];
	outputAngle = .75 * angle;
	upperRotation = new SFRotation ( 0, 1, 0, outputAngle);
	extendCylinder = new SFVec3f ( 0, .22 + (-.7 * angle), 0);	
	shrinkCylinder = new SFVec3f (1, 1.02 * (.85 - angle), 1);
}

            
]]>
</Script>
<ROUTE fromNode='tubeSensorfromField='rotation_changedtoNode='upperCylinderMovertoField='barrelRotation'/>
<ROUTE fromNode='upperCylinderMoverfromField='upperRotationtoNode='ructoField='set_rotation'/>
<ROUTE fromNode='upperCylinderMoverfromField='extendCylindertoNode='shrinkCylindertoField='set_translation'/>
<ROUTE fromNode='upperCylinderMoverfromField='shrinkCylindertoNode='shrinkCylindertoField='set_scale'/>
<ROUTE fromNode='upperCylinderMoverfromField='extendCylindertoNode='shrinkCylinderRtoField='set_translation'/>
<ROUTE fromNode='upperCylinderMoverfromField='shrinkCylindertoNode='shrinkCylinderRtoField='set_scale'/>
</Transform>
<!-- ROUTE information for carriage_sensor node:  [from rotation_changed to rotateUpperCarriage.set_rotation ] -->
<CylinderSensor DEF='carriage_sensordescription='sensor for upper carriage deflectionmaxAngle='.90minAngle='-.90'/>
<ROUTE fromNode='carriage_sensorfromField='rotation_changedtoNode='rotateUpperCarriagetoField='set_rotation'/>
</Transform>
</Group>
</Group>
<Background
  backUrl=' "sky2.jpg" "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg" '
  frontUrl=' "sky2.jpg" "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg" '
  leftUrl=' "sky2.jpg" "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg" '
  rightUrl=' "sky2.jpg" "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg" '
  topUrl=' "sky2.jpg" "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg" '/>

<Viewpoint DEF='targetdescription='as seen from targetorientation='0 0.995 -0.097 3.14position='0 10 -372'/>
<Transform DEF='theGroundtranslation='0 -1.5 0'> </Transform>
<ROUTE fromNode='wheelSensorfromField='isOvertoNode='CLOCKtoField='set_enabled'/>
<ROUTE fromNode='CLOCKfromField='fraction_changedtoNode='wheelInterpolatortoField='set_fraction'/>
<ROUTE fromNode='wheelInterpolatorfromField='value_changedtoNode='leftWheel1toField='set_rotation'/>
<Transform DEF='fireTheRoundtranslation='5 3 -5'>
<Billboard DEF='fireMe'>
<Transform translation='-1 -.35 0'>
<Shape>
<Text string='"FIRE!"'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</Text>
<Appearance>
<Material emissiveColor='.9 .9 .9'/>
</Appearance>
</Shape>
</Transform>
<Shape>
<Box DEF='signsize='4 2 .2'/>
<Appearance>
<Material transparency='.6'/>
<ImageTexture USE='camo'/>
</Appearance>
</Shape>
</Billboard>
<!-- ROUTE information for shootRound node:  [from touchTime to BoomTimer.set_startTime ] [from touchTime to RECOILTIMER.set_startTime ] [from touchTime to BOOMCLOCK.set_startTime ] [from touchTime to clock3.set_startTime ] [from touchTime to CannonFireSound.startTime ] [from touchTime to spinTimer.set_startTime ] -->
<TouchSensor DEF='shootRounddescription='touch muzzlebreak to shoot round'/>
<!-- ROUTE information for clock3 node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to roundPathInterpolator.set_fraction ] [from fraction_changed to roundOrientationInterpolator.set_fraction ] -->
<TimeSensor DEF='clock3cycleInterval='15'/>
</Transform>
<Transform DEF='targetSpheretranslation='0 0 -320'>
<Transform>
<Shape>
<Box size='10 1 10'/>
<Appearance> </Appearance>
</Shape>
<!-- ROUTE information for explosionsoundsensor node:  [from enterTime to explosionSound.startTime ] -->
<ProximitySensor DEF='explosionsoundsensorsize='200 400 300'/>
</Transform>
<Transform DEF='explosionvideotranslation='0 1 0'>
<Shape>
<Box size='10 1 10'/>
<Appearance>
<!-- ROUTE information for impact node:  [from explosionsensor.enterTime to startTime ] -->
<MovieTexture DEF='impact'
  url=' "Impact.avi" "https://savage.nps.edu/Savage/Weapons/Guns/Impact.avi" '/>

<Material transparency='.3'/>
</Appearance>
</Shape>
</Transform>
<Sound DEF='explosionSoundsmaxBack='100maxFront='100minBack='.01minFront='.01'>
<!-- ROUTE information for explosionSound node:  [from explosionsoundsensor.enterTime to startTime ] -->
<AudioClip DEF='explosionSounddescription='explosion sound'
  url=' "shelxpld.au" "file:///www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/shelxpld.au" "https://savage.nps.edu/Savage/Weapons/Guns/shelxpld.au" '/>
</Sound>
<!-- ROUTE information for explosionsensor node:  [from enterTime to impact.startTime ] -->
<ProximitySensor DEF='explosionsensorsize='30 30 30'/>
<ROUTE fromNode='explosionsensorfromField='enterTimetoNode='impacttoField='startTime'/>
<ROUTE fromNode='explosionsoundsensorfromField='enterTimetoNode='explosionSoundtoField='startTime'/>
</Transform>
<Transform scale='.2 1 .2translation='5 0 0'>
<Shape USE='artyRound'/>
</Transform>
<Transform scale='.2 1 .2translation='5.2 0 0'>
<Shape USE='artyRound'/>
</Transform>
<Transform scale='.2 1 .2translation='5.4 0 0'>
<Shape USE='artyRound'/>
</Transform>
<Transform/>
<ROUTE fromNode='shootRoundfromField='touchTimetoNode='BoomTimertoField='set_startTime'/>
<ROUTE fromNode='shootRoundfromField='touchTimetoNode='RECOILTIMERtoField='set_startTime'/>
<ROUTE fromNode='shootRoundfromField='touchTimetoNode='BOOMCLOCKtoField='set_startTime'/>
<ROUTE fromNode='shootRoundfromField='touchTimetoNode='clock3toField='set_startTime'/>
<ROUTE fromNode='shootRoundfromField='touchTimetoNode='CannonFireSoundtoField='startTime'/>
<ROUTE fromNode='clock3fromField='fraction_changedtoNode='roundPathInterpolatortoField='set_fraction'/>
<ROUTE fromNode='clock3fromField='fraction_changedtoNode='roundOrientationInterpolatortoField='set_fraction'/>
<ROUTE fromNode='roundPathInterpolatorfromField='value_changedtoNode='theRoundtoField='set_translation'/>
<ROUTE fromNode='roundOrientationInterpolatorfromField='value_changedtoNode='theRoundtoField='set_rotation'/>
<ROUTE fromNode='shootRoundfromField='touchTimetoNode='spinTimertoField='set_startTime'/>
<ROUTE fromNode='spinTimerfromField='fraction_changedtoNode='roundSpinnertoField='set_fraction'/>
<ROUTE fromNode='roundSpinnerfromField='value_changedtoNode='theRoundSpinnertoField='set_rotation'/>
</Scene>
</X3D>
<!--

Index for DEF nodes : AnimationControl, AnimationTransform, artyRound, BALLSIZE, BallTransform, barrel, barrelCover, barrelGroup, barrelMover1, basePlate, basePlateClamp, betweenTrails, black, BOOMCLOCK, BoomMaterial, BoomTimer, BoomTransform, BoxDownTimer, BoxUpTimer, brakeResevoir, breech, ButtonChoice, cami, camiPaint, camo, CannonFireSound, carriage_sensor, CircularHandle, clamp, ClearSphere, ClearSphere1, ClearSphere2, CLOCK, clock3, connectingCylinder, Crank, CrankShaft, downBarrel, elevatingMech1, elevMechMover1, explosion, explosionsensor, explosionSound, explosionSounds, explosionsoundsensor, explosionvideo, EXPSHAPE, fireMe, fireTheRound, handwheelGroup, hotGas, impact, lbasePlateClamp, left_stantion, leftHandwheel, leftRim, leftSideBar1, leftSpade, leftTire, leftTrail, leftTrailMover, leftWheel, leftWheel1, linkBolt, LowerCar, LowerCarriage1, lowerElevMechExtender, lTrailSpreader, lTravelLockAnchor, M198_Howitzer, MoveBoxDown, MoveBoxUp, muzzle_break, muzzleBreak, recoil, recoilMover, RECOILTIMER, recoilTransform, rideTheRound, rightHandwheel, rightRim, rightSideBar, RightSpade, rightTire, RightTrail, rightTrailMover, rightTrunion, rightUpperCylinder, rightWheel, rightWheel1, rim, rotateUpperCarriage, roundOrientationInterpolator, roundPathInterpolator, roundSpinner, ruc, rucL, rucR, rWheelLift, ScaleInterp, SetBoxDown, SetBoxUp, Shaft, shiny, shinyPiece, shootRound, shotEffects, shrinkCylinder, shrinkCylinderR, sideBar, sideBars, sideView, sideViewClose, sign, spade, spinTimer, StrutOne, Struts, StrutThree, StrutTwo, target, targetSphere, theBarrel, theGround, theRound, theRoundSpinner, tire, Top, TopBall, trail, trailSpreader, TransparencyInterp, Transparent, travelLock, travelLockAnchor, travelLockClock, travelLockOrient, travelLockOrientor, travelLockPiece, travelLockSensor, traversingPlatform, traversingWheel, tube, tube1, tubeSensor, underTube, upperCarriage, upperCarriagePiece, upperCylinder1, upperCylinderMover, upperExtender, upperTravelLocker, wheelDown, wheelInterpolator, wheelLift, wheelRaiser, wheelSensor, wheelUp

Index for Viewpoint images : betweenTrails, downBarrel, rideTheRound, sideView, sideViewClose, target, underTube
-->

<!-- 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 -->