UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

177 lines (160 loc) 8.12 kB
// Class: openfl.display._internal.PerlinNoise2D var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../hxClasses_stub").default; var $hxEnums = require("./../../../hxEnums_stub").default; var $import = require("./../../../import_stub").default; var $extend = require("./../../../extend_stub").default; function openfl_display__$internal_AbstractNoise() {return require("./../../../openfl/display/_internal/AbstractNoise");} function Std() {return require("./../../../Std");} // Constructor var PerlinNoise2D = function(seed,octaves,channels,grayScale,falloff,stitch,stitch_threshold) { if(stitch_threshold == null) { stitch_threshold = 0.05; } if(stitch == null) { stitch = false; } (openfl_display__$internal_AbstractNoise().default).call(this,seed,octaves,channels,grayScale,falloff,stitch,stitch_threshold); this.p_perm = []; var _g = 0; while(_g < 512) { var i = _g++; this.p_perm[i] = PerlinNoise2D.P[i & 255]; } } // Meta PerlinNoise2D.__name__ = "openfl.display._internal.PerlinNoise2D"; PerlinNoise2D.__isInterface__ = false; PerlinNoise2D.__super__ = (openfl_display__$internal_AbstractNoise().default); PerlinNoise2D.prototype = $extend((openfl_display__$internal_AbstractNoise().default).prototype, { fill: function(bitmap,_scale_x,_scale_y,_scale_z) { var width = bitmap.width; var height = bitmap.height; var octaves = this.octaves; var octaves_frequencies = this.octaves_frequencies; var octaves_persistences = this.octaves_persistences; var isRed = (1 & this.channels) == 1; var isGreen = (2 & this.channels) == 2; var isBlue = (4 & this.channels) == 4; var channels = 0; if(isRed) { ++channels; } if(isGreen) { ++channels; } if(isBlue) { ++channels; } var grayscale = this.grayscale; var stitch_w = (Std().default).int(this.stitch_threshold * width); var stitch_h = (Std().default).int(this.stitch_threshold * height); var _g = 0; var _g1 = height; while(_g < _g1) { var py = _g++; var py_delta_g = py - 10.0; var py_delta_b = py + 10.0; var _g2 = 0; var _g11 = width; while(_g2 < _g11) { var px = _g2++; var color1 = 0.0; var color2 = 0.0; var color3 = 0.0; var px_delta_g = px - 10.0; var px_delta_b = px + 10.0; var _g3 = 0; var _g12 = octaves; while(_g3 < _g12) { var i = _g3++; var frequency = octaves_frequencies[i]; var persistence = octaves_persistences[i]; color1 += this.noise(px * (1.0 / _scale_x) * frequency,py * (1.0 / _scale_y) * frequency,0.0) * persistence; if(!grayscale) { if(1 < channels) { color2 += this.noise((px + px_delta_g) * (1.0 / _scale_x) * frequency,(py + py_delta_g) * (1.0 / _scale_y) * frequency,0.0) * persistence; } if(2 < channels) { color3 += this.noise((px + px_delta_b) * (1.0 / _scale_x) * frequency,(py + py_delta_b) * (1.0 / _scale_y) * frequency,0.0) * persistence; } } } var color = 0; if(grayscale) { color = this.color(color1,color1,color1); } else if(isRed && isGreen && isBlue) { color = this.color(color1,color2,color3); } else if(isRed && isGreen) { color = this.color(color1,color2,null); } else if(isRed && isBlue) { color = this.color(color1,null,color2); } else if(isGreen && isBlue) { color = this.color(null,color1,color2); } else if(isRed) { color = this.color(color1,null,null); } else if(isGreen) { color = this.color(null,color1,null); } else if(isBlue) { color = this.color(null,null,color1); } if(this.stitch) { color = this.stitching(bitmap,color,px,py,stitch_w,stitch_h,width,height); } bitmap.setPixel32(px,py,color); } } }, noiseToColor: function(noise) { return (Std().default).int((noise * this.persistence_max + 1.0) * 0.5 * 255); }, noise: function(xin,yin,zin) { var X = this.fastfloor(xin); var Y = this.fastfloor(yin); var Z = this.fastfloor(zin); var x = xin - X; var y = yin - Y; var z = zin - Z; var X1 = X & 255; var Y1 = Y & 255; var Z1 = Z & 255; var gi000 = this.p_perm[X1 + this.p_perm[Y1 + this.p_perm[Z1]]] % 12; var gi001 = this.p_perm[X1 + this.p_perm[Y1 + this.p_perm[Z1 + 1]]] % 12; var gi010 = this.p_perm[X1 + this.p_perm[Y1 + 1 + this.p_perm[Z1]]] % 12; var gi011 = this.p_perm[X1 + this.p_perm[Y1 + 1 + this.p_perm[Z1 + 1]]] % 12; var gi100 = this.p_perm[X1 + 1 + this.p_perm[Y1 + this.p_perm[Z1]]] % 12; var gi101 = this.p_perm[X1 + 1 + this.p_perm[Y1 + this.p_perm[Z1 + 1]]] % 12; var gi110 = this.p_perm[X1 + 1 + this.p_perm[Y1 + 1 + this.p_perm[Z1]]] % 12; var gi111 = this.p_perm[X1 + 1 + this.p_perm[Y1 + 1 + this.p_perm[Z1 + 1]]] % 12; var n000 = this.dot(PerlinNoise2D.grad3[gi000],x,y,z); var n100 = this.dot(PerlinNoise2D.grad3[gi100],x - 1,y,z); var n010 = this.dot(PerlinNoise2D.grad3[gi010],x,y - 1,z); var n110 = this.dot(PerlinNoise2D.grad3[gi110],x - 1,y - 1,z); var n001 = this.dot(PerlinNoise2D.grad3[gi001],x,y,z - 1); var n101 = this.dot(PerlinNoise2D.grad3[gi101],x - 1,y,z - 1); var n011 = this.dot(PerlinNoise2D.grad3[gi011],x,y - 1,z - 1); var n111 = this.dot(PerlinNoise2D.grad3[gi111],x - 1,y - 1,z - 1); var u = this.fade(x); var v = this.fade(y); var w = this.fade(z); var nx00 = this.mix(n000,n100,u); var nx01 = this.mix(n001,n101,u); var nx10 = this.mix(n010,n110,u); var nx11 = this.mix(n011,n111,u); var nxy0 = this.mix(nx00,nx10,v); var nxy1 = this.mix(nx01,nx11,v); var nxyz = this.mix(nxy0,nxy1,w); return nxyz; } }); PerlinNoise2D.prototype.__class__ = PerlinNoise2D.prototype.constructor = $hxClasses["openfl.display._internal.PerlinNoise2D"] = PerlinNoise2D; // Init // Statics PerlinNoise2D.__meta__ = { obj : { SuppressWarnings : ["checkstyle:FieldDocComment"]}, statics : { P : { SuppressWarnings : ["checkstyle:ConstantName"]}}} PerlinNoise2D.grad3 = [[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]] PerlinNoise2D.P = [151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180] // Export exports.default = PerlinNoise2D;