Created
June 1, 2013 02:36
-
-
Save acceptable-security/5689099 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function generatePerm() | |
{ | |
var list = [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]; | |
var end = new Array(); | |
for(var i=0;i<256;i++) | |
{ | |
end[i] = list[i]; | |
end[256 + i] = list[i]; | |
} | |
return end; | |
} | |
function lerp(t, a, b) | |
{ | |
return a + t * (b - a); | |
} | |
function fade(t) | |
{ | |
return t* t * t * (t * (t * 6 - 15) + 10); | |
} | |
function grad(hash, x, y, z) | |
{ | |
var h = hash & 15; | |
if(h < 8) | |
{ | |
var u = x; | |
} | |
else | |
{ | |
var u = y; | |
} | |
if(h < 4) | |
{ | |
var v = h; | |
} | |
else | |
{ | |
if(h == 12 || h == 14) | |
{ | |
var v = x; | |
} | |
else | |
{ | |
var v = z; | |
} | |
} | |
if(h & 1 == 0) | |
{ | |
var abc = u; | |
} | |
else | |
{ | |
var abc = -u; | |
} | |
if(h & 2 == 0) | |
{ | |
abc = abc + v; | |
} | |
else | |
{ | |
abc = abc + -v; | |
} | |
return abc; | |
} | |
function snoise(x, y, z, p) | |
{ | |
var floopX = Math.round(x) & 255; | |
var floopY = Math.round(y) & 255; | |
var floopZ = Math.round(z) & 255; | |
x -= Math.round(x); | |
y -= Math.round(y); | |
z -= Math.round(z); | |
var u = fade(x); | |
var v = fade(y); | |
var w = fade(z); | |
var a = p[floopX] + floopY; | |
var aa = p[a] | |
var a = p[floopX] + floopY; | |
var aa = p[a] + floopZ; | |
var ab = p[a + 1] + floopZ; | |
var b = p[floopX + 1] + floopY; | |
var ba = p[b] + floopZ; | |
var bb = p[b + 1] + floopZ; | |
var pAA = p[aa]; | |
var pAB = p[ab]; | |
var pBA = p[ba]; | |
var pBB = p[bb]; | |
var pAA1 = p[aa + 1]; | |
var pAB1 = p[ab + 1]; | |
var pBA1 = p[ba + 1]; | |
var pBB1 = p[bb + 1]; | |
var gradAA = grad(pAA,x,y,z); | |
var gradBA = grad(pBA, x-1,y,z); | |
var gradAB = grad(pAB,x,y-1,z); | |
var gradBB = grad(pBB,x-1,y-1,z); | |
var gradAA1 = grad(pAA1,x,y,z-1); | |
var gradBA1 = grad(pBA1,x-1,y,z-1); | |
var gradAB1 = grad(pAB1,x,y-1,z-1); | |
var gradBB1 = grad(pBB1,x-1,y-1,z-1); | |
return lerp(w, | |
lerp(v, lerp(u, gradAA, gradBA), lerp(u, gradAB, gradBB)), | |
lerp(v, lerp(u, gradAA1, gradBA1), lerp(u,gradAB1,gradBB1)) | |
); | |
} | |
function terrainGenerate(max,min,size) | |
{ | |
var seed = 0.123571823; | |
var quality = 256; | |
var delta = quality + seed; | |
var results = new Array(); | |
for(var x=0;x<size;x++) | |
{ | |
for(var y=0;y<size;y++) | |
{ | |
var noise = snoise(((x) / seed) / delta, ((y) / seed) / delta, 0, generatePerm()); | |
noise = (noise + 1) / 2 * (max - min) + min; | |
results.push((x,y,Math.round(noise),"grass")); | |
for(var z=0;z<16;z++) | |
if(z < Math.round(noise)) | |
results.push((x,y,z,"dirt")); | |
} | |
} | |
return results; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment