1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Readded and optimized mapgen V6

This commit is contained in:
kwolekr 2012-12-22 00:34:35 -05:00 committed by Perttu Ahola
parent bddd5f2b98
commit d5029958b9
12 changed files with 1720 additions and 204 deletions

View file

@ -32,8 +32,17 @@ class Biome;
//struct BlockMakeData;
class MapBlock;
class ManualMapVoxelManipulator;
class VoxelManipulator;
class INodeDefManager;
enum BiomeType
{
BT_NORMAL,
BT_DESERT
};
struct BlockMakeData {
bool no_op;
ManualMapVoxelManipulator *vmanip;
@ -48,7 +57,81 @@ struct BlockMakeData {
~BlockMakeData();
};
class Mapgen {
public:
int seed;
int water_level;
bool generating;
int id;
//virtual Mapgen(BiomeDefManager *biomedef, int mapgenid=0, u64 seed=0);
//virtual ~Mapgen();
virtual void makeChunk(BlockMakeData *data) {};
//Legacy functions for Farmesh (pending removal)
static bool get_have_beach(u64 seed, v2s16 p2d);
static double tree_amount_2d(u64 seed, v2s16 p);
static s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
};
class MapgenV6 : public Mapgen {
public:
//ManualMapVoxelManipulator &vmanip;
int ystride;
v3s16 csize;
v3s16 node_min;
v3s16 node_max;
Noise *noise_terrain_base;
Noise *noise_terrain_higher;
Noise *noise_steepness;
Noise *noise_height_select;
Noise *noise_trees;
Noise *noise_mud;
Noise *noise_beach;
Noise *noise_biome;
Noise *noise_cave;
float *map_terrain_base;
float *map_terrain_higher;
float *map_steepness;
float *map_height_select;
float *map_trees;
float *map_mud;
float *map_beach;
float *map_biome;
float *map_cave;
bool use_smooth_biome_trans;
MapgenV6(int mapgenid=0, u64 seed=0);
~MapgenV6();
void makeChunk(BlockMakeData *data);
static s16 find_ground_level(VoxelManipulator &vmanip, v2s16 p2d, INodeDefManager *ndef);
static s16 find_stone_level(VoxelManipulator &vmanip, v2s16 p2d, INodeDefManager *ndef);
void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0, bool is_apple_tree, INodeDefManager *ndef);
double tree_amount_2d(u64 seed, v2s16 p);
bool block_is_underground(u64 seed, v3s16 blockpos);
double base_rock_level_2d(u64 seed, v2s16 p);
s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
double get_mud_add_amount(u64 seed, v2s16 p);
bool get_have_beach(u64 seed, v2s16 p2d);
BiomeType get_biome(u64 seed, v2s16 p2d);
u32 get_blockseed(u64 seed, v3s16 p);
};
class MapgenV7 : public Mapgen {
public:
BlockMakeData *data;
ManualMapVoxelManipulator *vmanip;
@ -59,8 +142,8 @@ public:
int zstride;
v3s16 csize;
int seed;
int water_level;
//int seed;
//int water_level;
Noise *noise_terrain;
Noise *noise_bgroup;
@ -88,23 +171,23 @@ public:
MapNode n_water;
MapNode n_lava;
Mapgen(BiomeDefManager *biomedef, int mapgenid=0, u64 seed=0);
Mapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
MapgenV7(BiomeDefManager *biomedef, int mapgenid=0, u64 seed=0);
MapgenV7(BiomeDefManager *biomedef, int mapgenid, u64 seed,
NoiseParams *np_terrain, NoiseParams *np_bgroup,
NoiseParams *np_heat, NoiseParams *np_humidity);
void initMapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
void init(BiomeDefManager *biomedef, int mapgenid, u64 seed,
NoiseParams *np_terrain, NoiseParams *np_bgroup,
NoiseParams *np_heat, NoiseParams *np_humidity);
~Mapgen();
~MapgenV7();
void makeChunk(BlockMakeData *data);
void updateLiquid(v3s16 node_min, v3s16 node_max);
void updateLighting(v3s16 node_min, v3s16 node_max);
//Legacy functions for Farmesh (pending removal)
static bool get_have_beach(u64 seed, v2s16 p2d);
static double tree_amount_2d(u64 seed, v2s16 p);
static s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
// static bool get_have_beach(u64 seed, v2s16 p2d);
// static double tree_amount_2d(u64 seed, v2s16 p);
// static s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
};
class EmergeManager {