the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 98 lines 2.3 kB view raw
1#include "stdafx.h" 2#include "PerlinNoise.h" 3#include "Mth.h" 4 5PerlinNoise::PerlinNoise(int levels) 6{ 7 Random random; 8 init(&random, levels); 9} 10 11PerlinNoise::PerlinNoise(Random *random, int levels) 12{ 13 init(random, levels); 14} 15 16void PerlinNoise::init(Random *random, int levels) 17{ 18 MemSect(2); 19 this->levels = levels; 20 noiseLevels = new ImprovedNoise *[levels]; 21 for (int i = 0; i < levels; i++) 22 { 23 noiseLevels[i] = new ImprovedNoise(random); 24 } 25 MemSect(0); 26} 27 28PerlinNoise::~PerlinNoise() 29{ 30 for( int i = 0; i < levels; i++ ) 31 { 32 delete noiseLevels[i]; 33 } 34 delete [] noiseLevels; 35} 36 37double PerlinNoise::getValue(double x, double y) 38{ 39 double value = 0; 40 double pow = 1; 41 42 for (int i = 0; i < levels; i++) 43 { 44 value += noiseLevels[i]->getValue(x * pow, y * pow) / pow; 45 pow /= 2; 46 } 47 48 return value; 49} 50 51double PerlinNoise::getValue(double x, double y, double z) 52{ 53 double value = 0; 54 double pow = 1; 55 56 for (int i = 0; i < levels; i++) 57 { 58 value += noiseLevels[i]->getValue(x * pow, y * pow, z * pow) / pow; 59 pow /= 2; 60 } 61 62 return value; 63} 64 65doubleArray PerlinNoise::getRegion(doubleArray buffer, int x, int y, int z, int xSize, int ySize, int zSize, double xScale, double yScale, double zScale) 66{ 67 if (buffer.data == NULL) buffer = doubleArray(xSize * ySize * zSize); 68 else for (unsigned int i = 0; i < buffer.length; i++) 69 buffer[i] = 0; 70 71 72 double pow = 1; 73 74 for (int i = 0; i < levels; i++) 75 { 76 // value += noiseLevels[i].getValue(x * pow, y * pow, z * pow) / pow; 77 double xx = x * pow * xScale; 78 double yy = y * pow * yScale; 79 double zz = z * pow * zScale; 80 __int64 xb = Mth::lfloor(xx); 81 __int64 zb = Mth::lfloor(zz); 82 xx -= xb; 83 zz -= zb; 84 xb %= 16777216; 85 zb %= 16777216; 86 xx += xb; 87 zz += zb; 88 noiseLevels[i]->add(buffer, xx, yy, zz, xSize, ySize, zSize, xScale * pow, yScale * pow, zScale * pow, pow); 89 pow /= 2; 90 } 91 92 return buffer; 93} 94 95doubleArray PerlinNoise::getRegion(doubleArray sr, int x, int z, int xSize, int zSize, double xScale, double zScale, double pow) 96{ 97 return getRegion(sr, x, 10, z, xSize, 1, zSize, xScale, 1, zScale); 98}