﻿<?xml version="1.0" encoding="UTF-8"?>
<X3D profile="Immersive"  version="3.1">
  <!-- This is Video Clip template. It defines the shape into which the video texture is mapped as well as
    start/end logic. -->
  <Transform>
    <MetadataSet name='Template'>
      <MetadataString containerField='value' name='TemplateID' value='"DefaultVideoClipTemplate"'/>
      <MetadataInteger containerField='value' name='TemplateKind' value='1'/>
      <MetadataString containerField='value' name='TimeDependentNode' value='"MovieTexture"'/>
    </MetadataSet>

    <Transform>
      <!-- Properties Set -->
      <MetadataSet DEF='ExtentSockets'>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <!--Change property type to IN-->
          <MetadataString containerField='value' name='socketName' value='"translate"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"translation"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"scale"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"scale"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"rotate"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"rotation"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"centerOfRotation"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"center"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"rotate"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"TransformFromNextExtent"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"rotation"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"next"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"centerOfRotation"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"TransformFromNextExtent"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"center"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"next"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"transparency"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"ExtentMaterial"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"transparency"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"appearanceShader"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"AppearanceNode"'/>
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3dShaderNode"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"textureTransform"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"AppearanceNode"'/>
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3dTextureTransform"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"grid"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"VideoShape"'/>
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3DGeometryNode"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"effectShader"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"ExtentEffectMotionTexture"'/>
          <!-- MotionTexture needs to know when MovieTexture or ShaderSet are dirty so it can allocate resource only when needed.-->
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3DShaderNode"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"volume"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"SoundIntensityInterpolator"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"set_fraction"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

      </MetadataSet>
    </Transform>

    <Transform DEF='BaseExtentTransform'>
      <MetadataSet name='BPSet'>
        <MetadataString containerField='value' name='rotateStepNinety' reference='Custom'/>
      </MetadataSet>
      <Transform DEF='TransformFromNextExtent'>
        <Transform DEF='InnerExtentTransform'>
          <Switch whichChoice="0" DEF="ExtentShapeSwitch">

            <Shape>
              <Appearance DEF='AppearanceNode'>
                <Material DEF='ExtentMaterial' transparency='0' diffuseColor='0 0 0' shininess='0' />
                <MotionTexture DEF='ExtentEffectMotionTexture'>
                  <!-- MotionTexture needs to know when MovieTexture or ShaderSet are dirty so it can allocate resource only when needed.-->
                  <MovieTexture DEF='MovieTexture' containerField='texture' repeatS='false' repeatT='false' stopTime='-1' loop='false' url='""' />
                  <ShaderSet DEF='ExtentEffectShaderSet'/>
                </MotionTexture>
                <TextureTransform DEF='BaseTextureTransform' center='-0.5 -0.5' translation='0 0' rotation='0' scale='1 1' containerField='textureTransform'/>
              </Appearance>
              <IndexedFaceSet containerField='geometry' creaseAngle='0.524' coordIndex='0 1 2 -1 0 2 3 -1' texCoordIndex='0 1 2 -1 0 2 3 -1'>
                <Coordinate containerField='coord' point='-4 3 0 -4 -3 0 4 -3 0 4 3 0' />
                <TextureCoordinate containerField='texCoord' point='0 1 0 0 1 0 1 1' />
              </IndexedFaceSet>
            </Shape>

            <!-- A DEF is needed on the shape because the code needs to reference it
                 in order to inject a geometry node (not required on the shape above) -->
            <Shape DEF='VideoShape'>
              <Appearance USE='AppearanceNode'/>
            </Shape>

          </Switch>
        </Transform>
      </Transform>
      <Transform>
        <MetadataSet name='placeholder'>
          <MetadataString containerField='value' name='PlaceholderName' value='"Effects"'/>
        </MetadataSet>
      </Transform>
    </Transform>

    <Sound DEF='VideoSound'>
      <MovieTexture USE='MovieTexture' containerField='source' />
    </Sound>
    <ScalarInterpolator DEF='SoundIntensityInterpolator' key='-96 0' keyValue='-96 0' set_fraction='0'>
      <MetadataSet name='BPSet'>
        <MetadataString containerField='value' name='Volume' reference='Custom'/>
        <MetadataString containerField='value' name='Mute' reference='Custom'/>
      </MetadataSet>
    </ScalarInterpolator>
    <ROUTE fromNode='SoundIntensityInterpolator' fromField='value_changed' toNode='VideoSound' toField='set_intensity'/>

  </Transform>
</X3D>
