Ground

by mvasilkov

HTML

<canvas id=paint></canvas>

JavaScript

/* HERE BE COLORS: */
var baseColor = '#feefdc'
var lineColor = '#303030' // '#fa2906'
var patternColors = [baseColor, baseColor, '#ffd7be', '#6fa5d4', '#5579ad', '#2c5f8c']


/* THE REST OF THE CODE IS SHIT, PLEASE DISREGARD IT */

















































function ParkMiller() {
    this.a = 1
}

ParkMiller.prototype.seed = function seed(a) {
    if (a > 1) (this.a = a % 2147483647)
    else (this.a = 1)
    return this
}

ParkMiller.prototype.iuniform = function iuniform() {
    return (this.a = this.a * 48271 % 2147483647)
}

ParkMiller.prototype.uniform = function uniform() {
    return this.iuniform() / 2147483647
}



var random = new ParkMiller
random.seed(944)

function _makeGround(canvas, size, anticlockwise) {
    var middle = 0.5 * size

    //canvas.beginPath()
    canvas.arc(middle, middle, middle - 3, 0, 2 * Math.PI, anticlockwise)

    return middle
}

function paintGround(canvas, size) {
    var middle = 0.5 * size

    /*
       canvas.translate(middle, middle)
       canvas.rotate(-0.1 * Math.PI)
       canvas.translate(-middle, -middle)
       */

    canvas.beginPath()
    var middle = _makeGround(canvas, size)
    var r = middle - 3

    canvas.fillStyle = baseColor
    canvas.fill()

    var r2 = 3 * r
    canvas.globalCompositeOperation = 'source-atop'

    for (var i = 0; i < 66; ++i) {
        var color = patternColors[0|patternColors.length * random.uniform()]
        var offset = size * random.uniform()
        var width = 12 + 12 * random.uniform()

        canvas.beginPath()
        canvas.arc(middle, offset - r2, r2, 0, 2 * Math.PI)

        canvas.lineWidth = width
        canvas.strokeStyle = color
        canvas.stroke()
    }


    var lightingOffset = 30

    canvas.save()

    canvas.beginPath()
    _makeGround(canvas, size)
    canvas.clip()

    canvas.globalCompositeOperation = 'overlay'

    canvas.translate(lightingOffset, lightingOffset)
    canvas.beginPath()
    canvas.moveTo(-lightingOffset,...