the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 114 lines 3.2 kB view raw
1#include "stdafx.h" 2#include "FastNoise.h" 3 4FastNoise::FastNoise(int levels) 5{ 6 Random random; 7 init(&random, levels); 8} 9 10FastNoise::FastNoise(Random *random, int levels) 11{ 12 init(random,levels); 13} 14 15void FastNoise::init(Random *random, int levels) 16{ 17 this->levels = levels; 18 noiseMaps = new byte *[levels]; 19 for (int i = 0; i < levels; i++) 20 { 21 noiseMaps[i] = new byte[0x100000]; 22 random->nextBytes(noiseMaps[i],0x100000); 23 } 24} 25 26FastNoise::~FastNoise() 27{ 28 for( int i = 0; i < levels; i++ ) 29 { 30 delete [] noiseMaps[i]; 31 } 32 delete [] noiseMaps; 33} 34 35doubleArray FastNoise::getRegion(doubleArray buffer, double x, double y, double z, int xSize, int ySize, int zSize, double xScale, double yScale, double zScale) 36{ 37 if (buffer.data == NULL) buffer = doubleArray(xSize * ySize * zSize); 38 else for (unsigned int i = 0; i < buffer.length; i++) 39 buffer[i] = 0; 40 41 42 double pow = 1; 43 int AA = 487211441; 44 int BB = 21771; 45 for (int i = 0; i < levels; i++) 46 { 47 byte *map = noiseMaps[i]; 48 int pp = 0; 49 50 for (int zp = 0; zp < zSize; zp++) 51 { 52 double zz = (z + zp) * zScale; 53 int Z = (int) zz; 54 if (zz < Z) Z -= 1; 55 int zl = (int) ((zz - Z) * 65536); 56 57 for (int yp = 0; yp < ySize; yp++) 58 { 59 double yy = (y + yp) * yScale; 60 int Y = (int) yy; 61 if (yy < Y) Y -= 1; 62 int yl = (int) ((yy - Y) * 65536); 63 64 for (int xp = 0; xp < xSize; xp++) 65 { 66 double xx = (x + xp) * xScale; 67 int X = (int) xx; 68 if (xx < X) X -= 1; 69 int xl = (int) ((xx - X) * 65536); 70 71 int X0 = (X + 0) * AA; 72 int X1 = (X + 1) * AA; 73 74 int Y0 = (Y + 0); 75 int Y1 = (Y + 1); 76 int Z0 = (Z + 0); 77 int Z1 = (Z + 1); 78 79 int X0Y0 = (X0 + Y0) * BB; 80 int X1Y0 = (X1 + Y0) * BB; 81 int X0Y1 = (X0 + Y1) * BB; 82 int X1Y1 = (X1 + Y1) * BB; 83 84 int a = map[(X0Y0 + Z0) & 0xfffff]; 85 int b = map[(X1Y0 + Z0) & 0xfffff]; 86 int c = map[(X0Y1 + Z0) & 0xfffff]; 87 int d = map[(X1Y1 + Z0) & 0xfffff]; 88 int e = map[(X0Y0 + Z1) & 0xfffff]; 89 int f = map[(X1Y0 + Z1) & 0xfffff]; 90 int g = map[(X0Y1 + Z1) & 0xfffff]; 91 int h = map[(X1Y1 + Z1) & 0xfffff]; 92 93 int ab = a + (((b - a) * xl) >> 16); 94 int cd = c + (((d - c) * xl) >> 16); 95 int ef = e + (((f - e) * xl) >> 16); 96 int gh = g + (((h - g) * xl) >> 16); 97 98 int abcd = ab + (((cd - ab) * yl) >> 16); 99 int efgh = ef + (((gh - ef) * yl) >> 16); 100 101 int res = abcd + (((efgh - abcd) * zl) >> 16); 102 103 buffer[pp++] += res*pow; 104 } 105 } 106 } 107 pow /= 2; 108 xScale*=2; 109 yScale*=2; 110 zScale*=2; 111 } 112 113 return buffer; 114}