diff options
author | Vitaliy <silverunicorn2011@yandex.ru> | 2017-11-09 01:56:20 +0300 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-11-08 23:56:20 +0100 |
commit | 20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f (patch) | |
tree | 67378802190117d8271b3b6d489a92bcb16203b7 /src/mapgen/mg_decoration.h | |
parent | fc9747eb4b7f75e59a28957bc50f7a78256b3d66 (diff) | |
download | minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.tar.gz minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.tar.bz2 minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.zip |
Move files to subdirectories (#6599)
* Move files around
Diffstat (limited to 'src/mapgen/mg_decoration.h')
-rw-r--r-- | src/mapgen/mg_decoration.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/mapgen/mg_decoration.h b/src/mapgen/mg_decoration.h new file mode 100644 index 000000000..1ca632f25 --- /dev/null +++ b/src/mapgen/mg_decoration.h @@ -0,0 +1,136 @@ +/* +Minetest +Copyright (C) 2014-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net> +Copyright (C) 2015-2017 paramat + +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 +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include <unordered_set> +#include "objdef.h" +#include "noise.h" +#include "nodedef.h" + +class Mapgen; +class MMVManip; +class PcgRandom; +class Schematic; + +enum DecorationType { + DECO_SIMPLE, + DECO_SCHEMATIC, + DECO_LSYSTEM +}; + +#define DECO_PLACE_CENTER_X 0x01 +#define DECO_PLACE_CENTER_Y 0x02 +#define DECO_PLACE_CENTER_Z 0x04 +#define DECO_USE_NOISE 0x08 +#define DECO_FORCE_PLACEMENT 0x10 +#define DECO_LIQUID_SURFACE 0x20 +#define DECO_ALL_FLOORS 0x40 +#define DECO_ALL_CEILINGS 0x80 + +extern FlagDesc flagdesc_deco[]; + + +class Decoration : public ObjDef, public NodeResolver { +public: + Decoration() = default; + virtual ~Decoration() = default; + + virtual void resolveNodeNames(); + + bool canPlaceDecoration(MMVManip *vm, v3s16 p); + size_t placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); + + virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling) = 0; + + u32 flags = 0; + int mapseed = 0; + std::vector<content_t> c_place_on; + s16 sidelen = 1; + s16 y_min; + s16 y_max; + float fill_ratio = 0.0f; + NoiseParams np; + std::vector<content_t> c_spawnby; + s16 nspawnby; + s16 place_offset_y = 0; + + std::unordered_set<u8> biomes; +}; + + +class DecoSimple : public Decoration { +public: + virtual void resolveNodeNames(); + virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling); + + std::vector<content_t> c_decos; + s16 deco_height; + s16 deco_height_max; + u8 deco_param2; + u8 deco_param2_max; +}; + + +class DecoSchematic : public Decoration { +public: + DecoSchematic() = default; + + virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling); + + Rotation rotation; + Schematic *schematic = nullptr; +}; + + +/* +class DecoLSystem : public Decoration { +public: + virtual void generate(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); +}; +*/ + + +class DecorationManager : public ObjDefManager { +public: + DecorationManager(IGameDef *gamedef); + virtual ~DecorationManager() = default; + + const char *getObjectTitle() const + { + return "decoration"; + } + + static Decoration *create(DecorationType type) + { + switch (type) { + case DECO_SIMPLE: + return new DecoSimple; + case DECO_SCHEMATIC: + return new DecoSchematic; + //case DECO_LSYSTEM: + // return new DecoLSystem; + default: + return NULL; + } + } + + size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); +}; |