/// <summary> /// Dithers responses by adding noise before passing it to a step response. /// If the quality of the noise is 1, the noise is uniform noise. /// If the quality of the noise is 2, the noise is triangular noise. /// The higher the quality, the closer the noise follow a random distribution. /// </summary> /// <param name="quantizer">A response curve that converts inputs to discrete outputs.</param> /// <param name="quality">The quality.</param> /// <param name="noiseScale">The noise scale.</param> public DitherResponse(IResponseCurve <float> quantizer, int quality, float noiseScale, float[] errorFactors) : this( quantizer, Generator .UniformRandomFloat() .Group(quality) .Select(group => (group.Average() - 0.5f) * noiseScale), errorFactors ) { }
public Consideration( Guid id, string name, Input input, IResponseCurve responseCurve) { Id = id; Name = name; Input = input; ResponseCurve = responseCurve; }
/// <summary> /// Constructs a new DitherResponse. /// </summary> /// <param name="quantizer">The response used to quantize values, such as an instance of StepResponse.</param> /// <param name="noiseGenerator">A generator that provides noise. For satisfactory results, the /// mean should be 0.</param> /// <param name="errorFactors">An array of factors used to diffuse the error over several calls. For example, /// if the error factors are [0.6, 0.3, 0.1], then 60% of the error is given added to the next sample, /// 30% to the sample after that, and 10% to the sample after that.</param> public DitherResponse( IResponseCurve <float> quantizer, IGenerator <float> noiseGenerator, float[] errorFactors) { this.quantizer = quantizer; this.noiseGenerator = noiseGenerator; this.errorFactors = errorFactors; errorBuffer = new float[errorFactors.Length]; for (int i = 0; i < errorBuffer.Length; i++) { errorBuffer[i] = 0; } frontIndex = 0; }
/// <summary> /// Creates a response curve that transforms the output of the given curve /// using the given function. /// </summary> /// <typeparam name="TSource">The type of the source response curve.</typeparam> /// <typeparam name="TResult">The type of the result response curve.</typeparam> /// <param name="source">The source curve.</param> /// <param name="selector">The selector used to transform results from the source curve.</param> /// <returns>IResponseCurve<TResult>.</returns> /// <example>The following makes a response curve that returns string representation of the /// results of a float response curve: /// <code> /// var curve = new ResponseCurveFloat(new[] {0f, 0.5f, 1f}, new []{0f, 1f, 10f}).Select(x => x.TosString()); /// /// uiComponent.text = (curve[0.75f]); /// </code></example> public static IResponseCurve <TResult> Select <TSource, TResult>( this IResponseCurve <TSource> source, Func <TSource, TResult> selector) { return(new SelectResponse <TSource, TResult>(source, selector)); }
public DrinkValueCon(IResponseCurve curve) : base(curve) { }
public FoodValueCon(IResponseCurve curve) : base(curve) { }
public Consideration(IResponseCurve curve) { Curve = curve; }
public CanMoveCon(IResponseCurve curve) : base(curve) { }
public ClothingInInventoryCon(EquipmentSlotDefines.SlotFlags slotFlags, IResponseCurve curve) : base(curve) { _slot = slotFlags; }
public MeleeWeaponSpeedCon(IResponseCurve curve) : base(curve) { }
public RangedWeaponFireRateCon(IResponseCurve curve) : base(curve) { }
public CanUnarmedCombatCon(IResponseCurve curve) : base(curve) { }
public DistanceCon(IResponseCurve curve) : base(curve) { }
public HasTargetLosCon(IResponseCurve curve) : base(curve) { }
public RangedWeaponEquippedCon(IResponseCurve curve) : base(curve) { }
public FreeHandCon(IResponseCurve curve) : base(curve) { }
public TargetInOurHandsCon(IResponseCurve curve) : base(curve) { }
public TargetAccessibleCon(IResponseCurve curve) : base(curve) { }
public HitscanChargerFullCon(IResponseCurve curve) : base(curve) { }
public ThirstCon(IResponseCurve curve) : base(curve) { }
public HitscanWeaponEquippedCon(IResponseCurve curve) : base(curve) { }
public DummyCon(IResponseCurve curve) : base(curve) { }
public MeleeWeaponDamageCon(IResponseCurve curve) : base(curve) { }
public TargetIsDeadCon(IResponseCurve curve) : base(curve) { }
public SelectResponse(IResponseCurve <TSource> source, Func <TSource, TResult> selector) { this.source = source; this.selector = selector; }
public BallisticWeaponEquippedCon(IResponseCurve curve) : base(curve) { }
public HungerCon(IResponseCurve curve) : base(curve) { }