X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Femerge.h;h=b4c8e9ffd43f7281ae11f3999fff23693f84548d;hb=a020d1b653f94fbcaac06c15f9dbab4521fda355;hp=e5014df589e416555db47dc5b4a2ed36da58bf11;hpb=979ca23f1eae1adeb8b0083dffe7203c54d87395;p=oweals%2Fminetest.git diff --git a/src/emerge.h b/src/emerge.h index e5014df58..b4c8e9ffd 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -1,9 +1,35 @@ +/* +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 "map.h" // for ManualMapVoxelManipulator +#include "mapgen.h" // for MapgenParams + +#define MGPARAMS_SET_MGNAME 1 +#define MGPARAMS_SET_SEED 2 +#define MGPARAMS_SET_WATER_LEVEL 4 +#define MGPARAMS_SET_FLAGS 8 #define BLOCK_EMERGE_ALLOWGEN (1<<0) @@ -11,15 +37,15 @@ { if (enable_mapgen_debug_info) \ infostream << "EmergeThread: " x << std::endl; } -class Mapgen; -class MapgenParams; -class MapgenFactory; +class EmergeThread; +//class Mapgen; +//struct MapgenFactory; class Biome; class BiomeDefManager; -class EmergeThread; -class ManualMapVoxelManipulator; - -#include "server.h" +class Decoration; +class Ore; +class INodeDefManager; +class Settings; struct BlockMakeData { ManualMapVoxelManipulator *vmanip; @@ -46,39 +72,51 @@ struct BlockEmergeData { class EmergeManager { public: + INodeDefManager *ndef; + std::map mglist; - + 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 gennotify; + //block emerge queue data structures JMutex queuemutex; std::map blocks_enqueued; std::map peer_queue_count; - //biome manager + //Mapgen-related structures BiomeDefManager *biomedef; + std::vector ores; + std::vector decorations; - EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef); + EmergeManager(IGameDef *gamedef); ~EmergeManager(); - void initMapgens(MapgenParams *mgparams); + void loadMapgenParams(); + void initMapgens(); + Mapgen *getCurrentMapgen(); Mapgen *createMapgen(std::string mgname, int mgid, MapgenParams *mgparams); - MapgenParams *createMapgenParams(std::string mgname); + MapgenSpecificParams *createMapgenParams(std::string mgname); + void startThreads(); + void stopThreads(); bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate); - - bool registerMapgen(std::string name, MapgenFactory *mgfactory); - MapgenParams *getParamsFromSettings(Settings *settings); - void setParamsToSettings(Settings *settings); - + + void registerMapgen(std::string name, MapgenFactory *mgfactory); + void loadParamsFromSettings(Settings *settings); + void saveParamsToSettings(Settings *settings); + //mapgen helper methods Biome *getBiomeAtPoint(v3s16 p); int getGroundLevelAtPoint(v2s16 p); @@ -86,43 +124,4 @@ public: u32 getBlockSeed(v3s16 p); }; -class EmergeThread : public SimpleThread -{ - Server *m_server; - ServerMap *map; - EmergeManager *emerge; - Mapgen *mapgen; - bool enable_mapgen_debug_info; - int id; - -public: - Event qevent; - std::queue blockqueue; - - EmergeThread(Server *server, int ethreadid): - SimpleThread(), - m_server(server), - map(NULL), - emerge(NULL), - mapgen(NULL), - id(ethreadid) - { - } - - void *Thread(); - - void trigger() - { - setRun(true); - if(IsRunning() == false) - { - Start(); - } - } - - bool popBlockEmerge(v3s16 *pos, u8 *flags); - bool getBlockOrStartGen(v3s16 p, MapBlock **b, - BlockMakeData *data, bool allow_generate); -}; - #endif