<?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 content='LOA1_SwimmingFlutterKickAnimation.x3d' name='title'/>
    <meta content='Humanoid animation prototype reusable by any Humanoid.' name='description'/>
    <meta content='Etsuko Lippi' name='creator'/>
    <meta content='13 December 2001' name='created'/>
    <meta content='16 March 2026' name='modified'/>
    <meta content='not yet tested, need to compare with NancyDivingExample interpolators' name='warning'/>
    <meta content='http://www.HAnim.org' name='reference'/>
    <meta content='http://HAnim.org/Models' name='reference'/>
    <meta content='http://HAnim.org/Nodes' name='reference'/>
    <meta content='Swimming flutter kick Animation HAnim 2001' name='subject'/>
    <meta content='https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/LOA1_SwimmingFlutterKickAnimation.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='LOA1_SwimmingFlutterKickAnimation.x3d'/>
    <Viewpoint description='LOA1_SwimmingFlutterKickAnimation.x3d' position='0 0 15'/>
    <ProtoDeclare name='LOA1_DivingAnimation'>
      <ProtoInterface>
        <field accessType='inputOutput' name='cycleInterval' type='SFTime' value='7'/>
        <field accessType='inputOutput' name='enabled' type='SFBool' value='true'/>
        <field accessType='inputOutput' name='loop' type='SFBool' value='true'/>
        <field accessType='inputOutput' name='startTime' type='SFTime' value='0'/>
        <field accessType='inputOutput' name='stopTime' type='SFTime' value='-1'/>
        <field accessType='outputOnly' name='fraction_changed' type='SFFloat'/>
        <field accessType='outputOnly' name='isActive' type='SFBool'/>
        <field accessType='outputOnly' name='HumanoidRoot_translation_changed' type='SFVec3f'/>
        <field accessType='outputOnly' name='HumanoidRoot_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='lower_body_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_hip_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_knee_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_ankle_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_midtarsal_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_hip_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_knee_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_ankle_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_midtarsal_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='vl5_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='skullbase_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_shoulder_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_elbow_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_wrist_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_shoulder_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_elbow_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_wrist_rotation_changed' type='SFRotation'/>
      </ProtoInterface>
      <ProtoBody>
        <Group>
          <TimeSensor DEF='TIMER' loop='true'>
            <IS>
              <connect nodeField='cycleInterval' protoField='cycleInterval'/>
              <connect nodeField='enabled' protoField='enabled'/>
              <connect nodeField='loop' protoField='loop'/>
              <connect nodeField='startTime' protoField='startTime'/>
              <connect nodeField='stopTime' protoField='stopTime'/>
              <connect nodeField='fraction_changed' protoField='fraction_changed'/>
              <connect nodeField='isActive' protoField='isActive'/>
            </IS>
          </TimeSensor>
          <PositionInterpolator DEF='HUMANOIDROOT_POSITION_ANIMATOR' key='0 0.0417 0.125 0.1667 0.2083 0.25 0.2917 0.375 0.4583 0.5 0.5417 0.5833 0.625 0.7083 0.75 0.7917 0.875 0.9167 1' keyValue='0 -0.0093 0 0 -0.0039 0 0 -0.0088 0 0 -0.0149 0 0 -0.0264 0 0 -0.0393 0 0 -0.0502 0 0 -0.0747 0 0 -0.0273 0 0 -0.0161 0 0 -0.0113 0 0 -0.0058 0 0 -0.002 0 0 -0.0026 0 0 -0.0143 0 0 -0.038 0 0 -0.0565 0 0 -0.045 0 0 -0.0093 0'>
            <IS>
              <connect nodeField='value_changed' protoField='HumanoidRoot_translation_changed'/>
            </IS>
          </PositionInterpolator>
          <OrientationInterpolator DEF='HUMANOIDROOT_ANIMATOR' key='0 1' keyValue='0 0 1 0 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='HumanoidRoot_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <!-- no SACROILIAC_ANIMATOR -->
          <OrientationInterpolator DEF='L_HIP_ANIMATOR' key='0 0.25 0.375 0.6667 0.7917 0.9167 1' keyValue='-0.873 0.0609 0.484 0.2865 0.9963 -0.0106 0.0848 0.2488 0.9965 0.0159 -0.0822 0.3836 -1 0 0 0.5518 -0.9964 0.0223 0.0817 0.5351 -0.9809 0.0491 0.1881 0.5204 -0.873 0.0609 0.484 0.2865'>
            <IS>
              <connect nodeField='value_changed' protoField='l_hip_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_KNEE_ANIMATOR' key='0 0.2083 0.375 0.5 0.6667 0.7917 0.9167 1' keyValue='1 0 0 0.3226 1 0 0 0.1556 1 0 0 0.0868 1 0 0 0.8751 1 0 0 1.131 1 0 0 0.0996 1 0 0 0.3942 1 0 0 0.3226'>
            <IS>
              <connect nodeField='value_changed' protoField='l_knee_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_ANKLE_ANIMATOR' key='0 0.125 0.2083 0.375 0.4583 0.5 0.6667 0.75 0.7917 0.9167 1' keyValue='1 0 0 0.6001 1 0 0 0.6509 1 0 0 0.6001 1 0 0 0.6001 1 0 0 0.6509 1 0 0 0.6001 1 0 0 0.6001 1 0 0 0.6509 1 0 0 0.6001 1 0 0 0.6509 1 0 0 0.6001'>
            <IS>
              <connect nodeField='value_changed' protoField='l_ankle_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <!-- no L_MIDTARSAL_ANIMATOR -->
          <OrientationInterpolator DEF='R_HIP_ANIMATOR' key='0 0.125 0.2083 0.2917 0.5 0.7917 0.9167 1' keyValue='-0.5831 0.0351 0.8116 0.1481 -0.995 0.023 0.0967 0.4683 -1 0.0019 0.008 0.4732 -0.998 -0.0158 -0.061 0.5079 -0.9131 -0.0624 -0.403 0.3361 1 0 0 0.2571 0.9891 -0.0281 0.1444 0.3879 -0.5831 0.0351 0.8116 0.1481'>
            <IS>
              <connect nodeField='value_changed' protoField='r_hip_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_KNEE_ANIMATOR' key='0 0.125 0.2083 0.375 0.5 0.6667 0.9167 1' keyValue='1 0 0 0.8573 1 0 0 0.5351 1 0 0 0.1756 1 0 0 0.1194 1 0 0 0.3153 1 0 0 0.0935 1 0 0 0.0856 1 0 0 0.8573'>
            <IS>
              <connect nodeField='value_changed' protoField='r_knee_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_ANKLE_ANIMATOR' key='0 0.125 0.2083 0.375 0.4583 0.5 0.6667 0.75 0.7917 0.9167 1' keyValue='1 0 0 0.8001 1 0 0 0.8509 1 0 0 0.8001 1 0 0 0.8001 1 0 0 0.8509 1 0 0 0.8001 1 0 0 0.8001 1 0 0 0.8001 1 0 0 0.8001 1 0 0 0.8509 1 0 0 0.86'>
            <IS>
              <connect nodeField='value_changed' protoField='r_ankle_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <!-- no L_MIDTARSAL_ANIMATOR -->
          <OrientationInterpolator DEF='VL5_ANIMATOR' key='0 0.2083 0.375 0.75 0.8333 1' keyValue='0 1 0 0.0826 -0.0197 -0.5974 0.8017 0.0823 0.0093 -0.9648 0.2627 0.1734 -0.0124 0.9549 -0.2968 0.0873 -0.0081 0.9691 -0.2463 0.158 0 1 0 0.0826'>
            <IS>
              <connect nodeField='value_changed' protoField='vl5_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='SKULLBASE_ANIMATOR' key='0 0.28 0.3 0.32 0.4 0.45 0.6 0.65 0.7 0.75 0.85 0.9 0.95 1' keyValue='-1 0 0 1 -1 0 0 1 -1 0 0 0.999 -1 0 0 0.99 -1 0 0 0.99 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 0.9 -1 0 0 1'>
            <IS>
              <connect nodeField='value_changed' protoField='skullbase_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_SHOULDER_ANIMATOR' key='0 0.25 0.375 0.6667 0.7917 0.9167 1' keyValue='0 0 1 0.1 0 0 1 0.2 0 0 1 0.2 0.86 0.25 0.42 0.5 0.86 0.25 0.42 0.8 0.86 0.25 0.42 0.4 0.86 0.25 0.42 0.2'>
            <IS>
              <connect nodeField='value_changed' protoField='l_shoulder_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_ELBOW_ANIMATOR' key='0 0.28 0.32 0.64 0.76 1' keyValue='0 0 1 0 -1 0 0 0.1229 -1 0 0 0.1229 -1 0 0 0.5976 -1 0 0 0.3917 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='l_elbow_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_WRIST_ANIMATOR' key='0 0.32 0.64 0.88 1' keyValue='0 0 1 0 0.067 0.98 -0.128 4.15 0.067 0.98 -0.128 4.15 0.067 0.98 -0.128 4.15 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='l_wrist_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_SHOULDER_ANIMATOR' key='0 0.45 0.64 0.76 0.88 1' keyValue='0 0 1 0 0.9992 0.0204 0.0356 7.2 0.9989 -0.0462 0.0052 4.079 -0.8687 -0.2525 -0.4261 1.501 -0.941 -0.2893 -0.1754 0.4788 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='r_shoulder_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_ELBOW_ANIMATOR' key='0 0.28 0.32 0.64 0.76 1' keyValue='0 0 1 0 -1 0 0 0.0415 -1 0 0 0.0415 -1 0 0 0.5855 -1 0 0 0.5852 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='r_elbow_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_WRIST_ANIMATOR' key='0 0.28 0.32 0.64 0.76 1' keyValue='0 0 1 0 -0.0585 0.9839 -0.1688 1.8596 -0.0585 0.9839 -0.1688 1.8596 -0.0022 0.998 -0.063 1.4607 0 1 0 0.4973 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='r_wrist_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
        </Group>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='HUMANOIDROOT_POSITION_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='HUMANOIDROOT_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='SKULLBASE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='VL5_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_HIP_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_KNEE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_ANKLE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_HIP_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_KNEE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_ANKLE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_SHOULDER_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_ELBOW_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_WRIST_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_SHOULDER_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_ELBOW_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_WRIST_ANIMATOR'/>
      </ProtoBody>
    </ProtoDeclare>
    <Viewpoint description='LOA1_SwimmingFlutterKickAnimation scene' position='0 0 12'/>
    <Anchor description='Nancy Diving' parameter='"target=_blank"' url='"NancyDivingProtoInstances.x3d" "https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/NancyDivingProtoInstances.x3d" "NancyDivingProtoInstances.wrl" "https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/NancyDivingProtoInstances.wrl"'>
      <Shape>
        <Text string='"LOA1_SwimmingFlutterKickAnimation.x3d" "defines a prototype" "for animating a humanoid." "" "Click text to see example."'>
          <FontStyle justify='"MIDDLE" "MIDDLE"' size='0.8'/>
        </Text>
        <Appearance>
          <Material diffuseColor='1 1 0.2'/>
        </Appearance>
      </Shape>
    </Anchor>
  </Scene>
</X3D>