Expose getPointedThing to Lua
[oweals/minetest.git] / src / mapgen_fractal.cpp
index c47a7bfdc1d330a7e1dd5c0d5fd214de9f00e867..4fe0d836968d29e910b67b65dd79c2bd86458d0e 100644 (file)
@@ -1,7 +1,7 @@
 /*
 Minetest
-Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2010-2015 paramat, Matt Gregory
+Copyright (C) 2015-2017 paramat
+Copyright (C) 2015-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -33,7 +33,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "emerge.h"
 #include "dungeongen.h"
 #include "cavegen.h"
-#include "treegen.h"
 #include "mg_biome.h"
 #include "mg_ore.h"
 #include "mg_decoration.h"
@@ -47,32 +46,32 @@ FlagDesc flagdesc_mapgen_fractal[] = {
 ///////////////////////////////////////////////////////////////////////////////////////
 
 
-MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge)
+MapgenFractal::MapgenFractal(int mapgenid, MapgenFractalParams *params, EmergeManager *emerge)
        : MapgenBasic(mapgenid, params, emerge)
 {
-       MapgenFractalParams *sp = (MapgenFractalParams *)params->sparams;
-
-       this->spflags    = sp->spflags;
-       this->cave_width = sp->cave_width;
-       this->fractal    = sp->fractal;
-       this->iterations = sp->iterations;
-       this->scale      = sp->scale;
-       this->offset     = sp->offset;
-       this->slice_w    = sp->slice_w;
-       this->julia_x    = sp->julia_x;
-       this->julia_y    = sp->julia_y;
-       this->julia_z    = sp->julia_z;
-       this->julia_w    = sp->julia_w;
+       spflags          = params->spflags;
+       cave_width       = params->cave_width;
+       large_cave_depth = params->large_cave_depth;
+       lava_depth       = params->lava_depth;
+       fractal          = params->fractal;
+       iterations       = params->iterations;
+       scale            = params->scale;
+       offset           = params->offset;
+       slice_w          = params->slice_w;
+       julia_x          = params->julia_x;
+       julia_y          = params->julia_y;
+       julia_z          = params->julia_z;
+       julia_w          = params->julia_w;
 
        //// 2D terrain noise
-       noise_seabed       = new Noise(&sp->np_seabed, seed, csize.X, csize.Z);
-       noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z);
+       noise_seabed       = new Noise(&params->np_seabed, seed, csize.X, csize.Z);
+       noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
 
-       MapgenBasic::np_cave1 = sp->np_cave1;
-       MapgenBasic::np_cave2 = sp->np_cave2;
+       MapgenBasic::np_cave1 = params->np_cave1;
+       MapgenBasic::np_cave2 = params->np_cave2;
 
-       this->formula = fractal / 2 + fractal % 2;
-       this->julia   = fractal % 2 == 0;
+       formula = fractal / 2 + fractal % 2;
+       julia   = fractal % 2 == 0;
 }
 
 
@@ -85,38 +84,28 @@ MapgenFractal::~MapgenFractal()
 
 MapgenFractalParams::MapgenFractalParams()
 {
-       spflags    = 0;
-       cave_width = 0.3;
-       fractal    = 1;
-       iterations = 11;
-       scale      = v3f(4096.0, 1024.0, 4096.0);
-       offset     = v3f(1.79, 0.0, 0.0);
-       slice_w    = 0.0;
-       julia_x    = 0.33;
-       julia_y    = 0.33;
-       julia_z    = 0.33;
-       julia_w    = 0.33;
-
        np_seabed       = NoiseParams(-14, 9,   v3f(600, 600, 600), 41900, 5, 0.6, 2.0);
        np_filler_depth = NoiseParams(0,   1.2, v3f(150, 150, 150), 261,   3, 0.7, 2.0);
-       np_cave1        = NoiseParams(0,   12,  v3f(96,  96,  96),  52534, 4, 0.5, 2.0);
-       np_cave2        = NoiseParams(0,   12,  v3f(96,  96,  96),  10325, 4, 0.5, 2.0);
+       np_cave1        = NoiseParams(0,   12,  v3f(61,  61,  61),  52534, 3, 0.5, 2.0);
+       np_cave2        = NoiseParams(0,   12,  v3f(67,  67,  67),  10325, 3, 0.5, 2.0);
 }
 
 
 void MapgenFractalParams::readParams(const Settings *settings)
 {
-       settings->getFlagStrNoEx("mgfractal_spflags",  spflags, flagdesc_mapgen_fractal);
-       settings->getFloatNoEx("mgfractal_cave_width", cave_width);
-       settings->getU16NoEx("mgfractal_fractal",      fractal);
-       settings->getU16NoEx("mgfractal_iterations",   iterations);
-       settings->getV3FNoEx("mgfractal_scale",        scale);
-       settings->getV3FNoEx("mgfractal_offset",       offset);
-       settings->getFloatNoEx("mgfractal_slice_w",    slice_w);
-       settings->getFloatNoEx("mgfractal_julia_x",    julia_x);
-       settings->getFloatNoEx("mgfractal_julia_y",    julia_y);
-       settings->getFloatNoEx("mgfractal_julia_z",    julia_z);
-       settings->getFloatNoEx("mgfractal_julia_w",    julia_w);
+       settings->getFlagStrNoEx("mgfractal_spflags",      spflags, flagdesc_mapgen_fractal);
+       settings->getFloatNoEx("mgfractal_cave_width",     cave_width);
+       settings->getS16NoEx("mgfractal_large_cave_depth", large_cave_depth);
+       settings->getS16NoEx("mgfractal_lava_depth",       lava_depth);
+       settings->getU16NoEx("mgfractal_fractal",          fractal);
+       settings->getU16NoEx("mgfractal_iterations",       iterations);
+       settings->getV3FNoEx("mgfractal_scale",            scale);
+       settings->getV3FNoEx("mgfractal_offset",           offset);
+       settings->getFloatNoEx("mgfractal_slice_w",        slice_w);
+       settings->getFloatNoEx("mgfractal_julia_x",        julia_x);
+       settings->getFloatNoEx("mgfractal_julia_y",        julia_y);
+       settings->getFloatNoEx("mgfractal_julia_z",        julia_z);
+       settings->getFloatNoEx("mgfractal_julia_w",        julia_w);
 
        settings->getNoiseParams("mgfractal_np_seabed",       np_seabed);
        settings->getNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
@@ -127,17 +116,19 @@ void MapgenFractalParams::readParams(const Settings *settings)
 
 void MapgenFractalParams::writeParams(Settings *settings) const
 {
-       settings->setFlagStr("mgfractal_spflags",  spflags, flagdesc_mapgen_fractal, U32_MAX);
-       settings->setFloat("mgfractal_cave_width", cave_width);
-       settings->setU16("mgfractal_fractal",      fractal);
-       settings->setU16("mgfractal_iterations",   iterations);
-       settings->setV3F("mgfractal_scale",        scale);
-       settings->setV3F("mgfractal_offset",       offset);
-       settings->setFloat("mgfractal_slice_w",    slice_w);
-       settings->setFloat("mgfractal_julia_x",    julia_x);
-       settings->setFloat("mgfractal_julia_y",    julia_y);
-       settings->setFloat("mgfractal_julia_z",    julia_z);
-       settings->setFloat("mgfractal_julia_w",    julia_w);
+       settings->setFlagStr("mgfractal_spflags",      spflags, flagdesc_mapgen_fractal, U32_MAX);
+       settings->setFloat("mgfractal_cave_width",     cave_width);
+       settings->setS16("mgfractal_large_cave_depth", large_cave_depth);
+       settings->setS16("mgfractal_lava_depth",       lava_depth);
+       settings->setU16("mgfractal_fractal",          fractal);
+       settings->setU16("mgfractal_iterations",       iterations);
+       settings->setV3F("mgfractal_scale",            scale);
+       settings->setV3F("mgfractal_offset",           offset);
+       settings->setFloat("mgfractal_slice_w",        slice_w);
+       settings->setFloat("mgfractal_julia_x",        julia_x);
+       settings->setFloat("mgfractal_julia_y",        julia_y);
+       settings->setFloat("mgfractal_julia_z",        julia_z);
+       settings->setFloat("mgfractal_julia_w",        julia_w);
 
        settings->setNoiseParams("mgfractal_np_seabed",       np_seabed);
        settings->setNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
@@ -211,7 +202,7 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
        MgStoneType stone_type = generateBiomes();
 
        if (flags & MG_CAVES)
-               generateCaves(stone_surface_max_y, MGFRACTAL_LARGE_CAVE_DEPTH);
+               generateCaves(stone_surface_max_y, large_cave_depth);
 
        if (flags & MG_DUNGEONS)
                generateDungeons(stone_surface_max_y, stone_type);