From d5029958b9017ad89775bc4f68c4de3db603e618 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 22 Dec 2012 00:34:35 -0500 Subject: Readded and optimized mapgen V6 --- src/mapgen.h | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 92 insertions(+), 9 deletions(-) (limited to 'src/mapgen.h') diff --git a/src/mapgen.h b/src/mapgen.h index d6e932ca0..76ae73c52 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -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 { -- cgit v1.2.3