<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://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='https://www.web3d.org/specifications/x3d-3.0.xsd'>
  <head>
    <meta content='RearHatch.x3d' name='title'/>
    <meta content='Osprey MV-22 rear hatch.' name='description'/>
    <meta content='Major William C. James USMC' name='creator'/>
    <meta content='23 September 2001' name='created'/>
    <meta content='7 December 2024' name='modified'/>
    <meta content='Amended from VRML Sourcebook Figure 8.4 (used as base)' name='reference'/>
    <meta content='https://www.navy.mil/Resources/Fact-Files/Display-FactFiles/Article/2417719/v-22b-osprey-tilt-rotor-aircraft' name='reference'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Savage/AircraftFixedWing/Mv22OspreyUnitedStates/RearHatch.x3d' name='identifier'/>
    <meta content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit' name='generator'/>
    <meta content='../../license.html' name='license'/>
  </head>
  <Scene>
    <WorldInfo title='RearHatch.x3d'/>
    <Background skyColor='.2 .2 .7'/>
    <Script DEF='ToggleScript'>
      <field accessType='inputOnly' name='toggle' type='SFBool'/>
      <field accessType='initializeOnly' name='state' type='SFBool' value='true'/>
      <field accessType='outputOnly' name='stateTurnedTrue' type='SFBool'/>
      <field accessType='outputOnly' name='stateTurnedFalse' type='SFBool'/>
      <![CDATA[
ecmascript:

// setting the value of an eventOut variable also sends it as an event
// you can view the output of print statements in the VRML Console

function toggle ( value, ts ) {
  // only toggle on click (isActive true) not release (isActive false)
  if ( value == false ) return;
  if ( state == true )
  {
	state  = false;
	stateTurnedFalse = true;
	Browser.println ('ToggleScript.state = ' + state + ', stateTurnedFalse = ' + true);
  }
  else
  {
	state  = true;
	stateTurnedTrue = true;
	Browser.println ('ToggleScript.state = ' + state + ', stateTurnedTrue = ' + true);
  }
}
]]>
    </Script>
    <Script DEF='TimeFilter'>
      <field accessType='inputOnly' name='setStart' type='SFBool'/>
      <field accessType='inputOnly' name='setStop' type='SFBool'/>
      <field accessType='outputOnly' name='startEventTime' type='SFTime'/>
      <field accessType='outputOnly' name='stopEventTime' type='SFTime'/>
      <![CDATA[
ecmascript:

// setting the value of an eventOut variable also sends it as an event

function setStart ( value, timeStamp ) {
	startEventTime = timeStamp;
	Browser.println ('TimeFilter.setStart (' + value + '), startEventTime = ' + timeStamp);
	Browser.println (' ');
}
function setStop  ( value, timeStamp ) {
	stopEventTime  = timeStamp;
	Browser.println ('TimeFilter.setStop  (' + value + '),  stopEventTime = ' + timeStamp);
	Browser.println (' ');
}
]]>
    </Script>
    <!-- Rear Hatch -->
    <Group DEF='Rear_Hatch'>
      <Transform DEF='RearHatchTransform' rotation='0 0 -1 1.57' translation='0 -4.6 -6.2'>
        <Group DEF='RearHatch'>
          <Transform DEF='RearHatchRotationSupport' rotation='0 1 0 .45'>
            <Shape DEF='RotatingBar'>
              <Cylinder height='3.9' radius='.2'/>
              <Appearance>
                <Material diffuseColor='.5 .5 .5' shininess='.5'/>
              </Appearance>
            </Shape>
            <Transform DEF='Hatch'>
              <Transform rotation='0 0 -1 1.57' translation='0 0 -2.5'>
                <Shape>
                  <Box size='3.85 .2 5'/>
                  <Appearance>
                    <Material diffuseColor='.5 .5 .5' shininess='.5'/>
                  </Appearance>
                </Shape>
              </Transform>
            </Transform>
          </Transform>
        </Group>
      </Transform>
      <TouchSensor DEF='RearHatchSensor' description='touch to open'/>
      <TimeSensor DEF='CLOCK1' cycleInterval='4'/>
      <OrientationInterpolator DEF='RearHatchInterpolator' key='0.0 1.0' keyValue='0.0 1.0 0.0 0.45 0.0 1.0 0.0 -0.2'/>
      <!-- Up_Ramp -->
      <TimeSensor DEF='CLOCK2' cycleInterval='4'/>
      <OrientationInterpolator DEF='RearHatchInterpolator1' key='0.0 1.0' keyValue='0.0 1.0 0.0 -.2 0.0 1.0 0.0 0.45'/>
    </Group>
    <!-- Down_Ramp_Code -->
    <ROUTE fromField='touchTime' fromNode='RearHatchSensor' toField='set_startTime' toNode='CLOCK1'/>
    <ROUTE fromField='fraction_changed' fromNode='CLOCK1' toField='set_fraction' toNode='RearHatchInterpolator'/>
    <ROUTE fromField='value_changed' fromNode='RearHatchInterpolator' toField='set_rotation' toNode='RearHatchRotationSupport'/>
    <!-- Toggle_Code -->
    <ROUTE fromField='isActive' fromNode='RearHatchSensor' toField='toggle' toNode='ToggleScript'/>
    <ROUTE fromField='value_changed' fromNode='RearHatchInterpolator1' toField='set_rotation' toNode='RearHatchRotationSupport'/>
    <!-- Up_Ramp_Code -->
    <ROUTE fromField='fraction_changed' fromNode='CLOCK2' toField='set_fraction' toNode='RearHatchInterpolator1'/>
    <ROUTE fromField='stateTurnedTrue' fromNode='ToggleScript' toField='setStart' toNode='TimeFilter'/>
    <ROUTE fromField='stateTurnedTrue' fromNode='ToggleScript' toField='setStop' toNode='TimeFilter'/>
    <ROUTE fromField='startEventTime' fromNode='TimeFilter' toField='set_startTime' toNode='CLOCK1'/>
    <ROUTE fromField='startEventTime' fromNode='TimeFilter' toField='set_startTime' toNode='CLOCK2'/>
  </Scene>
</X3D>