util_noise_noise_sequence.js

/**
 * @module NoiseSequence
 * @fileoverview Contains NoiseSequence class.
 */

/**
 * @class
 * Sequence of noise processes.
 */
class NoiseSequence {
    /**
     * Create a new noise sequence.
     * @param {NoiseProcess[]} seq Array of noise processes for manipulation
     * @param {number} scale Uniform scaling
     * @constructor
     */
    constructor(seq = [], scale = 1) {
        this.seq = seq;

        this.scale = scale;
    }

    /**
     * Execute the noise sequence on data.
     * @param {number} x Value of x position (input)
     * @param {number} y Value of y position (input)
     * @returns {number} Resulting manipulated value
     */
    get(x, y) {
        x /= this.scale;
        y /= this.scale;

        let curr = {
            x: x,
            y: y,
            val: 0
        };

        for (const p of this.seq)
            curr = p.do(curr.x, curr.y, curr.val);

        return curr.val;
    }
}

export default NoiseSequence;