#VRML V2.0 utf8 # # #


#
# event types :
#
# mousedown = 1
# mousemove = 1 << 1
# mouseout  = 1 << 2
# mouseover = 1 << 3
# mouseup   = 1 << 4
# keydown   = 1 << 5
# keyup     = 1 << 6
# keypress  = 1 << 7
# click     = 1 << 8
# dblclick  = 1 << 9
#
#
# mouse button :
#
# 1 = left button
# 2 = right button
# 4 = middle button
#
#
# Event fields :
#
# Event {
#	eventOut SFString	type		# event name
#	eventOut SFBool		cancelBubble	# to parent
#	eventOut SFBool		returnValue	# execute default actions
#
#	eventOut SFVec2f	screen		# relative to origin screen coordinate system
#	eventOut SFVec2f	client		# relative to origin client area
#	eventOut SFVec2f	position	# relative to normalized client area
#
#	eventOut SFBool		altKey		# 0 or 1
#	eventOut SFBool		ctrlKey		# 0 or 1
#	eventOut SFBool		shiftKey	# 0 or 1
# ?	eventOut SFBool		resize		# 0 or 1, resize event
#
#	eventOut SFInt32	keyCode		# key code if key event
#	eventOut SFInt32	button		# 1 (left), 2 (right), 4 (middle)
# }
#
# BC 3D 4.4 remark : Java in Script nodes is not supported.
#

DEF inputHandler Script 
{
	field SFInt32 i 0
	field SFInt32 size 0
	field MFInt32 line []
	field MFInt32 temp []
	field MFInt32 voidText []

	eventIn SFNode onEvent

	eventOut SFInt32 textSize
	eventOut MFInt32 textLine

	url "javascript:
	function onEvent (e, t)
	{
		// Event Examples :

		if (e.type == 'keyup') {
			if (e.keyCode == 8 || e.keyCode == 46) {
				// backspace or delete
				if (size > 0) {
					size = size - 1;
				}
			} else if (e.keyCode == 13) {
				// newline
				for(i=0; i < size; ++i) {
					line[i] = temp[i];
				}
				textSize = size;
				textLine = line;
				line = voidText;
				temp = voidText;
				size = 0;
			} else {
				temp [size] = e.keyCode;
				size = size + 1;
			// print ('keyCode = ' +e.keyCode+ ', shiftKey = ' +e.shiftKey);
			// print ('ctrlKey = ' +e.ctrlKey+ ', altKey = '+e.altKey);
			}
		}

		// mouse move, no button pressed :
		if (e.type == 'mousemove' && e.button == 0) {  
			return; // too many event prints
		}

		// mouse move :
		if (e.type == 'mousemove') {  
			print ('Event type = ' +e.type+ ', button = ' +e.button+ ', time = ' +t);
			print ('mouse position = ' +e.position+ ', keyCode = ' +e.keyCode);
		}


		if (e.type == 'mouseup' && e.button == 2) {
			// handle rbutton menu
			e.returnValue = 0;
		}
	}"
}


DEF startInputHandler Script
{
	field SFNode inputHandler USE inputHandler
	field SFInt32 oldMask 0

	url "javascript:

	function initialize()
	{
		// get current mask :
		m = Browser.eventMask;
		oldMask = m;

		// new mask examples
		// m = m | (1<<4) | 1;	// mouse up & down
		m = m | (1 << 6);	// keyup

		Browser.eventMask = m;
		Browser.addRoute (Browser, 'event_changed', inputHandler, 'onEvent');
	}

	function shutdown()
	{
		Browser.eventMask = oldMask;
		Browser.deleteRoute(Browser, 'event_changed',inputHandler, 'onEvent');
	}"
}


DEF CAM1 Viewpoint {
	position 2  1  15
	description "Camera 1"
}

DEF CAM2 Viewpoint {
	position 2  1  10
	description "Camera 2"
}


EXTERNPROTO BoxTransform [
	exposedField SFRotation rotation
	exposedField SFVec3f translation

	exposedField SFFloat ambientIntensity
	exposedField SFColor diffuseColor
	exposedField SFColor emissiveColor
	exposedField SFFloat shininess
	exposedField SFColor specularColor
	exposedField SFFloat transparency

	exposedField SFVec3f size
] "protos.wrl"


PROTO BoardTransform [
	exposedField MFString string [ "Please", "wait" ]
	exposedField SFRotation rotation 0 0 0 0.0
	exposedField SFVec3f translation 0 0 0
]
{
Transform {
	rotation IS rotation
	translation IS translation
	children [
		Billboard {
		axisOfRotation 0 1 0
		children [
			BoxTransform {
				diffuseColor 0.8 0.8 0.0
				translation 0.0 0.0 -0.2
				size 6  5  0.1
			}

			Shape {
				appearance Appearance {
					material Material {
						diffuseColor 1.0  1.0  1.0
					}
				}
				geometry Text {
					string IS string
					fontStyle FontStyle {
						family "SERIF"
						style "BOLD"
						justify "MIDDLE"
					}
				}
			}
		]
		}
	]
}
}

Transform {
	children [
		DEF board BoardTransform {
		}
	]
}

#
# #