<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Immersive' version='3.3 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.3.xsd '>
<head>
<meta name='titlecontent='HalfMoonPrototype.x3d'/>
<meta name='descriptioncontent='Prototype for a group of HalfMoon fish in the Kelp forest.'/>
<meta name='creatorcontent='Ildeniz Duman'/>
<meta name='translatorcontent='Scott Tufts'/>
<meta name='createdcontent='1 June 1998'/>
<meta name='modifiedcontent='22 February 2022'/>
<meta name=' warning content=' Additional PositionInterpolator present but disabled. '/>
<meta name=' warning content=' Wiggle causes texture flashing. TODO: move animation to example file. '/>
<meta name='identifiercontent=' https://X3dGraphics.com/examples/X3dForWebAuthors/KelpForestExhibit/HalfMoonPrototype.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<WorldInfo title='HalfMoonPrototype.x3d'/>
<ProtoDeclare name='HalfMoonappinfo='HalfMoon fish'>
<ProtoInterface>
<field name='skinTextureUrltype='MFStringvalue=' "HalfMoonScalesPatch.jpg"
"https://X3dGraphics.com/examples/X3dForWebAuthors/KelpForestExhibit/HalfMoonScalesPatch.jpg" ' accessType='inputOutput'/>

<field name='fishScaletype='SFVec3fvalue='0.3 0.25 0.25accessType='inputOutput'/>
<field name='fishColortype='SFColorvalue='0.7 0.7 0.7accessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<!-- ROUTE information for MyHalfMoon node:  [from Orbit.value_changed to set_rotation ] [from HalfMoonPath.value_changed to set_translation ] -->
<Transform DEF='MyHalfMoon'>
<IS>
<connect nodeField='scaleprotoField='fishScale'/>
</IS>
<Shape>
<Appearance>
<Material DEF='FishColor'>
<IS>
<connect nodeField='diffuseColorprotoField='fishColor'/>
</IS>
</Material>
<ImageTexture DEF='FishTexture'>
<IS>
<connect nodeField='urlprotoField='skinTextureUrl'/>
</IS>
</ImageTexture>
</Appearance>
<!-- ROUTE information for Fish_Shape node:  [from Waggler.value_changed to set_spine ] -->
<Extrusion DEF='Fish_ShapecreaseAngle='1.57crossSection='-0.1 1.0 0.1 1 0.5 0.5 0.5 -0.5 0.1 -1 -0.1 -1 -0.5 -0.5 -0.5 0.5 -0.1 1scale='0.03 0.03 0.3 0.3 0.2 0.4 0.1 0.5 0.1 0.15 0.03 0.4spine='0 1.5 0 0 1.2 0 0 0.5 0 0 0.3 0 0 0 0 0 -0.3 0'/>
</Shape>
<Shape>
<Appearance DEF='Fin_Skin'>
<Material diffuseColor='0.5 0.5 0.5transparency='0.2'/>
</Appearance>
</Shape>
<Transform translation='1.37 0.1 0.1'>
<Shape DEF='Eye'>
<Appearance>
<Material diffuseColor='0.5 0.5 0.5shininess='1specularColor='0.3 0.3 0.3'/>
</Appearance>
<Sphere radius='0.04'/>
</Shape>
</Transform>
<Transform translation='1.37 0.1 -0.1'>
<Shape USE='Eye'/>
</Transform>
<Transform scale='2.6 1 0.7translation='1.46 0 0'>
<!-- Mouth -->
<Shape USE='Eye'/>
</Transform>
<!-- ROUTE information for Left_Pectoral node:  [from Left_Pectoral_Rotation.value_changed to set_rotation ] -->
<Transform DEF='Left_Pectoraltranslation='1.1 -0.15 -0.1'>
<Shape>
<Appearance USE='Fin_Skin'/>
<IndexedFaceSet solid='falsecoordIndex='0 1 2 -1'>
<Coordinate point='0 0 0 0.2 0 0 -0.2 0 -0.2'/>
</IndexedFaceSet>
</Shape>
</Transform>
<!-- ROUTE information for Right_Pectoral node:  [from Right_Pectoral_Rotation.value_changed to set_rotation ] -->
<Transform DEF='Right_Pectoraltranslation='1.1 -0.15 0.1'>
<Shape>
<Appearance USE='Fin_Skin'/>
<IndexedFaceSet solid='falsecoordIndex='0 1 2 -1'>
<Coordinate point='0 0 0 0.2 0 0 -0.2 0 0.2'/>
</IndexedFaceSet>
</Shape>
</Transform>
<Group DEF='AnimationGroup'>
<!-- ROUTE information for Timer node:  [from fraction_changed to Waggler.set_fraction ] [from fraction_changed to Left_Pectoral_Rotation.set_fraction ] [from fraction_changed to Right_Pectoral_Rotation.set_fraction ] -->
<TimeSensor DEF='TimercycleInterval='5loop='true'/>
<!-- ROUTE information for Waggler node:  [from Timer.fraction_changed to set_fraction ] [from value_changed to Fish_Shape.set_spine ] -->
<CoordinateInterpolator DEF='Wagglerkey='0.0 0.15 0.28 0.4 0.55 0.7 0.85 1keyValue='1.5 0 0 1.2 0 0 0.5 0 0 0.3 0 0 0 0 0 -0.3 0 0 1.5 0 0 1.20 0 0 0.5 0 .1 0.3 0 .2 0 0 0.25 -0.3 0 0.3 1.5 0 0 1.20 0 0 0.5 0 0 0.3 0 0 0 0 0 -0.3 0 0 1.5 0 0 1.2 0 0 0.5 0 -0.1 0.3 0 -0.2 0 0 -0.25 -0.3 0 -0.3 1.5 0 0 1.2 0 0 0.5 0 0 0.3 0 0 0 0 0 -0.3 0 0 1.5 0 0 1.2 0 0 0.5 0 0.1 0.3 0 0.2 0 0 0.25 -0.3 0 0.3 1.5 0 0 1.2 0 0 0.5 0 0 0.3 0 0 0 0 0 -0.3 0 0 1.5 0 0 1.2 0 0 0.5 0 -0.1 0.3 0 -0.2 0 0 -0.25 -0.3 0 -0.3'/>
<!-- ROUTE information for Left_Pectoral_Rotation node:  [from Timer.fraction_changed to set_fraction ] [from value_changed to Left_Pectoral.set_rotation ] -->
<OrientationInterpolator DEF='Left_Pectoral_Rotationkey='0 0.3 0.7 1keyValue='1 0 0 -0.52 1 0 0 0 1 0 0 0 1 0 0 -0.52'/>
<!-- ROUTE information for Right_Pectoral_Rotation node:  [from Timer.fraction_changed to set_fraction ] [from value_changed to Right_Pectoral.set_rotation ] -->
<OrientationInterpolator DEF='Right_Pectoral_Rotationkey='0 0.3 0.7 1keyValue='1 0 0 -0.52 1 0 0 0 1 0 0 0 1 0 0 -0.52'/>
<!-- orbiting time -->
<!-- ROUTE information for OrbitClock node:  [from fraction_changed to Orbit.set_fraction ] [from fraction_changed to HalfMoonPath.set_fraction ] -->
<TimeSensor DEF='OrbitClockcycleInterval='90enabled='falseloop='true'/>
<!-- ROUTE information for Orbit node:  [from OrbitClock.fraction_changed to set_fraction ] [from value_changed to MyHalfMoon.set_rotation ] -->
<OrientationInterpolator DEF='Orbitkey='0.0 0.25 0.5 0.750 1keyValue='0 1 0 6.28 0 1 0 1.57 0 1 0 3.14 0 1 0 4.71 0 1 0 6.28'/>
<!-- ROUTE information for HalfMoonPath node:  [from OrbitClock.fraction_changed to set_fraction ] [from value_changed to MyHalfMoon.set_translation ] -->
<PositionInterpolator DEF='HalfMoonPathkey='0 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1keyValue='15 2 0 15 0 -10 0 -1 -10 -15 0 -10 -15 2 0 -15 0 10 0 -2 10 15 0 10 15 2 0'/>
<ROUTE fromNode='TimerfromField='fraction_changedtoNode='WagglertoField='set_fraction'/>
<ROUTE fromNode='WagglerfromField='value_changedtoNode='Fish_ShapetoField='set_spine'/>
<ROUTE fromNode='TimerfromField='fraction_changedtoNode='Left_Pectoral_RotationtoField='set_fraction'/>
<ROUTE fromNode='Left_Pectoral_RotationfromField='value_changedtoNode='Left_PectoraltoField='set_rotation'/>
<ROUTE fromNode='TimerfromField='fraction_changedtoNode='Right_Pectoral_RotationtoField='set_fraction'/>
<ROUTE fromNode='Right_Pectoral_RotationfromField='value_changedtoNode='Right_PectoraltoField='set_rotation'/>
<ROUTE fromNode='OrbitClockfromField='fraction_changedtoNode='OrbittoField='set_fraction'/>
<ROUTE fromNode='OrbitClockfromField='fraction_changedtoNode='HalfMoonPathtoField='set_fraction'/>
<ROUTE fromNode='OrbitfromField='value_changedtoNode='MyHalfMoontoField='set_rotation'/>
<ROUTE fromNode='HalfMoonPathfromField='value_changedtoNode='MyHalfMoontoField='set_translation'/>
</Group>
</Transform>
</ProtoBody>
</ProtoDeclare>
<!-- ==================== -->
<ProtoInstance name='HalfMoon'/>
</Scene>
</X3D>
<!--

Index for ProtoDeclare definition : HalfMoon

Index for DEF nodes : AnimationGroup, Eye, Fin_Skin, Fish_Shape, FishColor, FishTexture, HalfMoonPath, Left_Pectoral, Left_Pectoral_Rotation, MyHalfMoon, Orbit, OrbitClock, Right_Pectoral, Right_Pectoral_Rotation, Timer, Waggler
-->

<!-- 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)
    <Prototype name='ProtoName'> <field name='fieldName'/> </Prototype> -->

<!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources and X3D Scene Authoring Hints. -->