/// <summary>
 /// Initializes a new instance of the <see cref="OcclusionProperty"/> class.
 /// </summary>
 /// <param name="_name">property name</param>
 /// <param name="_targets">property targets</param>
 /// <param name="_satFunction">sat function</param>
 public CLOcclusionProperty(string _name, List <CLTarget> _targets, CLSatFunction _satFunction, bool _frontBack = true, bool _randomRayCasts = false) :
     base(_name, _targets, _satFunction)
 {
     cost           = 20.0f;
     frontBack      = _frontBack;
     randomRayCasts = _randomRayCasts;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CameraOrientationProperty"/> class.
 /// </summary>
 /// <param name="cameraOrientation">reference orientation.</param>
 /// <param name="_name">property name</param>
 /// <param name="_satFunction">sat function</param>
 public CLCameraSeesPointProperty(Vector3 _point, int _layerMask, string _name, CLSatFunction _satFunction) :
     base(_name, new List <CLTarget>(), _satFunction)
 {
     cost      = 1.0f;
     point     = _point;
     layerMask = ~_layerMask;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="FramingProperty"/> class.
 /// </summary>
 /// <param name="_rect">rectangular frame</param>
 /// <param name="_name">property name</param>
 /// <param name="_targets">property targets. They have no meaning for this property, but we add them anyway.</param>
 /// <param name="_satFunction">sat function</param>
 public CLFramingProperty(Rectangle _rect, string _name, List <CLTarget> _targets, CLSatFunction _satFunction) :
     base(_name, _targets, _satFunction)
 {
     cost  = 1.0f;
     frame = _rect;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CLTargetPositionProperty"/> class.
 /// </summary>
 /// <param name="_position">position on viewport (normalized in [0,1] in both dimensions)</param>
 /// <param name="_name">property name</param>
 /// <param name="_targets">property targets. They have no meaning for this property, but we add them anyway.</param>
 /// <param name="_satFunction">sat function</param>
 public CLTargetPositionProperty(string _name, List <CLTarget> _targets, Vector2 _position, CLSatFunction _satFunction) :
     base(_name, _targets, _satFunction)
 {
     cost     = 1.0f;
     position = _position;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CLCameraFOVProperty"/> class.
 /// </summary>
 /// <param name="_name">property name</param>
 /// <param name="_satFunction">sat function</param>
 public CLCameraFOVProperty(string _name, CLSatFunction _satFunction) :
     base(_name, new List <CLTarget>(), _satFunction)
 {
     cost = 1.0f;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CameraOrientationProperty"/> class.
 /// </summary>
 /// <param name="cameraOrientation">reference orientation.</param>
 /// <param name="_name">property name</param>
 /// <param name="_satFunction">sat function</param>
 public CLCameraDistanceProperty(Vector3 _referencePosition, string _name, CLSatFunction _satFunction) :
     base(_name, new List <CLTarget>(), _satFunction)
 {
     cost = 1.0f;
     referencePosition = new Vector3(_referencePosition.x, _referencePosition.y, _referencePosition.z);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CameraOrientationProperty"/> class.
 /// </summary>
 /// <param name="cameraOrientation">reference orientation.</param>
 /// <param name="_name">property name</param>
 /// <param name="_satFunction">sat function</param>
 public CLCameraAbovePlaneProperty(Plane _referencePlane, string _name, CLSatFunction _satFunction) :
     base(_name, new List <CLTarget>(), _satFunction)
 {
     cost           = 1.0f;
     referencePlane = new Plane(_referencePlane.normal, _referencePlane.distance);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CameraOrientationProperty"/> class.
 /// </summary>
 /// <param name="cameraOrientation">reference orientation.</param>
 /// <param name="_name">property name</param>
 /// <param name="_satFunction">sat function</param>
 public CLCameraOrientationProperty(Quaternion cameraOrientation, string _name, CLSatFunction _satFunction) :
     base(_name, new List <CLTarget>(), _satFunction)
 {
     cost = 1.0f;
     referenceCameraOrientation = new Quaternion(cameraOrientation.x, cameraOrientation.y, cameraOrientation.z, cameraOrientation.w);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="SizeProperty"/> class.
 /// </summary>
 /// <param name="_sizeMode">size mode.</param>
 /// <param name="_name">property name</param>
 /// <param name="_targets">property targets</param>
 /// <param name="_satFunction">sat function</param>
 public CLSizeProperty(SizeMode _sizeMode, string _name, List <CLTarget> _targets, CLSatFunction _satFunction) :
     base(_name, _targets, _satFunction)
 {
     sizeType = _sizeMode;
     cost     = 1.0f;
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="_name">property name.</param>
 /// <param name="_targets">property targets.</param>
 /// <param name="_satFunction">x points of the sat spline</param>
 public CLGroundProperty(string _name, List <CLTarget> _targets, CLSatFunction _satFunction) : base(_name, _targets)
 {
     satFunction = _satFunction;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RelativePositionProperty"/> class.
 /// </summary>
 /// <param name="mode">Mode.</param>
 // <param name="_name">property name</param>
 /// <param name="_targets">property targets. They have no meaning for this property, but we add them anyway.</param>
 /// <param name="_satFunction">sat function</param>
 public CLRelativePositionProperty(RelativePositionMode mode, string _name, List <CLTarget> _targets, CLSatFunction _satFunction) :
     base(_name, _targets, _satFunction)
 {
     cost         = 1.5f;
     positionType = mode;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="OrientationProperty"/> class.
 /// </summary>
 /// <param name="mode">Mode.</param>
 // <param name="_name">property name</param>
 /// <param name="_targets">property targets. They have no meaning for this property, but we add them anyway.</param>
 /// <param name="_satFunction">sat function</param>
 public CLOrientationProperty(OrientationMode mode, string _name, List <CLTarget> _targets, CLSatFunction _satFunction) :
     base(_name, _targets, _satFunction)
 {
     cost        = 1.5f;
     orientation = mode;
 }