<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:a="Attribute" xmlns:ax="Attributes" xmlns:e="Evaluator" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sge="SgEvaluator" targetNamespace="SgEvaluator" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="Attribute" schemaLocation="../Attribute/Attribute.xsd"/>
	<xs:import namespace="Attributes" schemaLocation="../Attribute/Attributes.xsd"/>
	<xs:import namespace="Evaluator" schemaLocation="../Evaluator/Evaluator.xsd"/>
	<xs:element name="ArcballInspector">
		<xs:annotation>
			<xs:documentation>Inspector used to rotate a Model based on where it is "grabbed" in screen coordinates (e.g., from a mouse click)</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="e:EvaluatorType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="BBoxLocator">
		<xs:annotation>
			<xs:documentation>Evaluator that moves a Camera and modifies is attributes so that the Camera's view frustum is shaped to fit only the given target's boundingBox</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="e:EvaluatorType">
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="bbox" type="ax:BBoxAttrType" minOccurs="0"/>
						<xs:element name="viewport" type="ax:ViewportAttrType" minOccurs="0"/>
						<xs:element name="viewPosition" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="viewTransform" type="ax:Matrix4x4FloatAttrType" minOccurs="0"/>
						<xs:element name="viewVolume" type="ax:ViewVolumeAttrType" minOccurs="0"/>
						<xs:element name="resultPosition" minOccurs="0"/>
						<xs:element name="resultWidth" minOccurs="0"/>
						<xs:element name="resultFarDistance" minOccurs="0"/>
						<xs:element name="resultPivotDistance" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="closeness" type="xs:float" use="optional" default="0.5"/>
					<xs:attribute name="nearDistance" type="xs:float" use="optional" default="0"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="BoneEffector" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Effector that modifes vertices and normals n order to create jointed movement for a Bone</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="FlightSimulator" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Simulator that mimics basic flight</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="IsoShader">
		<xs:annotation>
			<xs:documentation>Evaluator that shades vertices (set vertexColors) by isolating a scalar value and interpolating between points</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="e:EvaluatorType">
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="isoShaderBands" type="a:AttributeVectorType" minOccurs="0"/>
						<xs:element name="values" type="ax:FloatArrayAttrType" minOccurs="0"/>
						<xs:element name="colors" type="ax:ColorsAttrType" minOccurs="0"/>
						<xs:element name="resultColors" type="ax:FloatArrayAttrType" minOccurs="0"/>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="MorphEffector" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Effector that modifies the vertices and normals of a non-indexed Geometry such that it morphs from one form to another form having the same number of vertices</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="MultiTargetObserver" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Evaluator that clamps the heading and/or pitch of one or more ParentableMotionElements such that they are always facing the target</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="PathAligner">
		<xs:annotation>
			<xs:documentation>Evaluator that clamps the heading and/or pitch of a moving ParentableMotionElement to the heading and/or pitch of a motion path (i.e., cancels object-relative heading)</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="e:EvaluatorType">
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="channels" type="a:AttributeVectorType" minOccurs="0"/>
						<xs:element name="preBehaviors" type="a:AttributeVectorType" minOccurs="0"/>
						<xs:element name="postBehaviors" type="a:AttributeVectorType" minOccurs="0"/>
						<xs:element name="resultHeading" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="resultPitch" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="alignHeading" type="xs:boolean" use="optional" default="true"/>
					<xs:attribute name="alignPitch" type="xs:boolean" use="optional" default="true"/>
					<xs:attribute name="time" type="xs:float" use="optional" default="0"/>
					<xs:attribute name="lookAheadTime" type="xs:float" use="optional" default="0"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="SceneInspector" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Inspector used to pan, zoom, and rotate a Camera</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Timer" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Evaluator that outputs an interval of system time in milliseconds between calls to Evaluate</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="VelocityEffector">
		<xs:annotation>
			<xs:documentation>Evaluator that updates the position and rotation of a ParentableMotionElement given an elapsed time, a linear velocity value, and angular velocity values for degrees of rotation about an axis </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="e:EvaluatorType">
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="angularVelocity_Axis" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="angularVelocity_Degrees" type="ax:FloatAttrType" minOccurs="0"/>
						<xs:element name="linearVelocity" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="position" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="rotation" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="resultPosition" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="resultRotation" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="elapsedTime" type="xs:float" use="optional" default="0"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="WobbleSimulator" type="e:EvaluatorType">
		<xs:annotation>
			<xs:documentation>Simulator that jitters the camera as if it were hand-held</xs:documentation>
		</xs:annotation>
	</xs:element>
</xs:schema>

