noise: Throw exception on noise allocation failure
This commit is contained in:
parent
a3e019c4f6
commit
25945dc539
|
@ -125,6 +125,18 @@ public:
|
||||||
Some "old-style" interrupts:
|
Some "old-style" interrupts:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
class InvalidNoiseParamsException : public BaseException {
|
||||||
|
public:
|
||||||
|
InvalidNoiseParamsException():
|
||||||
|
BaseException("One or more noise parameters were invalid or require "
|
||||||
|
"too much memory")
|
||||||
|
{}
|
||||||
|
|
||||||
|
InvalidNoiseParamsException(const std::string &s):
|
||||||
|
BaseException(s)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
class InvalidPositionException : public BaseException
|
class InvalidPositionException : public BaseException
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <string.h> // memset
|
#include <string.h> // memset
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "util/numeric.h"
|
#include "util/numeric.h"
|
||||||
|
#include "exceptions.h"
|
||||||
|
|
||||||
#define NOISE_MAGIC_X 1619
|
#define NOISE_MAGIC_X 1619
|
||||||
#define NOISE_MAGIC_Y 31337
|
#define NOISE_MAGIC_Y 31337
|
||||||
|
@ -336,8 +337,12 @@ Noise::Noise(NoiseParams *np, int seed, int sx, int sy, int sz)
|
||||||
this->noisebuf = NULL;
|
this->noisebuf = NULL;
|
||||||
resizeNoiseBuf(sz > 1);
|
resizeNoiseBuf(sz > 1);
|
||||||
|
|
||||||
this->buf = new float[sx * sy * sz];
|
try {
|
||||||
this->result = new float[sx * sy * sz];
|
this->buf = new float[sx * sy * sz];
|
||||||
|
this->result = new float[sx * sy * sz];
|
||||||
|
} catch (std::bad_alloc &e) {
|
||||||
|
throw InvalidNoiseParamsException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,8 +365,12 @@ void Noise::setSize(int sx, int sy, int sz)
|
||||||
|
|
||||||
delete[] buf;
|
delete[] buf;
|
||||||
delete[] result;
|
delete[] result;
|
||||||
this->buf = new float[sx * sy * sz];
|
try {
|
||||||
this->result = new float[sx * sy * sz];
|
this->buf = new float[sx * sy * sz];
|
||||||
|
this->result = new float[sx * sy * sz];
|
||||||
|
} catch (std::bad_alloc &e) {
|
||||||
|
throw InvalidNoiseParamsException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -399,7 +408,11 @@ void Noise::resizeNoiseBuf(bool is3d)
|
||||||
|
|
||||||
if (noisebuf)
|
if (noisebuf)
|
||||||
delete[] noisebuf;
|
delete[] noisebuf;
|
||||||
noisebuf = new float[nlx * nly * nlz];
|
try {
|
||||||
|
noisebuf = new float[nlx * nly * nlz];
|
||||||
|
} catch (std::bad_alloc &e) {
|
||||||
|
throw InvalidNoiseParamsException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -615,7 +628,7 @@ float *Noise::perlinMap2DModulated(float x, float y, float *persist_map)
|
||||||
|
|
||||||
f *= 2.0;
|
f *= 2.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] g;
|
delete[] g;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,7 +171,7 @@ int LuaPerlinNoiseMap::l_get2dMap_flat(lua_State *L)
|
||||||
n->perlinMap2D(p.X, p.Y);
|
n->perlinMap2D(p.X, p.Y);
|
||||||
|
|
||||||
int maplen = n->sx * n->sy;
|
int maplen = n->sx * n->sy;
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
for (int i = 0; i != maplen; i++) {
|
for (int i = 0; i != maplen; i++) {
|
||||||
float noiseval = n->np->offset + n->np->scale * n->result[i];
|
float noiseval = n->np->offset + n->np->scale * n->result[i];
|
||||||
|
@ -220,7 +220,7 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L)
|
||||||
|
|
||||||
|
|
||||||
int maplen = n->sx * n->sy * n->sz;
|
int maplen = n->sx * n->sy * n->sz;
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
for (int i = 0; i != maplen; i++) {
|
for (int i = 0; i != maplen; i++) {
|
||||||
float noiseval = n->np->offset + n->np->scale * n->result[i];
|
float noiseval = n->np->offset + n->np->scale * n->result[i];
|
||||||
|
@ -231,7 +231,11 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L)
|
||||||
}
|
}
|
||||||
|
|
||||||
LuaPerlinNoiseMap::LuaPerlinNoiseMap(NoiseParams *np, int seed, v3s16 size) {
|
LuaPerlinNoiseMap::LuaPerlinNoiseMap(NoiseParams *np, int seed, v3s16 size) {
|
||||||
noise = new Noise(np, seed, size.X, size.Y, size.Z);
|
try {
|
||||||
|
noise = new Noise(np, seed, size.X, size.Y, size.Z);
|
||||||
|
} catch (InvalidNoiseParamsException &e) {
|
||||||
|
throw LuaError(e.what());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LuaPerlinNoiseMap::~LuaPerlinNoiseMap()
|
LuaPerlinNoiseMap::~LuaPerlinNoiseMap()
|
||||||
|
|
Loading…
Reference in New Issue