the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 115 lines 2.8 kB view raw
1#include "stdafx.h" 2#include "PerlinSimplexNoise.h" 3 4PerlinSimplexNoise::PerlinSimplexNoise(int levels) 5{ 6 Random random; 7 init(&random,levels); 8} 9 10PerlinSimplexNoise::PerlinSimplexNoise(Random *random, int levels) 11{ 12 init(random,levels); 13 delete random; 14} 15 16void PerlinSimplexNoise::init(Random *random, int levels) 17{ 18 MemSect(3); 19 this->levels = levels; 20 noiseLevels = new SimplexNoise *[levels]; 21 for (int i = 0; i < levels; i++) 22 { 23 noiseLevels[i] = new SimplexNoise(random); 24 } 25 MemSect(0); 26} 27 28PerlinSimplexNoise::~PerlinSimplexNoise() 29{ 30 for(int i = 0; i < levels; i++ ) 31 { 32 delete noiseLevels[i]; 33 } 34 delete[] noiseLevels; 35} 36 37double PerlinSimplexNoise::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 PerlinSimplexNoise::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 PerlinSimplexNoise::getRegion(doubleArray buffer, double x, double y, int xSize, int ySize, double xScale, double yScale, double sizeScale) 66{ 67 return getRegion(buffer, x, y, xSize, ySize, xScale, yScale, sizeScale, 0.5); 68} 69 70doubleArray PerlinSimplexNoise::getRegion(doubleArray buffer, double x, double y, int xSize, int ySize, double xScale, double yScale, double sizeScale, double powScale) 71{ 72 xScale/=1.5; 73 yScale/=1.5; 74 75 if (buffer.data == NULL || (int) buffer.length < xSize * ySize) 76 { 77 if( buffer.data ) delete [] buffer.data; 78 buffer = doubleArray(xSize * ySize); 79 } 80 else for (unsigned int i = 0; i < buffer.length; i++) 81 buffer[i] = 0; 82 83 84 double pow = 1; 85 double scale = 1; 86 for (int i = 0; i < levels; i++) 87 { 88 noiseLevels[i]->add(buffer, x, y, xSize, ySize, xScale * scale, yScale * scale, 0.55/pow); 89 scale *= sizeScale; 90 pow *= powScale; 91 } 92 93 return buffer; 94} 95 96doubleArray PerlinSimplexNoise::getRegion(doubleArray buffer, double x, double y, double z, int xSize, int ySize, int zSize, double xScale, double yScale, double zScale) 97{ 98 xScale/=1.5; 99 yScale/=1.5; 100 101 if (buffer.data == NULL) buffer = doubleArray(xSize * ySize * zSize); 102 else for (unsigned int i = 0; i < buffer.length; i++) 103 buffer[i] = 0; 104 105 106 double pow = 1; 107 108 for (int i = 0; i < levels; i++) { 109 // value += noiseLevels[i].getValue(x * pow, y * pow, z * pow) / pow; 110 noiseLevels[i]->add(buffer, x, y, z, xSize, ySize, zSize, xScale * pow, yScale * pow, zScale * pow, 0.55/pow); 111 pow *= 0.5; 112 } 113 114 return buffer; 115}