#VRML V2.0 utf8
# X3D-to-VRML-97 XSL translation autogenerated by X3dToVrml97.xslt
# http://www.web3d.org/x3d/content/X3dToVrml97.xslt
# Generated using XSLT processor: SAXON 8.7 from Saxonica

# [X3D] VRML V3.0 utf8
# PROFILE Immersive
# [X3D] version=3.0
# [X3D] noNamespaceSchemaLocation=http://www.web3d.org/specifications/x3d-3.0.xsd
# [head]

# META "title" "EventUtilityPrototypes.x3d"
# META "description" "Event utility node prototypes for boolean filtering and other event utility nodes."
# META "authors" "Nick Polys, Tony Parisi, Don Brutzman, Justin Couch"
# META "created" "25 September 2002"
# META "modified" "28 April 2005"
# META "warning" "Under development, IntegerTrigger example needed."
# META "reference" "EventUtilityExamples.x3d"
# META "subject" "BooleanFilter BooleanToggle BooleanTrigger IntegerTrigger TimeTrigger"
# META "identifier" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d"
# META "generator" "X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit"
# META "license" "../license.html"
# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
# 
# <html>
# <head>
# 			<title>NPS MOVES Software License</title>
# 			<meta name="description" content="NPS MOVES Software License" />
# 			<meta name="author" content="Donald P. Brutzman" />
# 			<meta name="created" content="4 March 2005" />
# 			<meta name="revised" content="17 December 2006" />
# 			<meta name="reference" content="http://www.oreilly.com/catalog/osfreesoft" />
# 			<meta name="reference" content="http://opensource.org/licenses/bsd-license.php" />
# 			<meta name="reference" content="http://xchat.movesinstitute.org/bugzilla/show_bug.cgi?id=32" />
# 			<link rel="icon" href="http://www.web3D.org/x3d/content/examples/images/X3DtextIcon16.png" title="X3D" type="image/png"/>
# </head>
# <body>
# <p>Copyright (c) 1995-2008 held by the author(s).  All rights reserved.</p>
# 
# <p>Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:</p>
# 
# <ul>
# 		<li>
#       Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     </li>  
# 		<li>	
# 			Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer
#       in the documentation and/or other materials provided with the
#       distribution.
# 		</li>	
# 		<li>	
#       Neither the names of the 
# 			<a href="http://www.nps.edu">Naval Postgraduate School (NPS)</a>
#       <a href="http://www.MovesInstitute.org">Modeling Virtual Environments and Simulation (MOVES) Institute</a>
#       nor the names of its contributors may be used to endorse or
#       promote products derived from this software without specific
#       prior written permission.
#     </li>
# </ul>			
# 
# <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.</p>
# 
# </body>
# </html>
 
# [Scene] ========== ========== ==========

# ========================================
PROTO BooleanToggle [
  # [appinfo] BooleanToggle maintains state and negates output when a true input is provided.

  eventIn      SFBool	set_boolean    # [appinfo] If set_boolean input is true toggle state.

  # warning: toggle depends on exposedField functionality in Script node, not compatible with VRML 97. implemented as inputOnly/initializeOnly/outputOnly triplet.
  eventIn      SFBool	set_toggle    # [appinfo] Reset persistent state value.

   ### Error:  ProtoInterface <field name='toggle'/> is unreferenced in ProtoBody with no corresponding IS/connect/@protoField
field        SFBool	toggle FALSE    # [appinfo] Persistent state value that gets toggled or reset.

  eventOut     SFBool	toggle_changed    # [appinfo] Output toggled persistent state value.

] {
  Group {
    children [
        DEF BooleanToggleScript Script {
          eventIn      SFBool	set_boolean IS set_boolean
          eventIn      SFBool	set_toggle IS set_toggle
          field        SFBool	toggle FALSE
          eventOut     SFBool	toggle_changed IS toggle_changed
          field        SFBool	traceEnabled FALSE
                                              
	url [ "javascript:
// ### X3D Browser.print() not supported by all VRML97 viewers, instead simply use print()


function initialize ()
{
	if (traceEnabled) print ('[BooleanToggle] toggle=' + toggle);

}
function set_boolean (value, timestamp)
{
	if (value == true)  // only toggle on true input
	{
		if (toggle == true) toggle = false;
		else                toggle = true;
	}
	toggle_changed = toggle;
//	print ('[BooleanToggle] traceEnabled=' + traceEnabled);
	if (traceEnabled) print ('[BooleanToggle] set_boolean=' + value + ', toggle=' + toggle);
}
function set_toggle (value, timestamp)
{
	toggle = value;
	toggle_changed = toggle;
	if (traceEnabled) print ('[BooleanToggle] set_toggle=' + set_toggle);
}
          
" ]
        }
    ]
  }
}
