/// <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="_satXPoints">x points of the satisfaction linear spline (distances from position)</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLTargetPositionProperty(string _name, List <CLTarget> _targets, Vector2 _position, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, _targets)
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     cost        = 1.0f;
     position    = _position;
 }
 /// <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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLFramingProperty(Rectangle _rect, string _name, List <CLTarget> _targets, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, _targets)
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     cost        = 1.0f;
     frame       = _rect;
 }
 /// <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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLCameraAbovePlaneProperty(Plane _referencePlane, string _name, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, new List <CLTarget>())
 {
     satFunction    = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLCameraDistanceProperty(Vector3 _referencePosition, string _name, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, new List <CLTarget>())
 {
     satFunction       = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLCameraOrientationProperty(Quaternion cameraOrientation, string _name, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, new List <CLTarget>())
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLSizeProperty(SizeMode _sizeMode, string _name, List <CLTarget> _targets, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, _targets)
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     sizeType    = _sizeMode;
     cost        = 1.0f;
 }
 /// <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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLRelativePositionProperty(RelativePositionMode mode, string _name, List <CLTarget> _targets, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, _targets)
 {
     satFunction  = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLOrientationProperty(OrientationMode mode, string _name, List <CLTarget> _targets, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, _targets)
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     cost        = 1.5f;
     orientation = mode;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CameraOrientationProperty"/> class.
 /// </summary>
 /// <param name="point">point to check.</param>
 /// <param name="_name">property name</param>
 /// <param name="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLCameraSeesPointProperty(Vector3 _point, int _layerMask, string _name, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, new List <CLTarget>())
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     cost        = 1.0f;
     point       = _point;
     layerMask   = ~_layerMask;
 }
 /// <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="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLOcclusionProperty(string _name, List <CLTarget> _targets, List <float> _satXPoints, List <float> _satYPoints, bool _frontBack = true, bool _randomRayCasts = false) :
     base(_name, _targets)
 {
     satFunction    = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     cost           = 20.0f;
     frontBack      = _frontBack;
     randomRayCasts = _randomRayCasts;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="CLCameraFOVProperty"/> class.
 /// </summary>
 /// <param name="_name">property name</param>
 /// <param name="_satXPoints">x points of the satisfaction linear spline</param>
 /// <param name="_satYPoints">y points of the satisfaction linear spline</param>
 public CLCameraFOVProperty(string _name, List <float> _satXPoints, List <float> _satYPoints) :
     base(_name, new List <CLTarget>())
 {
     satFunction = new CLLinearSplineSatFunction(_satXPoints, _satYPoints);
     cost        = 1.0f;
 }