<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
<X3D profile='Immersive' version='3.1' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.1.xsd'>
  <head>
    <meta content='HudPrototype.x3d' name='title'/>
    <meta content='Demonstrates use of a ProximitySensor in building a HUD' name='description'/>
    <meta content='A simple heads-up display (HUD) Prototype manages the display of a HUD and maintains its position on the screen. Changes to fieldOfView (in Viewpoint node) will change screen position Fields: hudSize Size of HUD (initializeOnly - SFVec3f) default="1 1 .01" hudColor Color of HUD (inputOutput - SFColor) default="1 1 1" screenOffset Offset of HUD. This field positions the HUD on the display screen (inputOutput - SFVec3f) default="0 0 0" hudGeometry Geometry to be placed on the HUD. Origin is center of HUD. (inputOutput - MFNode) default = [] position_changed Current viewer location (outputOnly - SFVec3f) orientation_changed Current viewer orientation (outputOnly - SFRotation)' name='documentation'/>
    <meta content='Leonard Daly and Don Brutzman' name='creator'/>
    <meta content='15 July 2006' name='created'/>
    <meta content='15 March 2008' name='modified'/>
    <meta content='problem with Text' name='warning'/>
    <meta content='http://X3dGraphics.com' name='reference'/>
    <meta content='http://www.web3d.org/x3d/content/examples/X3dResources.html' name='reference'/>
    <meta content='Copyright 2006, Daly Realism and Don Brutzman' name='rights'/>
    <meta content='X3D book, X3D graphics, X3D-Edit, http://www.x3dGraphics.com' name='subject'/>
    <meta content='http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14-Prototypes/HudPrototype.x3d' name='identifier'/>
    <meta content='X3D-Edit, https://savage.nps.edu/X3D-Edit' name='generator'/>
  </head>
  <Scene>
    <!-- Simple Heads-Up Display (HUD) Prototype\n \n Manages the display of a HUD and maintains its position on the screen.\n Changes to fieldOfView (in Viewpoint node) will change screen position\n \n Fields:\n hudSize Size of HUD (initializeOnly - SFVec3f) default="1 1 .01"\n hudColor Color of HUD (inputOutput - SFColor) default="1 1 1"\n screenOffset Offset of HUD. This field positions the HUD on the display screen (inputOutput - SFVec3f) default="0 0 0"\n hudGeometry Geometry to be placed on the HUD. Origin is center of HUD. (inputOutput - MFNode) default = []\n position_changed Current viewer location (outputOnly - SFVec3f)\n orientation_changed Current viewer orientation (outputOnly - SFRotation)\n \n \n -->
    <ProtoDeclare name='HUD'>
      <ProtoInterface>
        <field accessType='initializeOnly' name='hudSize' type='SFVec3f' value='1 1 .01'/>
        <field accessType='inputOutput' name='hudColor' type='SFColor' value='1 1 1'/>
        <field accessType='inputOutput' name='screenOffset' type='SFVec3f' value='0 0 0'/>
        <field accessType='inputOutput' name='hudGeometry' type='MFNode'>
          <!-- initialization nodes (if any) go here -->
        </field>
        <field accessType='outputOnly' name='position_changed' type='SFVec3f'/>
        <field accessType='outputOnly' name='orientation_changed' type='SFRotation'/>
      </ProtoInterface>
      <ProtoBody>
        <Group>
          <Transform DEF='HudContainer'>
            <Transform>
              <IS>
                <connect nodeField='translation' protoField='screenOffset'/>
              </IS>
              <Group>
                <IS>
                  <connect nodeField='children' protoField='hudGeometry'/>
                </IS>
              </Group>
              <Transform translation='0 0 -0.1'>
                <Shape>
                  <Appearance>
                    <Material>
                      <IS>
                        <connect nodeField='diffuseColor' protoField='hudColor'/>
                      </IS>
                    </Material>
                  </Appearance>
                  <Box size='1.5 .4 .01'>
                    <IS>
                      <connect nodeField='size' protoField='hudSize'/>
                    </IS>
                  </Box>
                </Shape>
              </Transform>
            </Transform>
          </Transform>
          <ProximitySensor DEF='HereIAm' enabled='true' size='1000 1000 1000'>
            <IS>
              <connect nodeField='position_changed' protoField='position_changed'/>
              <connect nodeField='orientation_changed' protoField='orientation_changed'/>
            </IS>
          </ProximitySensor>
          <ROUTE fromField='orientation_changed' fromNode='HereIAm' toField='rotation' toNode='HudContainer'/>
          <ROUTE fromField='position_changed' fromNode='HereIAm' toField='translation' toNode='HudContainer'/>
        </Group>
      </ProtoBody>
    </ProtoDeclare>
    <Viewpoint description='Heads-up display (HUD)'/>
    <!-- ProtoDeclare is the "cookie cutter" template, ProtoInstance creates an actual occurrence -->
    <ProtoInstance DEF='Hud' name='HUD'>
      <fieldValue name='hudSize' value='3.5 1 .1'/>
      <fieldValue name='hudColor' value='1 1 0'/>
      <fieldValue name='screenOffset' value='-.8 1 -6'/>
      <fieldValue name='hudGeometry'>
        <Shape>
          <Text string='HUD test'>
            <FontStyle justify='"MIDDLE" "MIDDLE"'/>
          </Text>
          <Appearance>
            <Material diffuseColor='0.078431 0 1'/>
          </Appearance>
        </Shape>
      </fieldValue>
    </ProtoInstance>
    <Shape>
      <Text string='"Center" "of world"'>
        <FontStyle justify='"MIDDLE" "MIDDLE"'/>
      </Text>
      <Appearance>
        <Material diffuseColor='0.078431 0 1'/>
      </Appearance>
    </Shape>
  </Scene>
</X3D>