mirror of
https://github.com/minetest/minetest.git
synced 2024-11-04 14:53:45 +01:00
Use setting groups for NoiseParams
Add format example to minetest.conf.example Add Settings::setU16() Throw exception on attempted access of NULL settings groups
This commit is contained in:
parent
78103e622c
commit
68c799bf99
@ -443,7 +443,21 @@
|
|||||||
#mgv5_np_wetness = 0, 1, (40, 40, 40), 32474, 4, 1.1
|
#mgv5_np_wetness = 0, 1, (40, 40, 40), 32474, 4, 1.1
|
||||||
|
|
||||||
#mgv6_spflags = biomeblend, jungles, mudflow
|
#mgv6_spflags = biomeblend, jungles, mudflow
|
||||||
|
|
||||||
|
#
|
||||||
|
# Noise parameters can be specified as a set of positional values:
|
||||||
#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6
|
#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6
|
||||||
|
#
|
||||||
|
# Or the new group format can be used instead:
|
||||||
|
#mgv6_np_terrain_base = {
|
||||||
|
# offset = -4
|
||||||
|
# scale = 20
|
||||||
|
# spread = (250, 250, 250)
|
||||||
|
# seed = 82341
|
||||||
|
# octaves = 5
|
||||||
|
# persistence = 0.6
|
||||||
|
#}
|
||||||
|
|
||||||
#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6
|
#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6
|
||||||
#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7
|
#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7
|
||||||
#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69
|
#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69
|
||||||
|
15
src/noise.h
15
src/noise.h
@ -70,8 +70,8 @@ struct NoiseParams {
|
|||||||
float offset;
|
float offset;
|
||||||
float scale;
|
float scale;
|
||||||
v3f spread;
|
v3f spread;
|
||||||
int seed;
|
s32 seed;
|
||||||
int octaves;
|
u16 octaves;
|
||||||
float persist;
|
float persist;
|
||||||
bool eased;
|
bool eased;
|
||||||
|
|
||||||
@ -91,12 +91,11 @@ struct NoiseParams {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Convenience macros for getting/setting NoiseParams in Settings
|
// Convenience macros for getting/setting NoiseParams in Settings as a string
|
||||||
|
// WARNING: Deprecated, use Settings::getNoiseParamsFromValue() instead
|
||||||
#define NOISEPARAMS_FMT_STR "f,f,v3,s32,s32,f"
|
#define NOISEPARAMS_FMT_STR "f,f,v3,s32,u16,f"
|
||||||
|
//#define getNoiseParams(x, y) getStruct((x), NOISEPARAMS_FMT_STR, &(y), sizeof(y))
|
||||||
#define getNoiseParams(x, y) getStruct((x), NOISEPARAMS_FMT_STR, &(y), sizeof(y))
|
//#define setNoiseParams(x, y) setStruct((x), NOISEPARAMS_FMT_STR, &(y))
|
||||||
#define setNoiseParams(x, y) setStruct((x), NOISEPARAMS_FMT_STR, &(y))
|
|
||||||
|
|
||||||
class Noise {
|
class Noise {
|
||||||
public:
|
public:
|
||||||
|
@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "util/serialize.h"
|
#include "util/serialize.h"
|
||||||
#include "filesys.h"
|
#include "filesys.h"
|
||||||
|
#include "noise.h"
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
@ -358,7 +359,10 @@ const SettingsEntry &Settings::getEntry(const std::string &name) const
|
|||||||
|
|
||||||
Settings *Settings::getGroup(const std::string &name) const
|
Settings *Settings::getGroup(const std::string &name) const
|
||||||
{
|
{
|
||||||
return getEntry(name).group;
|
Settings *group = getEntry(name).group;
|
||||||
|
if (group == NULL)
|
||||||
|
throw SettingNotFoundException("Setting [" + name + "] is not a group.");
|
||||||
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -461,6 +465,55 @@ bool Settings::getStruct(const std::string &name, const std::string &format,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Settings::getNoiseParams(const std::string &name, NoiseParams &np) const
|
||||||
|
{
|
||||||
|
return getNoiseParamsFromGroup(name, np) || getNoiseParamsFromValue(name, np);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Settings::getNoiseParamsFromValue(const std::string &name,
|
||||||
|
NoiseParams &np) const
|
||||||
|
{
|
||||||
|
std::string value;
|
||||||
|
|
||||||
|
if (!getNoEx(name, value))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Strfnd f(value);
|
||||||
|
|
||||||
|
np.offset = stof(f.next(","));
|
||||||
|
np.scale = stof(f.next(","));
|
||||||
|
f.next("(");
|
||||||
|
np.spread.X = stof(f.next(","));
|
||||||
|
np.spread.Y = stof(f.next(","));
|
||||||
|
np.spread.Z = stof(f.next(")"));
|
||||||
|
np.seed = stoi(f.next(","));
|
||||||
|
np.octaves = stoi(f.next(","));
|
||||||
|
np.persist = stof(f.next(""));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Settings::getNoiseParamsFromGroup(const std::string &name,
|
||||||
|
NoiseParams &np) const
|
||||||
|
{
|
||||||
|
Settings *group = NULL;
|
||||||
|
|
||||||
|
if (!getGroupNoEx(name, group))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
group->getFloatNoEx("offset", np.offset);
|
||||||
|
group->getFloatNoEx("scale", np.scale);
|
||||||
|
group->getV3FNoEx("spread", np.spread);
|
||||||
|
group->getS32NoEx("seed", np.seed);
|
||||||
|
group->getU16NoEx("octaves", np.octaves);
|
||||||
|
group->getFloatNoEx("persistence", np.persist);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Settings::exists(const std::string &name) const
|
bool Settings::exists(const std::string &name) const
|
||||||
{
|
{
|
||||||
JMutexAutoLock lock(m_mutex);
|
JMutexAutoLock lock(m_mutex);
|
||||||
@ -682,6 +735,12 @@ void Settings::setS16(const std::string &name, s16 value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Settings::setU16(const std::string &name, u16 value)
|
||||||
|
{
|
||||||
|
set(name, itos(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Settings::setS32(const std::string &name, s32 value)
|
void Settings::setS32(const std::string &name, s32 value)
|
||||||
{
|
{
|
||||||
set(name, itos(value));
|
set(name, itos(value));
|
||||||
@ -737,6 +796,21 @@ bool Settings::setStruct(const std::string &name, const std::string &format,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Settings::setNoiseParams(const std::string &name, const NoiseParams &np)
|
||||||
|
{
|
||||||
|
Settings *group = new Settings;
|
||||||
|
|
||||||
|
group->setFloat("offset", np.offset);
|
||||||
|
group->setFloat("scale", np.scale);
|
||||||
|
group->setV3F("spread", np.spread);
|
||||||
|
group->setS32("seed", np.seed);
|
||||||
|
group->setU16("octaves", np.octaves);
|
||||||
|
group->setFloat("persistence", np.persist);
|
||||||
|
|
||||||
|
setGroup(name, group);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Settings::remove(const std::string &name)
|
bool Settings::remove(const std::string &name)
|
||||||
{
|
{
|
||||||
JMutexAutoLock lock(m_mutex);
|
JMutexAutoLock lock(m_mutex);
|
||||||
|
@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
class Settings;
|
class Settings;
|
||||||
|
struct NoiseParams;
|
||||||
|
|
||||||
/** function type to register a changed callback */
|
/** function type to register a changed callback */
|
||||||
typedef void (*setting_changed_callback)(const std::string);
|
typedef void (*setting_changed_callback)(const std::string);
|
||||||
@ -142,6 +143,9 @@ public:
|
|||||||
// the behavior is undefined.
|
// the behavior is undefined.
|
||||||
bool getStruct(const std::string &name, const std::string &format,
|
bool getStruct(const std::string &name, const std::string &format,
|
||||||
void *out, size_t olen) const;
|
void *out, size_t olen) const;
|
||||||
|
bool getNoiseParams(const std::string &name, NoiseParams &np) const;
|
||||||
|
bool getNoiseParamsFromValue(const std::string &name, NoiseParams &np) const;
|
||||||
|
bool getNoiseParamsFromGroup(const std::string &name, NoiseParams &np) const;
|
||||||
|
|
||||||
// return all keys used
|
// return all keys used
|
||||||
std::vector<std::string> getNames() const;
|
std::vector<std::string> getNames() const;
|
||||||
@ -181,6 +185,7 @@ public:
|
|||||||
void setGroupDefault(const std::string &name, Settings *group);
|
void setGroupDefault(const std::string &name, Settings *group);
|
||||||
void setBool(const std::string &name, bool value);
|
void setBool(const std::string &name, bool value);
|
||||||
void setS16(const std::string &name, s16 value);
|
void setS16(const std::string &name, s16 value);
|
||||||
|
void setU16(const std::string &name, u16 value);
|
||||||
void setS32(const std::string &name, s32 value);
|
void setS32(const std::string &name, s32 value);
|
||||||
void setU64(const std::string &name, u64 value);
|
void setU64(const std::string &name, u64 value);
|
||||||
void setFloat(const std::string &name, float value);
|
void setFloat(const std::string &name, float value);
|
||||||
@ -188,6 +193,7 @@ public:
|
|||||||
void setV3F(const std::string &name, v3f value);
|
void setV3F(const std::string &name, v3f value);
|
||||||
void setFlagStr(const std::string &name, u32 flags,
|
void setFlagStr(const std::string &name, u32 flags,
|
||||||
const FlagDesc *flagdesc, u32 flagmask);
|
const FlagDesc *flagdesc, u32 flagmask);
|
||||||
|
void setNoiseParams(const std::string &name, const NoiseParams &np);
|
||||||
// N.B. if setStruct() is used to write a non-POD aggregate type,
|
// N.B. if setStruct() is used to write a non-POD aggregate type,
|
||||||
// the behavior is undefined.
|
// the behavior is undefined.
|
||||||
bool setStruct(const std::string &name, const std::string &format, void *value);
|
bool setStruct(const std::string &name, const std::string &format, void *value);
|
||||||
|
@ -512,7 +512,7 @@ struct TestSettings: public TestBase
|
|||||||
// Test settings groups
|
// Test settings groups
|
||||||
Settings *group = s.getGroup("asdf");
|
Settings *group = s.getGroup("asdf");
|
||||||
UASSERT(group != NULL);
|
UASSERT(group != NULL);
|
||||||
UASSERT(s.getGroup("zoop") == NULL);
|
UASSERT(s.getGroupNoEx("zoop", group) == false);
|
||||||
UASSERT(group->getS16("a") == 5);
|
UASSERT(group->getS16("a") == 5);
|
||||||
UASSERT(fabs(group->getFloat("b") - 2.5) < 0.001);
|
UASSERT(fabs(group->getFloat("b") - 2.5) < 0.001);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user