From 20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 9 Nov 2017 01:56:20 +0300 Subject: Move files to subdirectories (#6599) * Move files around --- src/mapgen/mg_decoration.h | 136 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/mapgen/mg_decoration.h (limited to 'src/mapgen/mg_decoration.h') 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 +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 +#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 c_place_on; + s16 sidelen = 1; + s16 y_min; + s16 y_max; + float fill_ratio = 0.0f; + NoiseParams np; + std::vector c_spawnby; + s16 nspawnby; + s16 place_offset_y = 0; + + std::unordered_set biomes; +}; + + +class DecoSimple : public Decoration { +public: + virtual void resolveNodeNames(); + virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling); + + std::vector 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); +}; -- cgit v1.2.3