X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Femerge.h;h=1653199ecbb15d5f59fb83b4c79b7cfab3a79d59;hb=3444dec2db30b8aa8a4e9c268fdba2f84b870ce3;hp=0acc89a6daf448bfd329f52c1b0f37841a8ba3a7;hpb=b9d8e59bbf727fcc1a073bbf27e5d1703b9490ef;p=minetest.git diff --git a/src/emerge.h b/src/emerge.h index 0acc89a6d..1653199ec 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -1,27 +1,50 @@ +/* +Minetest +Copyright (C) 2010-2013 kwolekr, Ryan Kwolek + +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. +*/ + #ifndef EMERGE_HEADER #define EMERGE_HEADER #include -#include -#include "util/thread.h" +#include "irr_v3d.h" +#include "util/container.h" +#include "mapgen.h" // for MapgenParams +#include "map.h" #define BLOCK_EMERGE_ALLOWGEN (1<<0) -class Mapgen; -class MapgenParams; -class MapgenFactory; -class Biome; -class BiomeDefManager; +#define EMERGE_DBG_OUT(x) \ + do { \ + if (enable_mapgen_debug_info) \ + infostream << "EmergeThread: " x << std::endl; \ + } while (0) + class EmergeThread; -class ManualMapVoxelManipulator; -//class ServerMap; -//class MapBlock; +class INodeDefManager; +class Settings; -#include "server.h" +class BiomeManager; +class OreManager; +class DecorationManager; +class SchematicManager; struct BlockMakeData { - bool no_op; - ManualMapVoxelManipulator *vmanip; + MMVManip *vmanip; u64 seed; v3s16 blockpos_min; v3s16 blockpos_max; @@ -29,94 +52,69 @@ struct BlockMakeData { UniqueQueue transforming_liquid; INodeDefManager *nodedef; -// BlockMakeData(); -// ~BlockMakeData(); - -BlockMakeData(): - no_op(false), - vmanip(NULL), - seed(0), - nodedef(NULL) -{} - -~BlockMakeData() -{ - delete vmanip; -} + BlockMakeData(): + vmanip(NULL), + seed(0), + nodedef(NULL) + {} + + ~BlockMakeData() { delete vmanip; } +}; + +struct BlockEmergeData { + u16 peer_requested; + u8 flags; }; class EmergeManager { public: - std::map mglist; + INodeDefManager *ndef; + + std::vector mapgen; + std::vector emergethread; + + bool threads_active; //settings - MapgenParams *params; + MapgenParams params; + bool mapgen_debug_info; + u16 qlimit_total; + u16 qlimit_diskonly; + u16 qlimit_generate; + u32 gen_notify_on; + std::set gen_notify_on_deco_ids; + + //// Block emerge queue data structures JMutex queuemutex; - std::map blocks_enqueued; //change to a hashtable later - Mapgen *mapgen; - EmergeThread *emergethread; + std::map blocks_enqueued; + std::map peer_queue_count; - //biome manager - BiomeDefManager *biomedef; + //// Managers of map generation-related components + BiomeManager *biomemgr; + OreManager *oremgr; + DecorationManager *decomgr; + SchematicManager *schemmgr; - EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef); + //// Methods + EmergeManager(IGameDef *gamedef); ~EmergeManager(); - void initMapgens(MapgenParams *mgparams); - Mapgen *createMapgen(std::string mgname, int mgid, - MapgenParams *mgparams, EmergeManager *emerge); - MapgenParams *createMapgenParams(std::string mgname); - Mapgen *getMapgen(); + void loadMapgenParams(); + static MapgenSpecificParams *createMapgenParams(const std::string &mgname); + void initMapgens(); + Mapgen *getCurrentMapgen(); + Mapgen *createMapgen(const std::string &mgname, int mgid, + MapgenParams *mgparams); + static void getMapgenNames(std::list &mgnames); + void startThreads(); + void stopThreads(); bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate); - bool popBlockEmerge(v3s16 *pos, u8 *flags); - - bool registerMapgen(std::string name, MapgenFactory *mgfactory); - MapgenParams *getParamsFromSettings(Settings *settings); - void setParamsToSettings(Settings *settings); - + //mapgen helper methods Biome *getBiomeAtPoint(v3s16 p); int getGroundLevelAtPoint(v2s16 p); bool isBlockUnderground(v3s16 blockpos); - u32 getBlockSeed(v3s16 p); -}; - -class EmergeThread : public SimpleThread -{ - Server *m_server; - ServerMap *map; - EmergeManager *emerge; - Mapgen *mapgen; - bool enable_mapgen_debug_info; - -public: - Event qevent; - std::queue blockqueue; - - EmergeThread(Server *server): - SimpleThread(), - m_server(server), - map(NULL), - emerge(NULL), - mapgen(NULL) - { - enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); - } - - void *Thread(); - - void trigger() - { - setRun(true); - if(IsRunning() == false) - { - Start(); - } - } - - bool getBlockOrStartGen(v3s16 p, MapBlock **b, - BlockMakeData *data, bool allow_generate); }; #endif