import enum worldgeometryDescriptionQueryFlags
{
	DistanceVector,
	CollisionNormal,
	ObstacleDepth,
	UpExtent,
	DownExtent,
	TopExtent,
	TopPoint,
	BehindPoint,
}

import enum worldgeometryDescriptionQueryStatus
{
	OK,
	NoGeometry,
	UpVectorSameAsDirection,
}

import enum worldgeometryProbingStatus
{
	None,
	StillInObstacle,
	GeometryDiverged,
	Failure,
}

import class GeometryDescriptionQuery extends IScriptable
{
	import var refPosition : Vector4;
	import var refDirection : Vector4;
	import var refUp : Vector4;
	import var primitiveDimension : Vector4;
	import var primitiveRotation : Quaternion;
	import var maxDistance : Float;
	import var maxExtent : Float;
	import var raycastStartDistance : Float;
	import var probingPrecision : Float;
	import var probingMaxDistanceDiff : Float;
	import var probingMaxHeight : Float;
	import var maxProbes : Uint32;
	import var probeDimensions : Vector4;
	import var filter : QueryFilter;
	import var flags : Uint32;

	public function AddFlag( flag : worldgeometryDescriptionQueryFlags )
	{
		this.flags = ( ( Uint32 )( ( ( Uint64 )( this.flags ) ) | ( ( Uint64 )( flag ) ) ) );
	}

	public function RemoveFlag( flag : worldgeometryDescriptionQueryFlags )
	{
		var notFlag : Uint64;
		notFlag = ~( ( ( Uint64 )( flag ) ) );
		this.flags = ( ( Uint32 )( ( ( Uint64 )( this.flags ) ) & notFlag ) );
	}

	public function TestFlag( flag : worldgeometryDescriptionQueryFlags ) : Bool
	{
		return ( ( ( Uint64 )( this.flags ) ) & ( ( Uint64 )( flag ) ) ) != ( ( Uint64 )( 0 ) );
	}

}

import struct HandIKDescriptionResult
{
	import var grabPointStart : Vector4;
	import var grabPointEnd : Vector4;
}

import class GeometryDescriptionResult extends IScriptable
{
	import var leftHandData : HandIKDescriptionResult;
	import var rightHandData : HandIKDescriptionResult;
	import var collisionNormal : Vector4;
	import var distanceVector : Vector4;
	import var topPoint : Vector4;
	import var topNormal : Vector4;
	import var behindPoint : Vector4;
	import var behindNormal : Vector4;
	import var obstacleDepth : Float;
	import var upExtent : Float;
	import var downExtent : Float;
	import var topExtent : Float;
	import var obstacleDepthStatus : worldgeometryProbingStatus;
	import var leftExtentStatus : worldgeometryProbingStatus;
	import var rightExtentStatus : worldgeometryProbingStatus;
	import var upExtentStatus : worldgeometryProbingStatus;
	import var downExtentStatus : worldgeometryProbingStatus;
	import var topTestStatus : worldgeometryProbingStatus;
	import var behindTestStatus : worldgeometryProbingStatus;
	import var queryStatus : worldgeometryDescriptionQueryStatus;
	import var climbedEntity : weak< Entity >;
}

